最小权限控制的核心是只给用户完成任务所必需的最低权限;chmod控制读/写/执行访问模式,chown控制文件所有者与所属组,二者配合实现按需授权,结合umask和acl可保障持续安全。

最小权限控制的核心是:只给用户完成任务所必需的最低权限,不额外开放读、写、执行或所有权变更能力。chmod 控制访问模式(谁可以读/写/执行),chown 控制归属(谁拥有文件、属于哪个组)。二者配合使用,才能真正实现“按需授权”。
明确身份角色与最小权限原则
在设权限前,先厘清三个关键身份:
- 文件所有者(user):通常是创建者,一般需要读写,有时需执行(如脚本)
- 所属组(group):协作成员,通常只需读(或读+执行),极少需要写
- 其他用户(others):非所有者也非组员,默认应禁止访问(即权限为 0)
例如 Web 服务中,网站代码目录的所有者是部署用户(如 deploy),Web 服务器进程(如 www-data)属于特定组,访客不应有本地文件系统访问权——这就决定了 others 权限应为 ---(即 0)。
用 chmod 设置精确的八进制权限
避免使用 chmod 777 或 chmod 755 这类宽泛值,而是按角色逐位计算:
- 所有者:rwx = 4+2+1 = 7(脚本)、rw- = 6(配置文件)、r-- = 4(只读资源)
- 所属组:r-x = 5(可读可执行,如 Web 目录)、r-- = 4(仅读)、--- = 0(完全禁止)
- 其他用户:通常用 0,极少数公开只读场景可用 4(r--)
典型安全组合示例:
-
chmod 640 config.ini—— 所有者可读写,组内只读,其他人无权访问 -
chmod 750 /var/www/app—— 所有者全权,组内可进入和执行(如运行 PHP),其他人被拒 -
chmod 600 ~/.ssh/id_rsa—— 仅所有者可读写,SSH 密钥必须如此
用 chown 合理划分归属关系
所有权不是越集中越好,而是按职责拆分:
- 敏感文件(如密码文件、私钥)归单一运维用户,且组设为
nogroup或专用空组,再配chmod 600 - 协作目录(如 Git 仓库工作区)设为
deploy:devteam,再用chmod 770或更严的750,避免组员误删 - Web 可写目录(如上传目录)设为
www-data:www-data,但限制父目录不可写,且用chmod 750防止其他用户遍历
注意:chown user:group file 同时改用户和组;chown :group file 只改组;chown -R 递归操作要格外谨慎,建议先 ls -l 确认范围。
配合 umask 与默认 ACL 实现持续控制
单次 chmod/chown 不足以维持最小权限,需源头控制:
- 设置用户级
umask 007(在~/.bashrc中),使新文件默认权限为 660、新目录为 770,自动排除 others - 对复杂协作场景,用
setfacl补充细粒度控制,比如允许某开发人员临时读取日志:setfacl -m u:alice:r /var/log/app.log,而不提升组权限 - 定期检查异常权限:
find /path -type f -perm /002 -ls找到所有对 others 可写的文件,及时修正
不复杂但容易忽略











