Linux 上的共享文件夹

Linux 上的共享文件夹

如何在 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 帐户的密码。

希望这对您有帮助。

相关内容