在 Web 安全体系中,服务器操作系统的权限配置往往是最容易被忽视、却也是最致命的一环。一个配置不当的目录权限,可能让攻击者从一个小小的文件上传漏洞,直接升级为服务器完全沦陷。本文将从 Linux 文件权限基础出发,结合敏感目录的加固实践,给出一份可落地的安全清单。
一、理解 Linux 文件权限模型
Linux 的权限体系围绕三个核心概念展开:所有者(Owner)、所属组(Group) 和 其他人(Others),每种身份分别对应读(r)、写(w)、执行(x)三种权限。
使用 ls -l 查看文件时,你会看到类似这样的输出:
-rw-r--r-- 1 root root 4096 Jun 10 10:00 config.php
drwxr-xr-x 2 www-data www-data 4096 Jun 10 10:00 uploads
第一位表示文件类型(- 普通文件,d 目录),随后九位每三位一组,分别对应所有者、组和其他人的权限。
数字表示法与常见误区
权限常用八进制表示:r=4,w=2,x=1。因此 644 表示所有者可读写、其他人只读;755 表示所有者可读写执行、其他人可读执行。
很多运维人员习惯性地对所有目录执行 chmod -R 777,这是极其危险的做法。777 意味着任何用户都可以写入并执行,一旦 Web 应用存在文件上传或包含漏洞,攻击者可以直接上传 WebShell 并执行,服务器瞬间失守。
特殊权限位:SUID、SGID 与 Sticky Bit
除了基础权限,还有三个特殊权限位需要关注:
- SUID(4):执行文件时以文件所有者身份运行。若 root 所有的程序被设置 SUID,普通用户可借此提权。
- SGID(2):类似 SUID,但以所属组身份运行。
- Sticky Bit(1):常见于
/tmp目录,确保只有文件所有者才能删除自己的文件。
排查危险 SUID 文件是加固的重要步骤:
find / -perm -4000 -type f 2>/dev/null
二、Web 目录权限的正确配置
Web 应用目录是攻击者最关注的目标。推荐遵循最小权限原则:
1. 目录与文件分离设置
# 目录设置为 755,允许遍历但仅所有者可写
find /var/www/html -type d -exec chmod 755 {} \;
# 文件设置为 644,仅所有者可写
find /var/www/html -type f -exec chmod 644 {} \;
# 将所有者设为 Web 运行用户
chown -R www-data:www-data /var/www/html
2. 上传目录的特殊处理
上传目录必须禁止执行权限,即使攻击者上传了 PHP 文件也无法运行:
chmod 644 /var/www/html/uploads
同时在 Nginx 中显式禁止该目录执行脚本:
location ^~ /uploads/ {
location ~ \.(php|php5|jsp|asp)$ {
deny all;
}
}
3. 配置文件严格保护
数据库配置、密钥文件等应设为 600,仅所有者可读写:
chmod 600 /var/www/html/config/database.php
chmod 600 /var/www/html/.env
三、敏感目录与文件加固清单
以下目录和文件是攻击者的重点目标,必须逐一加固:
| 目标 | 风险 | 加固措施 |
|---|---|---|
/etc/passwd |
用户信息泄露 | 权限 644,属主 root |
/etc/shadow |
密码哈希泄露 | 权限 600 或 000,属主 root |
/etc/sudoers |
提权配置篡改 | 权限 440,属主 root |
~/.ssh/ |
密钥窃取 | 目录 700,私钥 600 |
/tmp |
恶意文件落地 | 设置 Sticky Bit(1777) |
| Web 根目录 | WebShell 上传 | 目录 755,文件 644 |
SSH 目录加固
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
SSH 私钥一旦泄露,攻击者可直接登录服务器,因此这是最高优先级的加固项。
关闭不必要的危险功能
在 php.ini 中禁用高危函数,可有效阻断 WebShell 的执行能力:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
四、权限审计与持续监控
加固不是一次性工作,需要持续审计。以下是几个实用的排查命令:
# 查找全局可写文件(潜在后门)
find / -type f -perm -0002 2>/dev/null
# 查找无属主文件(可能被删除用户遗留)
find / -nouser -o -nogroup 2>/dev/null
# 监控 Web 目录文件变更
find /var/www/html -mtime -1 -type f
建议将上述命令写入定时任务,配合日志告警,一旦发现异常文件立即响应。
五、与其他安全措施的协同
文件权限加固并非孤立存在,它需要与其他 Web 安全手段配合:
- 防 XSS:前端对用户输入进行转义和过滤,设置合理的 CSP 策略,避免恶意脚本窃取 Cookie。即使权限配置完善,XSS 仍可能通过合法用户身份发起操作。
- 防 SQL 注入:后端坚持使用参数化查询(Prepared Statement),杜绝字符串拼接 SQL。数据库账户应遵循最小权限,禁止使用 root 连接业务库。
- 纵深防御:权限加固是最后一道防线。当应用层漏洞被利用时,严格的权限配置能有效限制攻击者的横向移动和提权空间。
结语
Linux 文件权限与敏感目录加固,本质上是对最小权限原则的贯彻。每一个多余的写权限、每一个 777 目录,都可能成为攻击者的跳板。建议运维和开发人员定期执行权限审计,将本文的清单纳入上线检查流程,并结合 XSS 防御、SQL 注入防护等措施,构建多层次的服务器安全体系。安全没有银弹,唯有持续关注细节,才能让服务器在复杂的攻击环境中保持稳固。
未经允许不得转载:任鹏个人博客 » Linux 文件权限与敏感目录加固指南


朋友圈点赞图在线生成源码