如何在 Linux 服务器上创建真正共享的文件夹?我希望项目团队的成员能够像对待自己的文件一样读写每个文件,无论他们是将文件复制或移动到文件夹中,还是自己在文件夹中创建文件,或者文件是由其他人创建的。
到目前为止我遇到了以下问题:
- umask 仅在系统范围级别起作用,并忽略现有文件
- ACL 忽略用户移动到文件夹中的文件
- inotify 看起来像是一个 hack,因为它会在之后修复权限,这可能会导致一些办公文档出现问题
- 经常
chgrp -R projectteam /folder/
导致性能、延迟和备份问题。
force user
我当前的解决方案是在同一台服务器上安装并启用SAMBA 共享force group
。但是,对于多个项目组来说,管理起来很麻烦,而且我认为性能会受到影响。
任何帮助或想法都将不胜感激。我运行的是 Debian 10。
来自德国汉堡的亲切问候
迈克尔
答案1
如果所有项目用户都分配了一个共同的项目组,则可以在项目目录(及其子目录)上设置 setgid 位:
find /path/to/teamfolder -type d -exec chmod g+s '{}' \;
还要在项目目录上设置 ACL 权限,例如:
setfacl -d -m u::rwx,g::rwx,o::r-x /path/to/teamfolder
当目录上设置了 setgid 位时,该目录中创建的所有文件都将继承该目录的组所有权。ACL 权限将允许在项目目录中创建的文件对该组具有写权限。
可以按以下方式添加新用户:
sudo usermod -a -G projgrp newuser
希望这可以帮助。
答案2
您有几层配置需要排列,这样可以使管理变得相当简单。
正如 Abhishek 所建议的,为目录设置 setgid 位非常有用,因为它使得目录的组所有权对于新创建的文件和目录默认可继承。
但是,正如您所观察到的,复制的文件保留了其所有权。对于重新设置组所有权,incrontab 方法很好。更现代的方法是使用 systemd .path 文件来监视修改,并使用相应的 .service 文件来运行 chgrp。
为了解决有关配置以支持多个项目组的问题,请考虑以下内容:
首先,请记住 Samba 仅提供身份验证,并且依赖于文件系统权限和主机用户帐户。
将 umask 设置为 0002,默认允许组写权限。
为每个用户创建一个主机帐户:
sudo useradd andreas
sudo useradd beatrix
sudo useradd ciela
出于管理目的,创建一个不同于根用户的数据“超级用户”:
sudo useradd oberst
为每个项目创建一个组:
sudo groupadd hund
sudo groupadd katz
为每个项目创建一个数据目录,设置权限(包括 setguid 位)和所有权。下面设置 setgid 位 (2),为超级用户 oberst 和指定组授予完全权限 (7),不授予其他权限 (0),因此非组成员无法读取、写入或执行:
sudo mkdir /srv/hund
sudo chown oberst:hund /srv/hund
sudo chmod 2770 /srv/hund
sudo mkdir /srv/katz
sudo chown oberst:katz /srv/katz
sudo chmod 2770 /srv/katz
将用户添加到组:
sudo usermod -a -G hund andreas
sudo usermod -a -G hund beatrix
sudo usermod -a -G katz beatrix
sudo usermod -a -G katz ciela
将用户添加到 Samba:
sudo smbpasswd -a andreas
sudo smbpasswd -e andreas
sudo smbpasswd -a beatrix
sudo smbpasswd -e beatrix
sudo smbpasswd -a ciela
sudo smbpasswd -e ciela
编辑 smb.conf 以创建共享。Read-only=no 允许写入访问,browsable=no 阻止其他人(即非组成员)浏览共享。请注意有效用户指令中的“@”前缀,它通过引用主机组来定义访问权限:
[hund]
path=/srv/hund
read only=no
browsable=no
force group=hund
valid users=@hund
[katz]
path=/srv/katz
read only=no
browsable=no
force group=katz
valid users=@katz
现在(也许重新启动后),andreas 和 beatrix 可以访问(读/写)/srv/hund,但 ciela 不能,beatrix 和 ciela 可以访问(读/写)/srv/katz,但 andreas 不能。
要更改用户访问权限,只需使用 usermod 更改组成员身份即可。
当然,您还应该配置主机帐户和 Samba 帐户的密码。
希望这对您有帮助。