1. 根目录与结构概览
核心分区与用途
在 Linux 的文件系统层级中,根目录 / 是整个目录树的起点,所有其他目录都从它分支扩展。理解根目录下的常见分区能帮助我们快速定位系统组件的位置与职责,如 /bin、/sbin、/lib、/lib64 提供基础执行文件与库,/etc 存放系统配置,/dev、/proc、/sys 代表设备及内核接口的伪文件系统。熟悉这些分区有助于定位权限管理的重点区域以及潜在的风险点。
核心概念:分区与挂载点决定了哪些对象能被访问、谁能访问以及如何控制访问权限。不同的目录对应不同的权限策略,理解它们有助于更稳健地实施安全策略与运维流程。
常见目录及作用
除了根目录之外,下面这些目录承担着系统运行的关键职责:/usr 存放用户态程序、库和头文件,/var 保存可变数据如日志与邮箱,/tmp 提供临时文件存放并通常启用粘滞位来保护用户文件,/home 存放普通用户的个人目录,/root 是 root 用户的主目录,/boot 包含引导加载程序及内核相关文件。
权限隔离:系统级命令与服务通常放在 /bin、/sbin、/lib 等目录以确保最小特权执行;而用户级应用常驻 /usr,其访问权限需要通过组、ACL 或 SELinux 等机制进行细粒度控制。
# 查看根目录及常见子目录的权限与拥有者
ls -ld /
ls -ld /bin /sbin /lib /lib64
ls -ld /usr /var /tmp /home /root /boot /etc
2. 权限基础:用户、组、其他
rwx 权限机制
Linux 使用三组权限位来控制访问:用户 (u)、同组用户 (g)、其他人 (o)。每组权限由三位组成,分别是 读 r、写 w、执行 x。例如,drwxr-xr-x 表示拥有者具有全部权限,而同组与其他用户只有读取与执行权限。了解这一点是管理文件与目录权限的基石。
权限组合 的方式有两种:数字表示法(如 755、644)和符号表示法(如 u=rwx,g=rx,o=rx、a+wx 等)。在实际运维中,数字表示法常用于快速设定,符号表示法便于逐项调整。
用户、组、其他的权限分配
文件的所有者通常是创建者,所属组则是创建时所归属的用户组。你可以通过 chown 命令改变所有者,通过 chgrp 改变所属组,或使用一次性组合:chown 林俊杰:www-data /var/www。这为将应用服务账户与实际文件分离提供了灵活性。
对目录或文件进行权限变更时,考虑需求最小化原则:仅赋予完成任务所必需的权限,避免全局可写或全局可执行。
# 查看文件的拥有者和权限
ls -l /var/www
# 修改拥有者与组
chown www-data:www-data /var/www
# 修改权限为拥有者可读写执行,组与其他人可读执行
chmod 755 /var/www
# 查看具体的权限与所有者信息(扩展信息)
stat /var/www
3. 特殊权限与标志位
setuid、setgid 与粘着位
除了常规的 rwx 位,Linux 还支持一些特殊权限位:setuid、setgid,以及目录上的粘着位(sticky bit)。setuid 允许程序以文件所有者的身份运行,常见于如 /usr/bin/passwd 的可提权执行;setgid 让新创建的文件继承组权限,常见于共享目录。
粘着位主要用于公共临时目录,例如 /tmp,确保用户不能删除别人创建的文件。使用不当可能带来安全隐患,因此需要谨慎设置。
# 给脚本设置 setuid 位(慎用,仅在信任环境中使用)
chmod u+s /path/to/script# 给目录设置 setgid,确保新创建的文件继承目录的组
chmod g+s /shared# 在 /tmp 上开启粘着位
chmod 1777 /tmp
应用示例与注意点
正确的使用场景:仅在必要时对可执行文件启用 setuid/setgid;对目录使用粘着位以保护其他用户的临时文件。对系统敏感目录应禁用该特性以降低攻击面。
风险点:setuid 程序若存在漏洞,可能被利用提升权限;错误地将权限涂抹在敏感目录上,会导致数据泄露或越权访问。
# 查看某文件的权限以及是否设置了 setuid/setgid
ls -l /path/to/file
stat /path/to/file
4. 高级权限管理:ACL 与 SELinux/AppArmor
ACL(访问控制列表)与精细化权限
在传统的 rwx 模型之上,ACL 提供对单个用户和组的更细粒度权限控制。并非所有文件系统都默认启用 ACL,需要在挂载时开启 acl 选项。常用工具包括 getfacl(查看 ACL)与 setfacl(设置 ACL)。
使用 ACL 可实现“某用户对某目录有读写权限、但对其他用户不可见”的场景,极大提升多租户或开发环境的权限管理能力。
# 查看一个文件或目录的 ACL
getfacl /shared# 给用户 alice 增加对 /shared 的读写权限,且默认 ACL
setfacl -m u:alice:rwX /shared
setfacl -d -m u:alice:rwX /shared
# 需要确保挂载点启用了 ACL
# 查看挂载选项
mount | grep ' / '# 如果未启用,需修改 /etc/fstab(示例)
/dev/sda1 / ext4 rw,acl 0 1
SELinux 与 AppArmor
SELinux(或 AppArmor)提供强制访问控制(MAC),通过上下文和策略进行权限管理。通过 ls -Z 查看对象的安全上下文,通过 chcon、restorecon 调整或还原上下文。审计日志常通过 audit2why 与 ausearch 帮助诊断策略问题。
对于需要高度隔离的服务器,结合 ACL 与 SELinux/AppArmor 可以实现更细致的访问控制,降低横向移动的风险。

