Ker*_*nic 42 permissions subversion group
在我的服务器上,我有目录/srv/svn.
是否可以将此目录设置为具有多个组所有权,例如devFirmA,devFirmB和devFirmC?
关键是,我想subversion版本控制管理跨多个存储库的多个用户,我不知道如何合并 /srv/svn,存储库的根目录,权限。例如,我有三个公司,FirmA,FirmB和FirmC。现在,/srv/svn我在里面创建了三个目录,FirmA, FirmB,FirmC在其中我为每个项目创建了存储库,现在我不知道如何建立权限方案,因为里面的所有元素都归/srv/svn拥有root:root,这不行,还是我错误的?
jcb*_*rmu 34
您只能拥有一个群组作为所有者。
但是使用访问控制列表您可以为其他组定义权限。
检查您是否安装了发出命令的 ACL getfacl。如果您的系统没有安装ACL,安装的命令行工具,是在acl包装用:sudo apt-get install acl
使用getfacl可以读取目录或其他文件的ACL信息,并使用setfacl您可以添加组到一个文件中。
例如:
setfacl -m g:devFirmB:rwx /srv/svn/
Run Code Online (Sandbox Code Playgroud)
附加组devFirmB与[R EAD,w ^仪式,电子X ecute权限目录/srv/svn。
如果您还希望在该目录中创建的文件由多个组拥有,请将 ACL 设置为默认 ACL。该X默认组项的意思是“如果由所有者(或其他人)可执行允许执行”。
setfacl -m g:devFirmB:rwx /srv/svn/
setfacl -d -m g:devFirmB:rwX /srv/svn/
Run Code Online (Sandbox Code Playgroud)
J. *_*ker 20
这是一个非常普遍的问题,如果我理解准确的话,我会经常遇到它。如果我对每个琐碎的分组问题都使用 ACL,我将拥有大量无法管理的系统。当您无法以任何其他方式做到时,他们正在使用最佳实践,而不是针对这种情况。这是我强烈推荐的方法。
首先你需要将你的 umask 设置为 002,这样一个组就可以与自己共享。我通常创建一个类似 的文件/etc/profile.d/firm.sh,然后添加一个带有 umask 的测试命令。
[ $UID -gt 10000 ] && umask 002
接下来,您需要将目录设置为各自的组,
chgrp -R FirmA /srv/svn/FirmA
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC
Run Code Online (Sandbox Code Playgroud)
最后,您需要正确设置 SGID 位,这样该组将始终保持您设置的那个。这将防止写入的文件被设置为写入者的 GID。
find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664
Run Code Online (Sandbox Code Playgroud)
最后,如果您想阻止其他用户访问目录。
chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC
Run Code Online (Sandbox Code Playgroud)
具有传统 Unix 权限的多个 Linux 组不可能拥有一个文件。(但是,可以使用 ACL。)
但是您可以使用以下解决方法并创建一个新组(例如称为devFirms),该组将包括该组的所有用户devFirmA,devFirmB以及devFirmC。
您创建新的用户组:
sudo addgroup NEWGROUPNAME
Run Code Online (Sandbox Code Playgroud)
首先,您可能必须安装id-utils才能获取lid-command:
sudo apt-get install id-utils
Run Code Online (Sandbox Code Playgroud)
然后就可以运行下面这行代码,轻松复制所有用户SOURCEGROUP到TARGETGROUP. 当然,您必须为要复制的每个组运行一次命令。不要忘记用实际的组名替换大写的占位符。
for u in $(lid -g -n SOURCEGROUP); do sudo usermod -a -G TARGETGROUP $u; done
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,您必须运行命令(一次所有行):
sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do sudo usermod -a -G devFirms $u; done
Run Code Online (Sandbox Code Playgroud)
请注意,这些命令仅复制作为源组当前成员的所有用户。以后添加的每个用户也必须使用adduser命令手动添加到您的公共组。只需将大写的占位符再次替换为实际的用户名和组名 ( devFirms):
sudo adduser NEWUSER TARGETGROUP
Run Code Online (Sandbox Code Playgroud)
感谢Justin Ethier在Unix&Linux.SE 的回答:将一个组的所有用户添加到另一个组?
| 归档时间: |
|
| 查看次数: |
110285 次 |
| 最近记录: |