结论:虚拟主机上安装 CMS(内容管理系统,如 WordPress、Typecho、DedeCMS)的权限只有一条主线:目录 755、文件 644,文件属主必须和 PHP 运行账户一致;安装阶段只开放配置文件、上传和缓存目录的写权限,装完把 wp-config.php 收紧到 600 或 440,任何情况下不要用 777。
虚拟主机安装 CMS 时目录和文件应该设成什么权限?
结论:标准权限是目录 755、文件 644。755 表示所有者可读可写可执行,同组用户和其他用户只读可执行;644 表示所有者可读可写,同组用户和其他用户只读。PHP 文件不需要执行位,PHP 代码由 PHP-FPM 或 Apache 模块解释执行。
如果虚拟主机以用户身份运行 PHP(常见 suPHP、PHP-FPM per-user 模式),755/644 就能让 CMS 正常读写。如果 PHP 以 www-data、apache、nginx 等账户运行,而文件属主是 FTP 用户,上传目录需要 775,并让两个账户同组。批量修正命令可以这样写:
find /home/账号/public_html -type d -exec chmod 755 {} \;
find /home/账号/public_html -type f -exec chmod 644 {} \;
chmod 600 /home/账号/public_html/wp-config.php
先执行 ls -l 看属主和属组。属主不对,权限数字再漂亮也会报“无法写入”。
哪些目录要给写权限,哪些不能给?
结论:安装和运行期间真正需要写权限的只有 wp-config.php(安装瞬间)、wp-content/uploads、wp-content/cache、session 或临时目录;核心程序、wp-admin、wp-includes、wp-content/plugins、wp-content/themes 安装后都不应可写。
WordPress 安装向导如果无法写 wp-config.php,会要求输入 FTP 信息。更稳的做法是手动创建 wp-config.php,数据库名、用户、密码填好,再设 600。上传目录给 755 且属主正确即可;如果 PHP 运行账户和文件属主不同,给 775 并同组。
在线安装插件或主题时,临时把 wp-content/plugins、wp-content/themes 加到 775,装完立即改回 755。根目录 777 等于把整站交给同主机其他账户,共享虚拟主机上这是最容易被挂马的方式。
安装完成后 wp-config.php 和 .htaccess 怎么收紧?
结论:wp-config.php 安装后从 644 改为 600;如果 Web 服务器组必须读,用 640;追求更严可设 440。.htaccess(Apache/LiteSpeed 的目录配置文件)保持 644。
数据库不要用 root。单独建库用户,只授权当前库,主机限制 localhost。安装时通常需要 SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、INDEX、DROP,安装完成后可按主机面板能力撤销 DROP、ALTER。可以在 wp-config.php 加 define('DISALLOW_FILE_EDIT', true);,禁用后台主题和插件编辑器。
在 .htaccess 里加 Options -Indexes,禁止目录被直接列出。上传目录禁止执行 PHP,Apache 2.4 可用:
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
如果虚拟主机面板有“禁止脚本执行”开关,优先用面板开关。
怎么检查权限有没有设错?
结论:用 ls -l 看属主,用 find 批量修正,用浏览器实际触发上传和更新。检查结果应为:wp-config.php 为 600、640 或 440;wp-content/uploads 为 755 或 775;其余目录 755,文件 644。
如果 CMS 报“无法写入 wp-config.php”,先看该文件属主是否 PHP 运行用户,再临时加写位,不要直接 chmod 777。安装目录 install 或 install.php 装完删除或改名。数据库连接失败时,先确认库用户是否有当前库权限,再看主机名是不是 localhost,不要急着改文件权限。
为什么 777 是虚拟主机上最危险权限?
结论:777 表示所有用户都可读、写、执行。共享主机同服务器其他账户一旦能写你的 PHP 文件,就可以插入后门、篡改页面、窃取数据库密码。数据库用户权限过大也一样,入侵后可删库。
正确做法是“最小权限”:目录 755、文件 644、属主一致、数据库只授权当前库、上传目录禁止执行 PHP。权限设置不是装完就结束,每次安装插件、更新 CMS、恢复备份后都要复查一遍。