如果我进入 evince 的保存对话框,转到/home/username/Documents
我的主目录中的,并尝试创建一个新目录(例如foo
),则操作会失败。Evince 说:
Could not create directory /home/[username]/Documents/foo: Permission denied
Evince 也拒绝保存文件,并显示同样的消息。
我正在运行 Ubuntu 12.04 和 evince 3.4.0。我还应该提到,这/home
是一个符号链接(文件系统分布在固态驱动器和 HDD 上;有点像实验)。这不会影响任何其他应用程序。根据,/media/hdd/home
Evince 以我的身份运行,并且应该对 具有写入权限。/media/hdd/home/username/Documents
ls -l
dmesg
显示 evince 尝试创建目录,但被拒绝:
[10991.212472] type=1400 audit(1355983426.653:614): apparmor="DENIED"
operation="mkdir" parent=1 profile="/usr/bin/evince" name="/media/hdd/home
/username/Documents/foo/" pid=2940 comm="evince" requested_mask="c" denied_mask="c"
fsuid=1001 ouid=1001
答案1
我遇到了同样的问题并解决了:
$ sudo apt-get install apparmor-utils
$ sudo aa-complain /usr/bin/evince
这将 evince 的 apparmor 配置文件更改为投诉模式。这意味着 apparmor 将在系统日志中抱怨 evince 的每个应该被拒绝的操作(根据配置文件)......但它仍然允许它。
当然,这不是最好的解决方案,因为这样整个配置文件就“关闭”了。但由于我不知道如何说服 apparmor 允许 evince 在 ~ 之外的符号链接目标上执行 mkdir(这是拒绝的原因),所以这对我来说很有效。
答案2
在我的情况下,我的主目录是指向网络共享的符号链接,但该共享未安装在 中/home
。这导致 Apparmor 拒绝创建目录。我通过将我的真实主目录路径添加到 Apparmor 配置中的主目录路径集来解决这个问题:
echo '@{HOMEDIRS}+=/myrealhomedir/' > /etc/apparmor.d/tunables/home.d/somename
sudo dpkg-reconfigure apparmor
答案3
当我改变挂载 Samba 共享的方式时,我遇到了同样的问题。如果你使用“标准” Nautilus 方式访问网络共享上的文件,Nautilus 会将共享挂载在
/run/user/
或者
~/.local/share/gvfs-metadata/
Apparmor 设置为接受这些目录。但是如果您自己在另一个目录中安装共享,它将不起作用。因此我们必须将整个网络共享添加到授权目录列表中。
这很好解释在 Ubuntu 帮助页面。 虽然user1225999 的回答作品,第一行是不需要的,因为目的
sudo dpkg-reconfigure apparmor
允许您键入共享路径以将其添加到主目录路径。该命令将添加路径到
/etc/apparmor.d/tunables/home.d/ubuntu
文件(该文件已经存在)。