Linux 文件权限基础
权限位与所有者、所属组、其他用户
核心概念:Linux 将访问控制分为三组用户,分别是所有者、所属组和其他用户。每一组都拥有读取、写入、执行三种基本权限,用 r、w、x 来表示。
在文件系统中,权限位的九位结构体现为三段三位的组合,通常以“drwxr-xr-x”这类字符串呈现。首字符表示文件类型,后面的三组分别对应 owner、group、others 的权限。
$ ls -l /example/file
-rw-r--r-- 1 user group 1234 Jan 01 12:00 sample.txt
要点总结:r、w、x 的组合决定了谁能做什么,理解这三组权限是进行后续修改的前提。
数字权限与符号权限的对照
数字权限模式用三位数字表示 owner、group、others 的权限总和;每位数字都是 0-7 的值,等效地对应若干个 r、w、x 的组合。
示例中,7 代表 rwx,5 代表 r-x,6 代表 rw-。通过数字直接修改权限时,七进制计算是核心技巧。
chmod 755 file # owner rwx,group/others rx
chmod 644 file # owner rw-, group/others r--
在日常运维中,数字模式执行快速、直观,非常适合初学者快速上手。
三种权限与用户组概念
数字权限与符号权限的区别
符号权限通过 u、g、o、a 和 +、-、= 来逐项添加、移除或覆盖权限,粒度更细,易于逐步调整。
而 数字权限则以三位数字一次性给出 owner、group、others 的权限总和,更适合批量配置和脚本化修改。
chmod u+rwx,g-w o=r file
要点:组合模式与数字模式各有优势,根据场景选择合适的写法,确保权限最小化。
用户、组与其他的权限应用场景
在实际运维中,所有者通常是应用进程的运行用户,组权限用于同一组别的协作,其他用户通常只有最小必要权限,以降低潜在风险。
常见做法是先应用最小权限原则,随后在需要时逐步放宽,确保服务可用性与安全性并行。
# 让应用用户对日志目录有写权限
chmod 766 /var/log/myapp
权限表示法:数字模式与符号模式
数字模式说明
数字模式的三位结构分别对应 owner、group、others 的权限。每位的数值来自 0-7 的组合,例如 0 表示无权限,7 表示 rwx。
在运维实战中,常用值是 644、755、600 等,这些组合覆盖了大部分应用场景。
chmod 755 /path/app # 常用于可执行程序
chmod 600 /path/secret.txt # 仅所有者可读写
要点:理解 7、5、6、4 等数字对应的权限位,是快速读懂权限配置的关键。
符号模式说明
符号模式通过目标对象和运算符来描述权限变更,例如 u、g、o、a 的选择,以及 +、-、= 的行为。
实践中,符号模式适合逐步调整现有权限,而不影响其他位,对日常维护非常友好。
chmod u+x,g-w,o=r /path/script.sh
要点:先锁定目标用户组,再进行权限增减,避免误改其他用户权限。
chmod 实操技巧
常用命令组合
常见组合包括 chmod 755、chmod 644、chmod 700 等,便于快速适配不同应用的需求。
在自动化脚本中,把权限写成变量,便于在不同环境中重用,减少出错概率。
# 快速授权,可执行但仅给定用户
chmod 500 /usr/local/bin/tool
要点:保持权限最小化并遵循服务账户分离,这是稳定可靠的运维基石。
设置默认权限:umask 与新建文件
umask 决定新建文件和目录的默认权限,通常与创建过程的初始权限共同作用,确保未授权的暴露被最小化。
通过合理设置 umask=022 或 027,可以让新建文件保持可读性但限制不必要的写权限。
# 设置默认权限,禁止其他用户写入新建文件
umask 022
要点:了解 umask 的回旋作用,有助于避免新建对象默认就暴露敏感信息。
常见场景下的权限配置案例
Web 服务目录权限
Web 服务器根目录通常需要可执行和可读权限,但要限制写入,以防止目录结构被任意修改。
典型做法是为网站内容目录设置 owner 为网站用户,group 为同组用户,其他人不可写,并为日志目录提供少量写权限。
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
chmod -R 750 /var/www/logs
要点:分离数据目录与日志目录的权限策略,提升整体安全性。
脚本执行权限与安全性
脚本文件应具备可执行权限,但应限制其他用户的执行能力,尤其是在多用户系统中。
通过 精确设定 u=、避免给全体执行权限,可降低被滥用的风险。
chmod 700 /usr/local/bin/deploy.sh
要点:仅给予运行脚本所需的最小权限,是高效且稳健的运维实践。
进一步优化与安全要点
ACL 与扩展权限
ACL(Access Control List) 可以实现更细粒度的权限控制,超出传统 rwx 的简单三组权限。
在复杂场景中,结合 ACL 与基本权限,可为特定用户或服务赋予额外访问权,而不改变全局权限。
setfacl -m u:deploy:r-x /var/www/html
getfacl /var/www/html
要点:谨慎使用 ACL,避免权限冲突和管理复杂度上升,以保持可维护性。
SELinux/AppArmor 考量
SELinux 或 AppArmor 为系统提供强制访问控制,权限不仅限于 rwx、还依赖策略。
在开启这些安全模块时,需要确保策略覆盖实际服务行为,否则即便权限正确也可能被拒绝。
# 查看当前策略状态(示例,具体命令因发行版而异)
sestatus
要点:理解并正确配置安全策略,是提升整体安全性的关键,尤其在生产环境。


