Wai*_*ung 87 linux unix shell permissions
我有一个名为data
. 然后我在用户 id 'robot' 下运行一个脚本。机器人写入data
目录并更新里面的文件。data
我和机器人都可以更新这个想法。
所以我设置了这样的权限和所有者组
drwxrwxr-x 2 me robot-grp 4096 Jun 11 20:50 data
Run Code Online (Sandbox Code Playgroud)
我和机器人都属于'robot-grp'。我像父目录一样递归地更改权限和所有者组。
我定期data
使用rsync
. 不幸的是,上传的新文件没有像我希望的那样继承父目录的权限。相反,它看起来像这样
-rw-r--r-- 1 me users 6 Jun 11 20:50 new-file.txt
Run Code Online (Sandbox Code Playgroud)
当机器人尝试更新时new-file.txt
,由于缺少文件权限而失败。
我不确定设置 umask 是否有帮助。无论如何,新文件并没有真正遵循它。
$ umask -S
u=rwx,g=rx,o=rx
Run Code Online (Sandbox Code Playgroud)
我经常对 Unix 文件权限感到困惑。我什至有一个正确的计划吗?我正在使用 Debian lenny。
chu*_*rnd 54
您不想更改系统的默认 umask,这是一个安全风险。粘滞位选项在某种程度上会起作用,但使用 ACL 是最好的方法。这比你想象的要容易。基本 ACL 的问题在于默认情况下它们不是递归的。如果在目录上设置 ACL,则只有该目录中的文件会继承 ACL。如果创建子目录,它不会获取父 ACL,除非 ACL 设置为递归。
首先,确保为目录所在的卷启用了 ACL。如果有tune2fs
,则可以执行以下操作:
# tune2fs -l /dev/sda1 | grep acl
Default mount options: user_xattr acl
Run Code Online (Sandbox Code Playgroud)
如果没有tune2fs
,请检查fstabs
:
# cat /etc/fstab
/dev/system/root / ext3 defaults 1 1
/dev/system/home /home ext3 defaults 1 2
/dev/storage/data /data ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
Run Code Online (Sandbox Code Playgroud)
显示“默认值”的第 4 列表示在我的系统 (CentOS 5.5) 上,ACL 已启用。如有疑问,请将其保留为默认值。如果您尝试设置ACL,它的错误了,回去设置后,添加ACL选项/ etc / fstab中正确的: defaults,acl
。
据我了解,您希望用户组中的每个人都拥有对数据目录的写访问权限。这是通过以下方式完成的:
setfacl -Rm g:users:rwX,d:g:users:rwX data/
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 33
标记目录 setgid ( g+s
) 将使新文件继承该目录的组所有权,但-g
rsync 选项将尝试覆盖这一点。
其他答案适用于一般情况,但正如您提到的 rsync 是问题的根源,您可能只需要调整其调用。
首先,流行的-a
标志使 rsync 复制权限;使用-r
istead of-a
或 add -no-p
(用于无权限同步)和-no-g
(用于无组同步)。rsync 还支持--chmod
标志来更改新创建文件的权限。
归档时间: |
|
查看次数: |
150885 次 |
最近记录: |