Linux 多用户环境下文件安全策略

1次阅读

用户家目录权限必须是700,否则同服务器其他用户可读取敏感文件;/etc/shadow须为600;/var/spool/cron/下文件须为600;/tmp须启用sticky bit(1777);sudoers中应限制nopasswd至具体命令。

Linux 多用户环境下文件安全策略

用户家目录权限必须是 700

普通用户家目录如果被设成 755 或更宽松,同服务器其他用户就能列出文件、读取 .bash_history.ssh/id_rsa.pub 甚至 .env 类配置——这不是理论风险,是真实渗透链起点。

实操建议:

  • 检查:用 ls -ld /home/username 确认输出中权限字段为 drwx------
  • 修复:执行 chmod 700 /home/username,注意不要加 -R,否则会误改内部文件权限
  • 新建用户默认行为:修改 /etc/adduser.conf 中的 DIR_MODE=0700,避免后续用户重蹈覆辙

敏感文件禁止 group/o 可写(尤其是 /etc/shadow 和 cron 任务)

/etc/shadow 被设成 644664 是典型配置失误;同样,用户级定时任务 /var/spool/cron/username 若允许组写,攻击者可通过同组账户注入恶意命令。

实操建议:

  • 关键系统文件权限应严格遵循最小权限原则:/etc/shadow 必须是 600/etc/passwd644(但内容本身不能存密码)
  • 检查 cron 文件:运行 ls -l /var/spool/cron/,确认每个文件权限为 -rw-------
  • 别依赖 umask 补救:cron 守护进程不读用户 umask,必须靠文件系统权限硬控制

tmp 目录必须启用 sticky bit

多用户共用 /tmp/var/tmp 时,若没设 sticky bit(即权限末位不是 t),任意用户都能删掉别人创建的临时文件,甚至替换为符号链接造成 TOCTOU 漏洞。

实操建议:

  • 检查:运行 ls -ld /tmp,确认权限显示为 drwxrwxrwt(末尾 t 表示 sticky bit 已启用)
  • 修复:执行 chmod +t /tmp;若用 systemd,还需检查 /usr/lib/tmpfiles.d/tmp.conf 中是否含 d /tmp 1777 root root - -
  • 注意:1777777,开头的 1 就是 sticky bit 的八进制表示

sudoers 配置里别滥用 NOPASSWD

给用户或组配 NOPASSWD: ALL 等价于交出 root shell,一旦该账户被横向渗透,攻击者无需爆破即可提权。真实运维中,90% 的 NOPASSWD 都能收敛到具体命令。

实操建议:

  • visudo 编辑,避免语法错误锁死 sudo
  • 限制命令路径:写 /usr/bin/systemctl restart nginx,而不是 systemctl(防止 PATH 劫持)
  • 禁用 shell 通配:在命令后加 或用引号包裹参数,避免 sudo /bin/rm -rf /* 这类误操作扩散

真正难的是权限边界的持续收敛——比如开发人员需要部署服务,到底是给 systemctl --user 权限,还是限定到某几个 target,得看实际服务生命周期管理方式,不是加一行 NOPASSWD 就算完事。

text=ZqhQzanResources