Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

If WordPress repeatedly asks for FTP credentials or reports that a plugin update failed, the usual cause is a mismatch between the account that owns your files and the account running PHP. WordPress first tests whether its process can create, replace, and delete files. When that test fails, its Filesystem API falls back to FTP, FTPS, SFTP, or SSH credentials.

The reliable fix is not to make everything world-writable or to force direct updates. Back up the site, identify the real PHP/web-server account, inspect ownership, select an ownership model appropriate to your host, change only the affected paths, and then retry the update.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why WordPress asks for FTP credentials

A plugin update is a filesystem operation, not just a download. WordPress must write the package, unpack it, replace the existing plugin directory, remove obsolete files, and create a temporary .maintenance marker while the update runs. Before doing that, WordPress checks whether the PHP process can write to the relevant directories.

When the files are owned by the account running the web server, and newly created files will inherit suitable ownership, WordPress can use direct filesystem I/O. No credentials are needed because the operating-system permission check succeeds. If the process cannot write safely, WordPress uses its Filesystem API to request another method, such as FTP, FTPS, SFTP, or SSH.

Ownership is host-dependent. On one server the PHP worker may run as www-data; on another it may run as apache, nginx, nobody, a per-site user, or a pool-specific account. Shared hosting may intentionally keep files owned by your hosting or FTP account rather than by a common web-server user. That is why copying a command that changes everything to www-data can break a site or weaken its isolation.

Direct updates versus credential-based updates

Method Who writes the files Transport Best fit Main concern
Direct filesystem I/O The PHP/web-server process None; local file operations A single-user server or a correctly isolated PHP pool Unsafe if the web process has excessive access or the host is misconfigured
FTP The FTP account Usually unencrypted unless the host provides explicit FTP encryption Legacy hosting where FTP ownership is intentional Credentials and file contents can be exposed on an unencrypted connection
FTPS The FTP account FTP protected with TLS Hosts that provide encrypted FTP Requires correct TLS settings and credentials
SFTP The SSH/SFTP account SSH encryption Administrated servers and hosts offering secure file access The account still needs appropriate directory permissions
SSH filesystem method The configured SSH user SSH Servers where WordPress is allowed to update through SSH Incorrect keys, paths, or account restrictions can stop updates

The deciding factors are the file owner and group, the account running PHP, whether the site is shared or single-user, the encryption of any remote transport, and whether the arrangement follows least privilege.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Prepare before changing ownership

  1. Back up the database and files. Make a current, restorable backup of the WordPress directory, uploads, configuration, and database. A permissions change can make the site or other applications inaccessible if the path or account is wrong.
  2. Confirm the document root. Locate the directory that contains wp-admin, wp-includes, wp-content, and wp-config.php. A control-panel account may contain several sites, so do not assume the first public directory is the one you need.
  3. Choose a maintenance window. Updating a plugin changes live code. If you will be changing ownership recursively, schedule a time when you can test the front end, dashboard, scheduled jobs, and any connected services.
  4. Record the current state. Save the output of ownership and permission checks before editing. This gives you a rollback reference and helps your host support team diagnose the change.

Identify the account that runs PHP

Do not assume the answer is www-data. First determine how the site executes PHP: Apache with a module, PHP-FPM behind Apache or Nginx, a per-user hosting pool, or a managed platform. The control panel or hosting documentation may state the account directly.

On a server where you have shell access, an administrator can inspect running processes with a command such as ps -eo user,group,comm,args | egrep 'php-fpm|apache2|httpd|nginx'. PHP-FPM pool configuration commonly contains a user and group setting; the value for the pool serving this site is the relevant one. Process listings can show a master process rather than the worker, so confirm the pool or worker account instead of relying on a single line of output.

On shared hosting, you may not be able to inspect processes. Ask support which account executes PHP for your domain and whether the provider expects files to remain owned by your FTP account. If support cannot provide that information, use the provider’s documented permission tool rather than guessing.

Inspect the WordPress paths and their owners

Check the document root, wp-content, and wp-content/plugins separately. Ownership on a parent directory can differ from ownership on plugin directories, and an update can fail because one nested directory is not writable even when the top-level listing looks correct.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

With shell access, use read-only commands first:

ls -ld /path/to/wordpress /path/to/wordpress/wp-content /path/to/wordpress/wp-content/plugins
find /path/to/wordpress/wp-content/plugins -maxdepth 2 -type d -printf '%M %u:%g %pn' | head -n 40
stat -c '%A %U:%G %n' /path/to/wordpress/wp-content /path/to/wordpress/wp-content/plugins

Replace the example path with the confirmed document root. The first fields show mode bits; the owner and group identify which accounts can modify the directories. A directory also needs execute permission to be traversed. A file that is writable but sits inside a non-writable directory can still prevent an update.

Use the file manager or SFTP client’s properties view if you do not have shell access. Look for the owner, group, and permissions on the same three paths. Avoid editing permissions on the entire home directory, server root, or unrelated sites while investigating one WordPress installation.

Choose the ownership model that matches your host

Single-user or dedicated server

On a dedicated server, the PHP worker and the site administrator may be the same account, or the worker may be a dedicated account that is also the owner of the WordPress files. The goal is that the PHP process can create temporary files and replace plugin directories without granting access to unrelated applications.

If administration is performed by a separate shell user, a common least-privilege design is a shared group: the site files are owned by the administrator, the PHP account belongs to the site group, and group write permission is granted only where WordPress must update files. The exact group and mode depend on the server’s umask, deployment process, and isolation settings.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Shared hosting

