Linux 文件权限与敏感目录加固指南

在 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 文件权限与敏感目录加固指南

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