在 CentOS 7 上,为了锁定网站程序目录下的文件,防止修改、添加或创建,可以使用 chattr 命令、SELinux 或 ACL 来加强安全性。
方案 1:使用 chattr
锁定文件
chattr
(change attribute,修改文件属性)可以防止文件被修改或删除,即使是 root 用户。
1.1 锁定整个网站目录
假设网站目录为 /var/www/html
,可以执行:
chattr -R +i /var/www/html
-R
:递归操作,对所有子目录和文件生效。+i
:加上 immutable(不可变)属性,任何用户(包括 root)都无法修改、删除、重命名或添加文件。
1.2 取消锁定
如果需要更新文件,可以先解锁:
chattr -R -i /var/www/html
方案 2:使用 SELinux 限制修改
如果你的系统启用了 SELinux,可以配置 SELinux 来防止目录中的文件被修改。
2.1 查看 SELinux 是否开启
getenforce
如果返回 Enforcing
,说明 SELinux 已开启。
2.2 只允许 Web 服务器读取文件
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
httpd_sys_content_t
只允许 Apache/Nginx 读取文件,禁止修改。
2.3 禁止 PHP 脚本修改文件
setsebool -P httpd_unified 0
setsebool -P httpd_can_write 0
setsebool -P httpd_can_network_connect 0
httpd_unified 0
:防止 Web 服务器修改自身文件。httpd_can_write 0
:禁止写入文件。httpd_can_network_connect 0
:防止 PHP 脚本发起外部连接(如 WebShell 下载木马)。
方案 3:使用 ACL 细粒度控制权限
如果网站有多个用户维护,可以使用 ACL(Access Control List,访问控制列表)进行更精细的权限管理。
3.1 确保 ACL 已安装
yum install -y acl
3.2 设置目录为只读
setfacl -R -m u:apache:rX /var/www/html
setfacl -R -m d:u:apache:rX /var/www/html
- 只允许 Apache 读取文件,阻止写入。
3.3 限制 PHP-FPM 访问
setfacl -R -m u:nginx:rX /var/www/html
如果使用 Nginx + PHP-FPM,确保 PHP-FPM 用户无法修改文件。
方案 4:禁止网站目录的 chmod
、chown
操作
可以使用 Linux 进程监控 限制对 /var/www/html
的 chmod
和 chown
操作:
echo "chmod -R /var/www/html" >> /etc/rc.local
chmod 755 /etc/rc.local
这样,每次重启后,权限都会恢复。
推荐方案
- 基础防护:使用
chattr +i
锁定目录,防止恶意篡改。 - 进阶防护:开启 SELinux 并配置 httpd_sys_content_t,防止 WebShell 修改文件。
- 精细控制:使用 ACL 设置不同用户的权限,防止开发人员误操作。
你可以根据实际需求选择合适的方案。如果你的服务器需要支持定期更新,可以配合 cron 定期解锁、更新后再重新加锁。
本文来自投稿,不代表本站立场,如若转载,请注明出处: