Skip to main content

File Permission scenario in wp

you:

give me strategy to save the wordpress files and folder using find or grep or local and change its permission

ChatGPT:

Below is a practical strategy to safely find, verify, and correct file and directory permissions in WordPress using Linux commands like find, grep, and simple local backupsbefore changing permissions. This method prevents accidental permission damage and ensures recoverability.

Objective

  • Save a **safe list of WordPress files & folders for backup
  • Detect **wrong permissions using find
  • **Fix recursively based on WordPress security standards
  • Optional: Backup metadata locally before applying changes

WordPress Standard Permissions

ItemPermissionWhy
Directories755Can be read/executed by others
Files644Only owner can write
wp-config.php600–640Extra security
uploads folder755 recommendedAvoid 777 (dangerous)

Step-by-Step Strategy (Safe Workflow)

Step 1: Go to WordPress root

cd /path/to/your/wordpress
# Example:
cd /home/user/public_html

Step 2: Save current permission state (for rollback)

This saves a log for rollback if needed.

find . -exec stat -c "%a %n" {} ; > permissions-backup-$(date +%F).log

Restore later if needed:

while read perm file; do chmod $perm "$file"; done < permissions-backup-2025-10-22.log

Step 3: Identify wrong permissions

Find **files with dangerous permissions:

find . -type f -perm 777

Find **directories with dangerous permissions:

find . -type d -perm 777

Find PHP files writable by others:

find . -type f -name "*.php" -perm -002

List all permissions by group:

find . -printf "%m %u %g %pn" | grep -E "777|666|775"

Step 4: Fix permissions safely

Set WordPress base permissions:

find . -type d -exec chmod 755 {} ;
find . -type f -exec chmod 644 {} ;

Lock critical config:

chmod 600 wp-config.php

Step 5: Fix ownership (common issue when using FTP/panels)

If web server uses www-data:

chown -R www-data:www-data .

If using CyberPanel/OpenLiteSpeed:

chown -R nobody:nogroup .

If using shared hosting username:

chown -R username:username .

Optional Checks Before Live Apply

Preview before changing:

find . -type f -not -perm 644 -print
find . -type d -not -perm 755 -print

Only fix inside /wp-content/uploads:

find wp-content/uploads -type f -exec chmod 644 {} ;

Skip .git folders:

find . -path ./.git -prune -o -type f -exec chmod 644 {} ;

Optional: Backup WordPress File Structure List (local safety)

find . -type f > wordpress-file-list-$(date +%F).txt
find . -type d > wordpress-folder-list-$(date +%F).txt

Final Command Bundle (Copy & Run Safe)

cd /home/user/public_html
&& find . -exec stat -c "%a %n" {} ; > permissions-backup-$(date +%F).log
&& find . -type d -exec chmod 755 {} ;
&& find . -type f -exec chmod 644 {} ;
&& chmod 600 wp-config.php

If you want, I can:

Turn this into a bash script

Add logging + rollback

Add exclude wp-content/cache/

