/media/user 文件夹上的权限问题阻止我访问外部媒体

Mic*_*sec 15 permissions dvd usb hard-drive media

当我插入外置硬盘、插入 DVD 或尝试查看 USB 驱动器上的内容时,通常会出现异常行为。

文件系统挂载良好。当我以 root 身份通过 登录时sudo su,我可以看到/media/casper/externaldrive完美无缺的内容。但是,我的用户casper不能。Ubuntu 回复每个涉及位置的操作Permission denied

casper@casper-desktop:/media$ ll /media/casper/externaldrive
ls: cannot access '/media/casper/externaldrive': Permission denied
Run Code Online (Sandbox Code Playgroud)

我决定深入研究/media文件夹的权限(问题)。作为casper,我看到以下内容:

casper@casper-desktop:/media$ ls -alF
total 16
drwxr-xr-x  4 root root 4096 apr 21 17:47 ./
drwxr-xr-x 25 root root 4096 jul 29 15:43 ../
drwxr-x---  3 root root 4096 aug  3 21:02 casper/
lrwxrwxrwx  1 root root   45 apr 21 17:47 .directory -> /etc/kubuntu-default-settings/directory-media
lrwxrwxrwx  1 root root   42 apr 21 17:47 .hidden -> /etc/kubuntu-default-settings/hidden-media
drwxr-xr-x  2 root root 4096 feb 29 23:56 home/
Run Code Online (Sandbox Code Playgroud)

让我印象深刻的是它说total 16,而最多只有 6 个列表。所以我再次运行命令,但作为root. 结果是一样的,很奇怪。(有人可以启发我吗?)

无论如何,更让我震惊的是该/media/casper目录不是我的,我也无法访问。我很想chown -R摆脱它,但是在我掌握了自己之后,我在谷歌上搜索了诸如“媒体用户文件夹不是我的帮助我”之类的内容。

花了一段时间,但最后我偶然发现了这个线程,用户在其中解释了750 root:root /media/user文件夹的用途。它确保只有 root 可以在那里挂载、查看和管理文件系统,其中个人权限更改为实际用户。

所以如果我的信息是正确的,/media/casper/externaldrive权限应该对我有利。我检查了,

root@casper-desktop:/media/casper# ll
total 12
drwxr-x--- 3 root   root   4096 aug  3 21:02 ./
drwxr-xr-x 4 root   root   4096 apr 21 17:47 ../
drwxrwxrwx 1 casper casper 4096 aug  3 20:20 externaldrive/
Run Code Online (Sandbox Code Playgroud)

而这似乎就是这种情况。

所以这就是我被困的地方。文件系统在整个目录树中对我都有权限,但我无法访问单个文件。这与 CD 和 USB 驱动器相同。

谁能帮我存取我的宝贝?

哦,顺便说一句。上述线程谈到了这些/media/user文件夹上的 ACL ,+在常规权限后用 a 表示,例如drwxr-x---+ 3 root root. 我的系统没有显示这个。这些文件夹上的 ACL 是 Ubuntu 的标准还是用户有特殊情况,我是否应该担心这是我的问题的来源?

谢谢阅读。

Zan*_*nna 15

由于权限和所有权/media/casper

drwxr-x---  root root 
Run Code Online (Sandbox Code Playgroud)

没有+for ACL(访问控制列表),很明显只有 root 可以打开、输入、读取或写入此目录。像我们这样的谦虚用户获得字符串末尾的权限---:(

我们没有特权的人获得了使用 ACL 访问此位置的权限。我不确定为什么你还没有这些,但你可以设置它们,这可能很简单或需要一点点修补:

  • acl包是必需的(检查apt-cache policy acl
  • 文件系统必须使用acl选项挂载

要检查后者(sdxY为您的根分区适当替换):

sudo tune2fs -l /dev/sdxY | grep "Default mount options:"
Run Code Online (Sandbox Code Playgroud)

应该返回:

Default mount options:    user_xattr acl
Run Code Online (Sandbox Code Playgroud)

默认安装选项设置在 /etc/mke2fs.conf

它们可能会被覆盖,因此请检查:

cat /proc/mounts | grep sdxY
Run Code Online (Sandbox Code Playgroud)

看起来像:

/dev/sdxY / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)

上面的很好,(acl不需要提到)但如果它说noacl你需要改变它。

您可以将选项添加到默认安装选项,如下所示:

sudo tune2fs -o acl /dev/sdxY
Run Code Online (Sandbox Code Playgroud)

或者您可以添加acl到根分区行的选项/etc/fstab,例如:

UUID=whatever /     ext4    errors=remount-ro,acl    0       1
Run Code Online (Sandbox Code Playgroud)

启用 ACL 后,用于setfacl为自己添加权限。要username授予对 /media/casper 的读取和执行权限(您需要执行权限才能进入目录或搜索其内容):

sudo setfacl -m u:username:rx /media/casper
Run Code Online (Sandbox Code Playgroud)

你可以username用 uid替换(可能你是1000- 检查id命令)

sudo setfacl -m u:1000:rx /media/casper
Run Code Online (Sandbox Code Playgroud)

查看您使用的 ACL 权限,getfacl就像 Oli 在他的回答中所做的那样

getfacl /media/casper
Run Code Online (Sandbox Code Playgroud)

删除用户的 ACL 权限

sudo setfacl -x u:username /media/casper
Run Code Online (Sandbox Code Playgroud)

清除所有 ACL 权限

sudo setfacl -b /media/casper
Run Code Online (Sandbox Code Playgroud)

注意:我作弊并自己问了一个问题,为什么/media. 答案在这里