Many shared hosts deliberately keep files owned by your hosting or FTP account while PHP runs in a restricted per-site environment. In that model, changing ownership to a global web-server account can make the files inaccessible to your account or violate the provider’s isolation rules. Keeping the provider’s ownership and entering SFTP, FTPS, or the host’s supported credentials when WordPress asks may be the safer and intended workflow.

When you are unsure

Do not change ownership until the host confirms the execution model. A managed WordPress provider can apply the provider-specific fix, and a server administrator can verify the PHP-FPM pool, group membership, and access-control layers. The right owner is the account that the host designed to manage this site, not a universal username.

Repair only the affected paths

Use the hosting provider’s documented chown, chgrp, and permission procedures. The following patterns illustrate the scope of a repair; substitute the confirmed account, group, and path, and have an administrator review them before execution:

chown -R SITEUSER:SITEGROUP /path/to/wordpress/wp-content
find /path/to/wordpress/wp-content -type d -exec chmod 755 {} ;
find /path/to/wordpress/wp-content -type f -exec chmod 644 {} ;

These are examples, not universal prescriptions. Some hosts require a different owner, a different group, ACL entries, or tighter modes. Some deployment systems intentionally use group-writable directories. Applying a recursive command to the wrong path can change another site, a system directory, or files that must remain protected. Confirm the path with pwd, use an absolute path, and review the command before pressing Enter.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Change only what the update requires. If the problem is limited to wp-content/plugins, do not recursively rewrite ownership of the whole server. If a single plugin directory has an incorrect owner, repair that directory after checking whether a deployment tool or security policy will immediately revert it. Preserve special files such as wp-config.php according to the host’s hardening guidance rather than applying one mode to every file.

Rank #4
Teacher Record Book
  • Keep track of everything from attendance to test scores
  • Spiral bound
  • Measures 8-1/2" x 11"
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Retry the update and remove a stale maintenance marker

  1. Log in to WordPress and open Dashboard > Updates.
  2. Run the plugin update again, or open Plugins and select the individual plugin’s update link.
  3. Watch for a completion message and verify that the plugin version changed. Then load the public site and a representative dashboard screen.
  4. If WordPress still requests credentials, use the host-approved SFTP, FTPS, FTP, or SSH method. Direct updates are not mandatory when the remote method is secure and correctly configured.

A failed update can leave a .maintenance file in the WordPress directory. When that marker remains after the underlying problem is fixed, WordPress may continue displaying a maintenance or failed-update notice. Connect with the approved FTP or SFTP method, show hidden files, and remove only .maintenance from the WordPress root. Do not delete similarly named files elsewhere, and do not remove the marker while an update is genuinely still running.

Security boundaries: fixes that create bigger problems

Never use 777 as a blanket fix

Mode 777 gives owner, group, and every other local process read, write, and execute access. WordPress warns that world-writable files let server processes or other users modify the installation, creating a security exposure. It also hides the real ownership problem and can allow an unrelated compromised account to alter executable PHP code.

Do not force direct mode just to suppress a prompt

Adding define('FS_METHOD', 'direct'); to wp-config.php can force WordPress to attempt direct file I/O, but WordPress documents that direct access can be unsafe on poorly configured hosts. It does not repair ownership, group membership, or directory permissions. Remove an override that was added only to silence the prompt unless the host explicitly requires and supports it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Prefer encrypted remote access

If credentials are necessary, prefer SFTP or FTPS when the host supports them. Plain FTP does not provide the same transport protection. Use a dedicated account limited to the site, strong authentication, and the smallest directory scope the provider allows.

Troubleshooting by symptom

Symptom Likely cause Next check
Credentials appear on every update PHP cannot write the plugin path, or a forced filesystem method is misconfigured Compare the PHP pool account with the owner/group of wp-content/plugins; inspect wp-config.php for an unnecessary FS_METHOD override
Only one plugin will not update That plugin directory or a nested file has different ownership or mode Inspect the specific plugin directory and its parent; repair only that path
Update downloads but fails during unpacking The temporary directory or destination is not writable, or disk space is exhausted Check the PHP temporary directory, destination permissions, and available storage; ask the host about quotas
Ownership changes revert A deployment process, control panel, or security policy reapplies its own owner Identify the process that resets permissions and use its supported configuration
Site shows a maintenance message after failure A stale .maintenance file remains in the WordPress root Confirm no update is active, then remove that hidden file through the approved file-access method
Changing to www-data breaks uploads or SFTP The host expects a per-site or FTP account to own files Restore the provider’s ownership model from backup or support guidance; do not repeat a global recursive change

Verify the repair without weakening the site

  • Confirm the PHP execution account and the owner/group of the document root, wp-content, and wp-content/plugins.
  • Update a small, non-critical plugin and confirm that WordPress can create, replace, and remove files.
  • Check the front end, administrator login, media uploads, scheduled tasks, and any cache or security plugin that depends on writable directories.
  • Review the resulting modes and ownership; ensure no unrelated directory became writable by everyone.
  • Keep the backup and the before-change ownership record until the site has operated normally through at least one update cycle.

If you cannot identify the PHP account, the correct document root, or the host’s intended ownership model, stop before running recursive commands. Request server-permissions help or use WordPress hosting with filesystem support that documents its PHP user and update method. A short support intervention is safer than a broad permission change that exposes multiple sites.

Quick Recap

SaleBestseller No. 1
SaleBestseller No. 3
Bestseller No. 4
Teacher Record Book
Teacher Record Book
Keep track of everything from attendance to test scores; Spiral bound; Measures 8-1/2" x 11"
$4.89

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.