Make it **multi-site recursive for /home/*/public_html/

Which version do you want next?

A. Basic single WordPress script

B. Safe version with logs + rollback

C. Multi-site auto detect script (perfect for VPS)

D. Add security scan for malware + permissions

Reply with: **A, B, C or D

you:

do you agree that reject execute (x) permission in wordpress files or folder?

ChatGPT:

Short answer:

No you should **not completely reject execute (x) permission in WordPress directories.

But yes you should **reject execute permission on WordPress files (with a few exceptions).

Correct Security Rule

ItemExecute (x) PermissionReason
Directories (folders)✅ Required (755)Needed to enter/access directory
Regular files (*.php, *.html, *.txt, etc.)❌ Should NOT have execute bitThey are not executables
Script files (*.sh, WP-CLI scripts)✅ Allowed if intentionalOnly for maintenance scripts
Uploads folder files (uploads/)❌ Never executablePrevent weaponized images or shell

Why Directories Must Have x

In Linux, the execute (x) on a directory doesnt execute code, it allows:

  • Access to directory (cd folder)
  • List/read files within it

Without x, Apache/Nginx/PHP cannot even read your WordPress files.

So if you remove execute on directories:

chmod -R 644 .

Result: No malware, BUT total WordPress crash (500 error / permission denied).

Safe WordPress Permission Standard

TypePermissionCommand
Directories755find . -type d -exec chmod 755 {} ;
Files644find . -type f -exec chmod 644 {} ;
wp-config.php600chmod 600 wp-config.php
No dangerous permissionsAvoid 777 and 775Security risk

Final answer

**Reject execute for files (good security)

**Do NOT reject execute for folders (site will break)

If you want I can give you:

A. Quick command to remove execute only from files

B. Full safe permission hardening script

C. **Auto repair permissions for WordPress

D. With **extra malware safety inside /uploads

Choose: **A, B, C, or D?

you:

else of wp-config file permission set up what other we can secure from virus?

ChatGPT:

To secure WordPress from malware/virus threats beyond just wp-config.php permissions, you can harden **file system security in multiple layers. Heres a **practical and VPS-friendly approach.

Top Files & Folders to Secure Beyond wp-config.php

TargetSecure PermissionWhy Secure ItCommand
wp-config.php600Protect DB credentialschmod 600 wp-config.php
.htaccess (if Apache)644 or 444Prevent rewrite hackschmod 644 .htaccess
nginx.conf (if NGINX)600Prevent server rule tamperingSecure at system level
wp-includes/755Prevent PHP execution injectionProtect core scripts
wp-admin/755Prevent modificationSecure dashboard entry
wp-content/755Limit writable areaOnly uploads should allow writes
wp-content/uploads/755 + block PHPPrevent malware in uploadsDeny PHP execution
wp-content/themes/755Prevent theme tamperingSecure template files
wp-content/plugins/755Prevent plugin backdoorSecure plugin layout
.user.ini / php.ini600Block PHP override hacksAvoid malicious ini abuse

Critical Security Actions (Virus Prevention)

Block PHP inside /uploads (most common virus entry point)

cat << 'EOF' > wp-content/uploads/.htaccess
<FilesMatch ".php$">
Deny from all
</FilesMatch>
EOF

For NGINX:

location ~* /wp-content/uploads/.*.php$ { deny all;

Disable direct file editing in WP Admin

// Add inside wp-config.php
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);

Lock .htaccess after setup (if Apache)

chmod 444 .htaccess

Restrict system .ini (prevent PHP malware config)

chmod 600 .user.ini 2>/dev/null

Scan for injected malware signatures

grep -R --line-number "base64_decode" .
grep -R --line-number "gzinflate" .
grep -R --line-number "shell_exec" .

Fix permissions (must do)

find . -type d -exec chmod 755 {} ;
find . -type f -exec chmod 644 {} ;
chmod 600 wp-config.php

Bonus: Advanced Anti-Malware Hardening

Disable dangerous PHP functions

Limit writable folders

Malware checksum check

Auto quarantine backdoors

nginx/apache access-rule defense

Object cache injection defense

you:

im using open litespeed

ChatGPT:

Perfect since you're using OpenLiteSpeed (OLS), some security hardening steps are **different compared to Apache or NGINX. OLS uses **LiteSpeed context rules instead of .htaccess in some cases, and we also need to protect **PHP execution inside /uploads and prevent **malicious scripts from running.

Lets harden **WordPress security on OLS beyond wp-config.php.

Priority Security List for OpenLiteSpeed + WordPress

Security LayerWhy NeededStatus
✅ File/Dir permissionsFirst line of defenseMust do
✅ Lock wp-config.phpDB + salts securityMust do
✅ Disable PHP in /uploads90% malware comes hereMust do
✅ Disable file editing in wp-adminPrevent dashboard hacksMust do
✅ Clean LSCache loopholesPrevent PHP upload executionImportant
✅ Block dangerous PHP functionsStop webshellsOptional but strong
✅ Restrict XML-RPC & wp-loginStop brute forceOptional
✅ Malware scan & integrityDetect hidden backdoorsImportant

Step 1: Secure File & Folder Permissions

Run from WordPress root:

find . -type d -exec chmod 755 {} ;
find . -type f -exec chmod 644 {} ;
chmod 600 wp-config.php

Step 2: Disable PHP Execution in wp-content/uploads

OLS **ignores .htaccess inside subfolders unless configured. So we must secure **uploads using a Context rule.

OPTION A Apply via .htaccess (Works if Rewrite is allowed in OLS)

Create:

nano wp-content/uploads/.htaccess

Add:

<FilesMatch ".php$">
Order Allow,Deny
Deny from all
</FilesMatch>

Then restart OLS:

systemctl restart lsws

OPTION B Safer OLS method (Context Rule in WebAdmin)

If you want the **recommended way:

Go to OpenLiteSpeed Panel:

https://your-server-ip:7080 Login

Virtual Hosts your domain Context Add

FieldValue
TypeStatic
URI/wp-content/uploads/
Location/path/to/wordpress/wp-content/uploads/
Access ControlDeny PHP execution

Add this:

RewriteRule .*.(php|php5|php7|phtml)$ - [F,L]

Save Graceful Restart

Step 3: Disable Plugin & Theme Editor

Add to wp-config.php:

define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);

Step 4: Block Dangerous PHP Functions

Create/update .user.ini:

echo "disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source" >> .user.ini

Reload PHP:

killall -u nobody lsphp

Step 5: Block XML-RPC (Anti Bot Attack)

Add to .htaccess:

<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>

If you want, I can bundle all these into a **single OLS WordPress Hardening Script that:

Fixes permissions

Blocks PHP in uploads

Secures lsphp

Adds configs automatically

Do you want:

A. Minimal OLS security

B. OLS security + uploads PHP protection

C. Full hardening + malware scan

D. Full with auto backups + rollback (safe)

Choose: **A, B, C, or D