# 查看文件的 SELinux 上下文
ls -Z /var/log# 修改文件上下文(谨慎使用,通常通过策略自动化)
chcon -t httpd_log_t /var/log/access.log
5. 挂载点与文件系统挂载选项
fstab 与挂载基础
系统在启动时会根据 /etc/fstab 将分区挂载到指定的目录。正确的挂载选项是确保权限与性能的基础之一。典型字段包括设备、挂载点、文件系统类型、挂载选项、以及 dump 与 fsck 配置。
挂载选项 如 defaults、acl、nosuid、nodev、noexec 等,直接影响权限策略和安全性。
# /etc/fstab 示例片段
UUID=abcd-1234-ef56 / ext4 rw,relatime,acl 0 1
常见挂载选项及实战要点
nosuid 和 nodev 可以防止把 root 权限意外赋予挂载点中的可执行文件,noexec 则阻止在该挂载点执行程序,常用于 /tmp、/var/tmp 或外部设备。
ACL 与 XATTR 的开启,确保 ACL 权限、扩展属性能够生效,需在挂载时携带 acl、user_xattr 等选项。
# 重新挂载根分区以应用新的挂载选项
mount -o remount,rw /
# 或将 ACL 与 xattr 启用写入 /etc/fstab 后生效
6. 实战场景:从根目录到权限控制的实战
修复权限与所有权的实战案例
在多用户环境中,错误的权限会导致服务不可用或数据暴露。常见步骤包括:定位问题文件、查看当前所有者和权限、逐步调整至最小权限。 chown 与 chmod 是基石操作,先确保拥有者正确,再应用合适的权限。
步骤示例:发现 /var/www 目录权限异常后,统一设为 www-data 所有、目录可执行与读取,文件设为对应用可读即可。
# 诊断权限
ls -ld /var/www
# 调整为应用服务账户可读写执行,其他人只读执行
chown -R www-data:www-data /var/www
chmod -R 755 /var/www
审计与合规性检查的实战做法
为了长期稳定性,需要定期审计权限与 ACL 配置,确保没有过度授权。find 命令可用于定位高风险权限,例如全局可写的文件、setuid 程序等。
示例任务:查找具有 setuid 位的文件,以及具备可写权限的对外目录。
# 查找具有 setuid 位的文件
find / -type f -perm /4000 -print 2>/dev/null# 查找对所有用户可写的目录
find / -perm -0777 -type d -print 2>/dev/null
7. 权限审计与安全最佳实践
审计工具与日常检查
持续的权限审计有助于发现潜在的风险点。常用工具包括 getfacl、setfacl、ls -l、以及对系统日志的分析。结合 SELinux/AppArmor 的策略日志,可以更全面地评估权限状态。
定期执行对关键目录(如 /home、/var/www、/etc)以及服务账户目录的检查,能及早发现异常权限变更。
# 查看关键目录的权限快照
ls -ld /home /var/www /etc# 查看 ACL 情况
getfacl /home /var/www# 简单的权限差异对比(每日备份后对比)
diff -u /root/permissions_today.txt /root/permissions_yesterday.txt
备份、恢复与权限一致性
在进行重大变更前后应进行权限与元数据的备份,以便恢复。常用做法包括 tar -p、rsync -a、以及对扩展属性与 ACL 的保留。
一致性:确保备份目标文件系统的 ACL、xattr、以及 SELinux/AppArmor 上下文能够在恢复后保持一致性,以避免权限漂移。
# 使用 rsync 保留权限和元数据备份
rsync -aHAX /source /backup# 使用 tar 保留元数据与 ACL
tar -cpf /backup/root.tar / --acls --xattrs --preserve-permissions


