设置共享媒体驱动器

Sam*_*man 7 permissions mount directory hard-drive

我希望共享媒体驱动器对所有用户透明可用,同时还遵守 FHS 和 Ubuntu 标准。如有必要,前者优先。我目前将它安装在/media/Stuff/media应该用于外部媒体,我相信。主要问题是设置正确的权限,以便可以将读取和写入驱动器的访问权限授予在同一目录中工作的多个用户。

安装ANewHardDrive似乎有点困惑,也不是我想要的。它声称这为顶级目录设置了所有权(尽管有递归标志):

    sudo chown -R USERNAME:USERNAME /media/mynewdrive
Run Code Online (Sandbox Code Playgroud)

这将允许多个用户创建文件和子目录,但只删除他们自己的:

    sudo chgrp plugdev /media/mynewdrive
    sudo chmod g+w /media/mynewdrive
    sudo chmod +t /media/mynewdrive
Run Code Online (Sandbox Code Playgroud)

但是,组可写位似乎没有被继承,这对于保持组织有序很麻烦(防止在最初由另一个用户创建的子文件夹中创建)。出于同样的原因,粘性位也可能是不需要的,尽管目前似乎一个用户 A(也许是挂载点的所有者?)可以删除用户 B 的文件,但反之则不然。这很好,只要 userB 可以在 userA 的目录中创建文件。所以:

  • 正确的挂载点是什么?
  • plugdev 是正确的组吗?
  • 最重要的是,如何设置权限以维护有组织的媒体驱动器?

我不想定期运行 cron 作业来设置权限!

小智 3

正确的挂载点是/mnt/mynewdrivePlugdev不正确;关于权限,为什么不使用访问控制列表(ACL)?

ACL 工具是默认安装的吗?不记得了,但是,不能伤害……

sudo apt-get install acl
Run Code Online (Sandbox Code Playgroud)

使用 /etc/fstab 中的 acl 选项挂载文件系统。

sudo vim /etc/fstab
Run Code Online (Sandbox Code Playgroud)

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 默认,acl 0 1

sudo mount -o remount,acl /
Run Code Online (Sandbox Code Playgroud)

然后创建一个用户可能属于此目的的组(我将其称为stone),然后让用户成为该组的成员。

sudo groupadd stone
sudo usermod -a -G stone $username
Run Code Online (Sandbox Code Playgroud)

用户需要注销并重新登录才能成为该组的成员。如果目录 /mnt/mynewdrive 已安装且完全为空:

sudo chown root.stone /mnt/mynewdrive
sudo chmod 0775 /mnt/mynewdrive
sudo chmod g+s  /mnt/mynewdrive
sudo chmod +t   /mnt/mynewdrive
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /mnt/mynewdrive
Run Code Online (Sandbox Code Playgroud)

多于...

  • 将所有者更改为root,将组所有者更改为stone
  • 赋予石头组写入能力
  • 导致所有新文件都归 Stone 群组所有
  • 限制删除和重命名除创建该文件的用户之外的所有用户
  • 默认情况下,允许用户和组rwx,其他:rx。


Mar*_*mo- 0

目前,我建议设置一个没有权限的驱动器。使用 FAT32 或其他一些非安全文件系统并通过 samba 共享它。

未来,我认为我们需要认真考虑如何在 Ubuntu 中启用这些功能。