我有多个文件夹需要由多个用户访问。具体来说,Medusa(我用它来跟踪我尚未备份的电视节目的哪些剧集)、Plex(我用它来将我的数字备份流式传输到我家里的各种设备)和 Media(这是我的用户登录名)我遇到的问题是,无论我做什么,我都无法让所有三个用户同时访问该文件夹。
我已将所有用户添加到一个组中,设置文件/文件夹权限以允许用户、组和每个人设置的完全 rwx 权限,但似乎仍然无法让所有三个同时工作。
所有文件/文件夹都位于第二个硬盘驱动器 (sdb1) 上,而不是位于引导驱动器上,以防因某种原因而重要。硬盘驱动器的安装点是 /media/media/storage2 但我运行从 /media/ 开始的所有命令,因为由于某种原因,如果我不这样做,用户最终将无法访问驱动器上的任何内容。
当我想观看某些内容时,我使用该命令sudo chown -R plex:server /media/
将文件的所有者:groupOwner 更改为 plex 。 server 是我创建的包含所有用户的组。
我使用该命令更改所有文件夹和所有文件的sudo find /media/ -type d -exec chmod 777 {} \;
权限。sudo find /media/ -type f -exec chmod 777 {} \;
我确实意识到 777 对安全性不利,我最初打算使用 775,但在我弄清楚这一点之前,我希望 777 能够解决问题,但事实并非如此。
我不确定我还可以尝试什么来实现这一目标。
编辑:
尝试了 JHuffard 的建议,运行了sudo chown -R plex /media/
,尽管显示了所有相关目录和文件的权限,sudo chgrp -R server /media/
但sudo chmod -R 777 /media/
所有内容仍然被锁定。drwxrwxrwx
答案1
这些 ACL 命令仅适用于 Linux。首先,将所有所有权和权限设置为标准。
chown -R root:root /media
find /media -type d -exec chmod 0755 {} +
find /media -type f -exec chmod 0644 {} +
文件
接下来,决定如何正确使用访问控制列表 (ACL)。 (您知道哪些用户和/或组需要对哪些文件或目录进行读或写访问权限的详细信息,但问题中未指定这些。)下面是一些示例。请记住,每个示例都设置显式 ACL,以便正确定义 ACL文件(还不是目录)。后来,ACL和默认 ACL 可以应用于目录。下面-m
是要涂抹的面膜。
# Give medusa user (u) read-write; give group_name (g) read; give others (o) read.
find /media -type f -exec setfacl -m u:medusa:rw-,g:group_name:r--,o:r--
# Give plex user (u) read-write.
find /media -type f -exec setfacl -m u:plex:rw-
# Give server group (g) read-write.
find /media -type f -exec setfacl -m g:server:rw-
# Give media user (u) read-write.
find /media -type f -exec setfacl -m u:media:rw-
# Give media user (u) read-write, server group (g) read-write, others (o) read.
find /media -type f -exec setfacl -m u:media:rw-,g:server:rw-,o:r--
目录
无论应用于文件的 ACL 也可以应用于目录,但略有不同,因为还可以设置默认 ACL ( -d
)。通过使用该-d
开关,目录中的所有新文件系统对象都会自动继承定义的 ACL。重要的是要记住,必须为目录本身设置 ACL和如果自动将 ACL 应用于新文件,则使用默认 ACL。另请注意,下面需要执行 ( x
in ) 来更改目录 ( );但是,这并不意味着执行位适用于文件。相反,执行位仅适用于新目录。rwx
cd
# For each directory itself:
find /media -type d -exec setfacl -m u:media:rwx,g:server:rwx,o:r-x {} +
# To set a default ACL in each directory - the same command as above with the `-d` switch:
find /media -type d -exec setfacl -d -m u:media:rwx,g:server:rwx,o:r-x {} +
对每个 ACL 重复上述两个命令,根据目标更改用户和/或组。此操作堆叠 ACL,以便可以根据需要添加任意数量的 ACL,并为每个新文件系统对象完成 ACL 的自动分配。
可以使用“ugo”方法(例如:rwx)或八进制(例如:7)。
rwx
r--
rw-
r-x
7
4
6
5
换句话说,以下命令是等效的。
setfacl -m u:media:rwx,g:server:rwx,o:r-x {} +
setfacl -m u:media:7,g:server:7,o:5 {} +
该组和其他蒙版的工作方式相同:g:groupname:---
或按如下方式组合。
u:username:---,g:groupname:---,o::---
我注意到单个冒号似乎也适用于“其他”。
u:username:---,g:groupname:---,o:---
不指定用户名或组名会将掩码应用于当前用户/组所有权。
由于不确切知道哪个用户或组需要什么级别的访问权限,因此很难更准确。人们可能需要首先进行分析,可能会在目录树中更深入地启动该过程。第一次使用 ACL 时了解如何将它们全部删除可能会有所帮助:setfacl -Rb /media
。此外,人们还可以使用info
和/或man
阅读有关setfacl
、getfacl
和 的手册acl
。还有很多问题与解答关于 ACL。请务必辨别 ACL Q/A 是否适用于 Linux,因为这是有问题的操作系统。 (根据主要操作系统变体,ACL 的实现方式有所不同。)ACL 将增强在此答案顶部设置的标准所有权和权限。无论 ACL 存在哪里,您都会注意到+
存在一个标志 - 类似于下面的模型。
drwxr-xr-x 2 root root 4096 Jul 8 16:00 dir_without_acl
drwxr-xr-x+ 2 root root 4096 Jul 8 16:00 dir_with_acl
访问这些文件的服务可能需要重新启动。