当我插入外部硬盘、插入 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
我决定深入研究一下该/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/
让我吃惊的是,它说total 16
,而最多只有 6 个列表。所以我再次运行命令,但root
结果还是一样,很奇怪。(有人能告诉我吗?)
无论如何,让我更震惊的是,这个/media/casper
目录不属于我,我也无法访问。我很想直接chown -R
说出来,但控制住自己后,我在 Google 上搜索了“媒体用户文件夹不是我的,帮帮我”之类的内容。
花了一段时间,但最终我偶然发现了这线程,用户在其中解释文件夹的用途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/
事实似乎也如此。
这就是我被困住的地方。文件系统对我拥有整个目录树的权限,但我却无法访问任何文件。CD 和 USB 驱动器也存在同样的问题。
谁能帮助我获得我的珍贵资源?
哦,顺便说一句。上述线程提到了这些文件夹的 ACL ,在常规权限后/media/user
用 表示,例如。我的系统没有显示这一点。这些文件夹的 ACL 是 Ubuntu 的标准吗,还是用户有特殊情况,我是否应该担心这就是我的问题所在?+
drwxr-x---+ 3 root root
谢谢阅读。
答案1
由于权限和所有权/media/casper
是
drwxr-x--- root root
没有+
ACL(访问控制列表)很明显,只有 root 可以打开、进入、读取或写入此目录。像我们这样的普通用户在字符串末尾获得了权限---
:(
我们这些没有特权的人可以通过 ACL 访问此位置。我不确定为什么您还没有这些,但您可以设置它们,这可能很简单,也可能需要一点调整:
- 该
acl
包是必需的(检查apt-cache policy acl
) - 文件系统必须使用选项
acl
挂载
要检查后者(sdxY
根据您的根分区进行适当替换):
sudo tune2fs -l /dev/sdxY | grep "Default mount options:"
应该返回:
Default mount options: user_xattr acl
默认安装选项设置在/etc/mke2fs.conf
它们可能会被覆盖,因此请检查:
cat /proc/mounts | grep sdxY
看起来像:
/dev/sdxY / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
以上内容很好,(acl
不需要提及)但如果它说noacl
你需要更改它。
您可以将该选项添加到默认挂载选项中,如下所示:
sudo tune2fs -o acl /dev/sdxY
或者您可以添加acl
到根分区行的选项中,/etc/fstab
例如:
UUID=whatever / ext4 errors=remount-ro,acl 0 1
启用 ACL 后,使用setfacl
来为自己添加权限。要授予username
对 /media/casper 的读取和执行权限(您需要执行权限才能进入目录或搜索其内容):
sudo setfacl -m u:username:rx /media/casper
您可以username
用 uid 替换(可能您可以1000
用命令检查id
)
sudo setfacl -m u:1000:rx /media/casper
查看你使用的 ACL 权限,getfacl
就像 Oli 在他的回答中所做的那样
getfacl /media/casper
删除用户的 ACL 权限
sudo setfacl -x u:username /media/casper
清除所有 ACL 权限
sudo setfacl -b /media/casper
注:我作弊了,自己问了一个问题,为什么 中有这么多条目/media
。答案是这里
答案2
Zanna 给出了非常有用的答案,解释了背景。
但有一个更简单的方法可以解决这个问题:
- 卸载并拔出/弹出当前在 /media/casper 中安装(无法访问)的所有磁盘。
- 删除目录:
sudo rmdir /media/casper
下次您连接 USB 驱动器或插入 CD/DVD 时,Ubuntu 将使用正确的权限重新创建 /media/casper。
(例如,如果您使用不带 --acls 参数的 tar 备份 rootfs,然后从备份中恢复它,则 ACL 可能会丢失。)
答案3
当你想从 Ubuntu 授予 Windows 驱动器访问权限时
如果它是 Windows NTFS 驱动器,则正常chmod
命令将不起作用。
以下对我有用。
打开文件/etc/mtab
:
gedit /etc/mtab
在此文件中查找驱动器名称(只需将鼠标悬停在您要查找解决方案的驱动器上,在我的情况下,GUI 显示不同的名称,鼠标悬停在它上面时显示/media/user-name/drive-name
)
现在位于/etc/mtab
:
在文件中搜索驱动器名称,并检查您安装的驱动器被分配到哪个驱动器(在我的情况下 - /dev/sda4
)
现在使用以下命令安装该驱动器:
sudo ntfs-3g /dev/sda4 /media/"$USER"
现在我可以执行我的可执行文件了,但我无法看到驱动器名称的内容,所以我卸载了该驱动器并再次安装它。