当你在一个工作目权限为777的文件下,新建一个文件的时候,就有可能发生,新建的这个文件,权限和其他文件,或者工作目录不一致的问题,我们不可能每次新建一个文件,就要
sudo chmod -R 777 /PATH
所以就不得不聊一聊权限继承的问题,即我们如何让新建的文件权限与目录保持一致。
一 通过ACL设置,继承权限(部分文件)(推荐)
1. 确保Linux系统支持ACL
下载(Ubuntu)
sudo apt install acl
2. 为目录设置默认ACL规则
将目标目录的权限模式(如
777
)设置为默认继承规则:
-d
:设置默认 ACL(对新创建的文件和目录生效)。
-m
:修改 ACL 条目。
u::rwx,g::rwx,o::rwx
:用户、组、其他用户均拥有rwx
权限。
-R
:递归应用到现有子目录(可选)。sudo setfacl -Rdm u::rwx,g::rwx,o::rwx /PATH
3. 验证ACL规则
查看目录内的ACL配置:
getfacl /path/
输出应该为:
default:user::rwx default:group::rwx default:other::rwx
4. 测试新建文件的权限
touch /path/newfile.txt
ls -l /path/newfile.txt
新建文件test04.sh与03.sh的区别
二 通过umask 设置,继承权限(全局)
通过修改 umask 值,控制新创建文件的默认权限。但此方法影响整个用户会话,存在安全风险。
1. 临时修改 umask(仅当前终端有效)
在终端中设置 umask 为
000
:
000
:新建文件权限为666
(rw-rw-rw-),目录为777
(rwxrwxrwx)。
umask 000
2. 永久修改 umask(谨慎操作)
1. 编辑用户配置文件(如
~/.bashrc
),添加:umask 000
2. 然后重新加载配置:
source ~/.bashrc
三 权限继承原理与注意事项
ACL 与 umask 的优先级
若目录设置了默认 ACL,新文件的权限由 ACL 规则与 umask 共同决定。
例如:若 umask 为
022
,则文件最终权限为ACL权限 & ~umask
(即666 & ~022 = 644
)。推荐优先使用 ACL,避免全局修改 umask。
文件与目录的权限差异
文件默认不继承执行权限(
x
),需手动添加(如通过 ACL 显式设置)。目录需要执行权限(
x
)才能进入,因此默认应保留rwx
。
安全性警告
风险:开放
777
权限可能导致恶意用户篡改或删除文件。建议:仅在测试环境或完全信任的场景下使用,生产环境应精细化控制权限。
总结:
最佳方案:使用
setfacl
设置目录的默认 ACL 规则,实现权限自动继承。应急方案:临时修改 umask,但需注意安全影响。
验证命令:通过
getfacl
和ls -l
检查权限是否符合预期。