⭐ 推荐:社区规则条款 V1.0

虚拟主机上安装 CMS 需要注意哪些权限设置?

周末
周末 新人站长
发布于 2026-10-14 15:49 ·1 浏览 ·2 回复
内容摘要

虚拟主机安装 CMS 应将目录设为 755、文件设为 644,属主与 PHP 运行账户一致,仅安装时开放配置文件、上传和缓存目录写权限,装完把 wp-config.php 收紧至 600 或 440,任何情况下禁用 777。

结论:虚拟主机上安装 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、恢复备份后都要复查一遍。

虚拟主机上安装 CMS 需要注意哪些权限设置?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1961.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 2

满月居于空
满月居于空 版主资深会员新人站长 👑年卡会员 1楼 2026-10-14 15:59

主线是对的,补几个虚拟主机上真正容易踩的坑。

属主比权限数字重要。 共享主机上「无法写入」九成不是 755/644 的问题,而是 FTP 上传的文件属主是 FTP 账户、PHP 却跑在 apache/www-data 下。这种情况给到 775 并让两者同组,或者干脆用面板的文件管理器上传、跑一次「修正所有权」,比反复 chmod 管用得多。动手前先 ls -l 看属主属组。

核心目录锁死后,自动安全更新会静默失败。 wp-admin、wp-includes、wp-content/plugins 设成不可写的代价,就是 WordPress 再也自动更新不了,只剩邮件提醒。要么接受定期手动更新,要么装插件时临时放开再改回去,别指望两全。

装完必须删安装目录和备份包。 DedeCMS 的 /install、Typecho 的 /install.php,还有随手丢在根目录的 .sql、.zip、.tar.gz,是共享主机被挂马的头号入口。

最后把你断掉的那句补上:.htaccess 里加 Options -Indexes 关掉目录列表,再拦一下对 wp-config.php、.git、*.sql 的直接访问。另外 wp-config.php 收到 600 之后,如果 PHP-FPM 跑在别的账户下会直接白屏,先确认是同一属主再收紧。

lqyyzz
lqyyzz 观望站长 #1506 2楼 2026-10-14 16:13
满月居于空:主线是对的,补几个虚拟主机上真正容易踩的坑。 **属主比权限数字重要。** 共享主机上「无法写入」九成不是 755/644 的问题,而是 FTP 上传的文件属…

你这四条基本把共享主机上的坑填满了,我补几个更细的。

属主那条还能再省一步:不用 root 也能自查 PHP 到底跑在哪个账户——临时扔个文件写 <?php echo posix_getpwuid(posix_geteuid())['name'];(被禁就用面板里的「PHP 运行方式」看),跟 ls -l 的属主一比就清楚了,查完立刻删。另外 suPHP 环境下 777 不是「能用的万能解」,而是直接 500,这点很多人踩过。

自动更新那条,与其锁死目录又要手动放开,不如把 FS_METHOD 显式设成 direct,前提还是属主一致;真要锁,就用 wp-cli 或面板的一键更新绕过去,比来回改权限稳得多。

清理清单可以再加几个:readme.html(泄露版本号)、wp-config.php.bak、.wp-config.php.swp、.user.ini、随手传的 phpinfo.php;DedeCMS 的 /dede 后台目录最好改名并加 IP 限制。

还有个前提容易忽略:Nginx 不读 .htaccess。虚拟主机如果是 Nginx,你补的那些拦截规则得写进面板的伪静态或自定义 location 里,否则全是摆设。

600 会不会白屏,判断标准就是属主一致不一致:同属主直接上 600 没问题,跨账户就退到 640 并保证同组,别为追数字把站搞挂。装完先跑一遍面板的文件校验或木马扫描,再定期复查权限,比堆一堆安全插件实在。