在运行作为snap软件包安装的应用程序时出现权限被拒绝错误 - Ubuntu 17.04

当我运行一个快照应用程序时,我遇到了“Permission denied”错误。我的主目录挂载在一个不允许root写入的nfs挂载点上。这并不是一个不寻常的配置,所以我认为这是一个bug。
错误信息:
cannot create user data directory: /home/tcumming/snap/vlc/4: Permission denied

我在Ubuntu 16上也遇到了同样的问题。

如您所请求,以下是更多信息:

使用Ubuntu自带的"Ubuntu软件",我安装了一个snap应用程序(例如,vlc)。当我尝试从命令行运行它时,会出现上述"权限被拒绝"的消息。

我刚刚重新安装了Ubuntu系统,所以没有对操作系统进行任何修改。我保留了我的uid:gid,以便能够挂载之前的nfs共享。

这与挂载点或nfs无关。出于安全原因,我们的挂载点不可写入root。

我想知道是否应该提交错误报告?接下来该怎么做?


什么问题?如何提交错误报告? - mikewhatever
我猜如果你提交一个错误报告,它可能会被标记为无效,因为这是一个关于NFS和挂载点的配置问题,而不是一个错误,但你可以尝试一下。 - Panther
请问您能否提供更多细节?您到底做了什么,想要实现什么目标,结果又是怎样的?是否遇到了任何警告或错误信息?请将它们完整地复制粘贴到您的问题中。在Ubuntu中,您可以选择、复制和粘贴终端内容以及大部分对话框消息。(参见如何提出一个好问题? - David Foerster
我修改了我的原始问题以解决上述问题。 - Tom Cumming
11个回答

我遇到了这个问题,因为我的主目录是从/home/$USER符号链接到另一个挂载点。我按照当/home在其他位置时,快照无法工作的建议进行了修复。
简而言之,您需要将非标准主目录添加到apparmor的HOMEDIRS变量中。
$ sudo dpkg-reconfigure apparmor

创建一个文件在/etc/apparmor.d/tunables/home.d/,指向你的家目录的挂载点。
@{HOMEDIRS}+=/mnt/hdd/.home/

然后,为了保险起见,您应该删除apparmor的缓存并重新启动:
$ sudo rm -f /etc/apparmor.d/cache/* /var/cache/apparmor/snap.*
$ sudo reboot

2还适用于非标准的主目录位置(无符号链接),例如 /home/DOMAIN/user - Anton Zaviyalov
4对我来说没用... - polynomial_donut
2只有在重启后才对我起作用。我使用了第一个选项,并将两个目录用空格分隔,例如 /home/carlos /mnt/data - Carlos Pinzón
这个方法对于 Ubuntu 20.04.6 LTS x86_64 也有效,所有的 snap 软件包都无法运行。在此过程中,保存的数据被删除了,我猜是因为我清除了缓存。不过,我会重新配置的,所以非常感谢你,@Jonathan。 - Rakibul Haq

在Ubuntu 18.04中也会发生同样的情况。
如果用户的主目录不在/home(或/)挂载下,就无法使用snap。我的主目录在另一个本地SSD磁盘上,但由于它没有挂载在/home下,每个通过snap安装的软件包都会失败。
由于Canonical正在转向支持snap,您将不得不放弃这种好用的功能,比如将主目录放在其他文件系统上,通过NFS进行挂载等。
也许snap在未来会更加灵活,但这并不是优先考虑的问题: https://forum.snapcraft.io/t/how-can-i-use-snap-when-i-dont-use-home-user/3352/6 目前的解决方法是删除snap,然后从*.tar.gz*.deb软件包中安装所需的内容。

36到目前为止,Snapchat = 最糟糕的想法。太早了 :-p - akahunahi
4这真的很令人难过,几乎可以说是一个停机现象,特别是对于那些在NFS或CIFS共享上挂载了通过autofs-ldap的$HOME的大规模部署来说。 - Sebastian Stark
2由于Canonical正在转向支持snap,您将不得不放弃这些好东西,比如通过NFS挂载的其他文件系统上的HOMEDIR等。我不认为Canonical能够说服在商业环境中运行Ubuntu的人们放弃使用集中式网络挂载的主目录,而选择本地目录,只是为了能够使用“snap软件包”。 - Dean
1SSD/HD电脑现在非常普遍。我的/snap/bin/命令中的许多(但不是全部!)会因为输入文件而失败,错误信息会误导地显示"权限被拒绝",这个问题不能通过调整文件权限来解决,而是需要移除/snap/包并使用apt重新安装它们!(Ubuntu 18.04) - SYK
2这个问题,或者说它的原因,在我看来完全被低估了。对于用户群体的大部分来说,事情不能不顺利而被视为次要。 - SeveQ
我在2020年9月来到这里,在Ubuntu Budgie 20.04上安装了youtube-dl snap。youtube-dl .deb一开始就已经过时了,而snap仍然拒绝在数据目录(不在/home下)写入。我暂时通过一个函数解决了这个问题,但是一旦出现进一步的问题,我将改用virtualenvpip install进行常规更新(或者回到Solus,它有一个最新的youtube-dl软件包)。 - Anthon

你可以从软件商店设置Snap应用的权限。

以下步骤在Ubuntu 20.04 LTS上经过测试:

  • 打开软件
  • 选择“已安装”选项卡。将显示已安装软件的列表。
  • 选择需要提升权限的Snap软件包。
  • 在详细视图中,点击“权限”按钮。
  • 点击“可移动存储设备上的读写文件”旁边的切换按钮。

此方法适用于已挂载的硬盘。

参考资料:


1欢迎来到Ask Ubuntu!虽然这理论上可以回答问题,但最好在这里包含答案的关键部分,并提供链接作为参考。 - Kevin Bowen

Snap应用默认被限制在沙盒中,以确保安全性。如果你希望snap应用能够读写你的个人目录中的数据,你应该以经典模式安装它们。请尝试以下操作:
rclone install --classic vlc

这对你来说应该有效。
如果应用程序沙盒是一个问题,那么你可能想要了解一下firejail

我们使用域名和领域,所以我们的主目录路径不是/home,而是/home/MYDOMAINCOMPANY/。我通过编辑/etc/apparmor.d/tunables/home.d/ubuntu文件来修复这个问题,添加了以下行: @{HOMEDIRS}+=/home/MYDOMAINCOMPANY/
保存后,只需重新启动一些服务: systemctl restart apparmor.service snapd.apparmor.service snapd.service snapd.socket

22.04的工作。 - Jeyan

apparmor的解决方法对我没有起作用。有效的方法是按照下面的步骤修改我的当前主目录"/opt/stack"。
mkdir -p /home/stack
edit /etc/fstab with "/opt/stack /home/stack none defaults,bind 0 0"
mount -a

"mount -a" 告诉我们 fstab 条目是否存在任何问题。在对 fstab 进行更改后,无需重新启动。

所有非特权用户在Ubuntu 20.04上使用所有快照都会遇到这个错误。将用户添加到组“adm”可以解决问题。但这绝对不是一个解决方案。有什么想法为什么快照应用程序需要这样做?
更新:
看起来与我的设置有关。我对/home目录有以下权限:
drwxr-x--x 13 root         adm          4096 Sep  1 14:12 /home

这是示例用户主目录的权限:

drwxr-xr-x  7 kubetraining kubetraining 4096 Sep  1 16:39 /home/kubetraining

显然,snap尝试列出/home目录,但失败并报错。但它实际上不应该尝试列出/home目录的任何内容,所以我认为这是一个错误。

在尝试打开存储在USB闪存驱动器上的电影*.srt文件时,我遇到了"拒绝访问"(访问/media)错误,然后我进入了这个AskUbuntu页面。不同寻常的是,我没有在这里找到一个真正简单的答案,但随后我在Github Subsync页面上找到了this...

sudo snap connect subsync:removable-media

所以,如果我再次遇到同样的基本问题,我将能够自己弄清如何用[其他安装的具有相同问题的快照软件包]替换那里的subsync
我不知道是否有任何可替代removable-media的工具也可能有用。但如果其他人知道,这里就是放置这些信息的好地方-对我和其他人而言。

我在20.04上遇到了同样的问题,试图通过snap安装github cli(gh)来克隆一个ssh仓库。在Ubuntu软件中心的gh条目中,我需要启用“ssh-keys: allows reading ssh user configuration and keys”选项。 还有一个选项是“Access files in your home folder”。

gh snap settings in the Ubuntu Software app

enter image description here


我只是想评论Fabian de Boer的回答,但是我没有足够的声望。
他的解决方案解决了我在OpenSCAD无法打开另一个驱动器上的文件的问题。所以不仅家目录在其他地方可能会出现这个“权限被拒绝”的问题,工作目录也可能在其他地方。
总之,提到的解决方案有效。