Linux中保持新文件权限:让tom可读写指定目录日志文件求助
解决Tom对目标目录现有及未来文件的权限需求
你已经搞定了现有文件的权限配置,但新创建文件的组权限问题卡壳了对吧?核心问题是**用户owner的默认权限掩码(umask)**导致新文件缺失组写权限,结合目录的默认ACL设置,就能完美满足你的需求。
最优方案:使用默认ACL(推荐)
这个方法仅针对/one/two/three/for/目录生效,不会影响owner用户在其他目录创建文件的默认权限,是最精准的解决方案。
步骤1:确认系统支持ACL
大部分现代Linux发行版默认已开启ACL支持,你可以通过以下命令验证:
mount | grep acl
如果输出包含目标分区的acl字样,说明已支持;若没有,可能需要重新挂载分区(例如mount -o remount,acl /,具体分区请根据实际情况调整)。
步骤2:设置目录的默认ACL
执行以下命令,给owner组添加该目录下新创建文件的默认读写权限:
setfacl -d -m g:owner:rw /one/two/three/for/
-d:表示设置默认ACL,作用于未来在该目录下创建的文件/子目录-m:表示修改ACL规则g:owner:rw:给owner组分配读(r)和写(w)权限
步骤3:验证效果
让owner用户在该目录下创建一个测试文件:
touch /one/two/three/for/test_new_file
查看文件权限:
ls -l /one/two/three/for/test_new_file
你会看到权限变为-rw-rw-r--,此时tom作为owner组的成员,就能正常读写这个新文件了。
备选方案:调整owner用户的umask
如果owner用户所有创建的文件都需要组写权限,可以修改他的umask值:
临时生效(仅当前会话)
执行命令:
umask 002
默认umask是022,会去掉组的写权限;设置为002后,新创建的文件默认权限为664,目录为775。
永久生效
根据owner使用的shell,修改对应的配置文件:
- Bash:编辑
~/.bashrc或~/.profile,添加一行umask 002 - Zsh:编辑
~/.zshrc,添加一行umask 002
修改后重新登录shell,设置就会永久生效。
补充说明:删除权限的确认
你已经将目录权限设置为drwxrwxr-x,tom作为owner组的成员拥有目录的写权限——这意味着他已经具备删除该目录下任何文件的权限(删除文件的权限由所在目录的权限决定,而非文件本身),这部分无需额外设置。
内容的提问来源于stack exchange,提问作者intore




