帮忙解答一下问题。 CentOS 7 上有一台服务器,它有一堆用户,每个用户都有自己的项目。有些用户有其他用户工作的子项目,结构大致如下: /home/user1/{project1,project2} 对于项目 1/2 所有者 user1:user1/home/user2{project1,project2}
我想做,但不起作用:有一个允许的 poduser1,它应该与 user1 中的project2 安静地工作(rwx),但该用户的其他项目应该不可用。将用户放在一个组中并不好,太多的权限获得了一切,通过 ACL 尝试过 - 这一点都很笨拙
答案1
我并不完全清楚您的要求,但听起来您希望一个用户(user1
)能够/home/user1/project1
与其他用户( )共享某些子目录(例如 ),user2
而不允许他们完全访问其主目录(/home/user1
)。我认为实现此目的的标准方法是为该目录创建一个特定于项目的组,然后使用 ACL(访问控制列表)和 setgid 位来维护该目录中文件的适当权限和所有权。在您的情况下,您可能可以执行以下命令:
groupadd project1
chown -R user1:project1 /home/user1/project1
chmod -R g+s /home/user1/project1
setfacl --default --modify group:project1:rwx /home/user1/project1
setfacl --modify group:project1:rwx /home/user1/project1
然后,您可以将所需的用户帐户添加到project1
组中,例如:
usermod -a -G project1 user2
下面是更详细的解释。
让我们通过一个示例来说明如何配置您所描述的设置类型。所有这些命令均以 root 身份执行。
首先让我们创建几个用户:
useradd -m user1
useradd -m user2
接下来让我们在第一个用户的主目录中创建一个项目目录:
sudo -u user1 mkdir /home/user1/project1
现在让我们创建一个与该项目关联的组并将其设置为项目目录的组所有者:
groupadd project1
chown -R user1:project1 /home/user1/project1
让我们将这两个用户添加到该项目的组中:
usermod -a -G project1 user1
usermod -a -G project1 user2
现在让我们使用 ACL(访问控制列表)设置项目目录的默认权限:
setfacl --default --modify group:project1:rwx /home/user1/project1
setfacl --modify group:project1:rwx /home/user1/project1
我们还打开 setgid 位:
chmod -R g+s /home/user1/project1
至此,一切都应该顺利进行。我们来检查一下项目目录的权限:
root@host:~# ls -ld /home/user1/project1/
drwxrwsr-x+ 2 user1 project1 4096 Nov 13 12:20 /home/user1/project1/
root@host:~# getfacl /home/user1/project1
getfacl /home/user1/project1/
getfacl: Removing leading '/' from absolute path names
# file: home/user1/project1/
# owner: user1
# group: project1
# flags: -s-
user::rwx
group::r-x
group:project1:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:project1:rwx
default:mask::rwx
default:other::r-x
让我们测试一下user2
写入项目目录的能力:
root@host:~# sudo -u user2 touch /home/user1/project1/testing
root@host:~# ls -l /home/user1/project1/testing
-rw-rw-r--+ 1 user2 project1 0 Nov 13 12:20 /home/user1/project1/testing