如何允许快照应用程序访问 /tmp 文件夹?

N0r*_*ert 7 permissions tmp tmpfs snap

通常我会避免使用基于快照的应用程序,但有时我需要它们。

例如 - Markdown Lint Tool 仅以 Snap 命名 mdl

当文件在主文件夹中时效果很好 -

$ echo "# header" > ~/test.md
$ /snap/bin/mdl ~/test.md ; echo $?
0
Run Code Online (Sandbox Code Playgroud)

但是当文件位于/tmp目录中时它会失败:

$ echo "# header" > /tmp/test.md
$ cat /tmp/test.md
# header
$ /snap/bin/mdl /tmp/test.md
/snap/mdl/140/lib/ruby/gems/2.4.0/gems/mdl-0.9.0/lib/mdl/doc.rb:57:in `read': No such file or directory @ rb_sysopen - /tmp/test.md (Errno::ENOENT)
    from /snap/mdl/140/lib/ruby/gems/2.4.0/gems/mdl-0.9.0/lib/mdl/doc.rb:57:in `new_from_file'
    from /snap/mdl/140/lib/ruby/gems/2.4.0/gems/mdl-0.9.0/lib/mdl.rb:75:in `block in run'
    from /snap/mdl/140/lib/ruby/gems/2.4.0/gems/mdl-0.9.0/lib/mdl.rb:73:in `each'
    from /snap/mdl/140/lib/ruby/gems/2.4.0/gems/mdl-0.9.0/lib/mdl.rb:73:in `run'
    from /snap/mdl/140/lib/ruby/gems/2.4.0/gems/mdl-0.9.0/bin/mdl:10:in `<top (required)>'
    from /snap/mdl/140/bin/mdl:23:in `load'
    from /snap/mdl/140/bin/mdl:23:in `<main>'
Run Code Online (Sandbox Code Playgroud)

对于此特定应用程序,没有以下选项snap connect

$ snap connections | grep mdl
home                      mdl:home                             :home                                 -
Run Code Online (Sandbox Code Playgroud)

我也不能将它安装为经典

$ snap install mdl --classic 
Warning: flag --classic ignored for strictly confined snap mdl

mdl 0.9.0 from Snapcrafters installed
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能让 Snap 应用程序完全访问该/tmp文件夹?
它是否由 Snap 设计发生?

WU-*_*ANG 6

看来您可能正在寻找“正确”的方法来解决由快照引起的问题......

但是如果您正在寻找一种解决方法以便您可以使用您的 tmp 目录,您可以:

mkdir /home/you/tmp
sudo mount --bind /tmp /home/you/tmp/
Run Code Online (Sandbox Code Playgroud)

mdl 将可以通过 /home/you/tmp 挂载点完全访问 /tmp 目录:

echo "# header" > /home/you/tmp/test.md
mdl /home/you/tmp/test.md
Run Code Online (Sandbox Code Playgroud)

要使其永久化,您可以将此行添加到/etc/fstab

 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
/tmp        /home/you/tmp   auto    bind    0   3
Run Code Online (Sandbox Code Playgroud)

并使用sudo update-initramfs -u -k all.

  • 你显然没有阅读这个问题。你甚至没有阅读答案。天啊,你根本没读我的评论。其他人可以花时间重申,在此之后...它与 /tmp 无关...它是 SNAPS + 用户主目录之外的任何其他目录...所以不,/tmp 没有“损坏” ,这是一件可笑的事情。如果是这样的话,那么用户拥有读写权限的所有其他(非主)目录也会被破坏......我想大多数人都明白 /tmp 不是问题,也许这就是为什么“没有人似乎去关心” (3认同)
  • @mlissner...这不是关于 /tmp...它是关于 /home/username 和 snaps 之外的任何目录...这也不是一个修复,它是一种在 OP 的方法中使用 snap 的解决方法想要的...您没有阅读问题 (2认同)

mli*_*ner 6

我通常非常支持改变和 Ubuntu,但是如果像我一样,你觉得这真的很烦人,我想出的修复方法是在我的 home 中添加一个目录:

mkdir /home/mlissner/tmp
Run Code Online (Sandbox Code Playgroud)

并添加一个 crontab 以在重新启动时对其进行核攻击:

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

然后加:

@reboot rm -rf /home/mlissner/tmp/*
Run Code Online (Sandbox Code Playgroud)

不得不这样做实在是太愚蠢了。

我完全支持沙箱和安全。我完全支持改变,但这消除了“在此处保存此文件,然后在我不考虑的情况下删除它”的重要用例。

从用户的角度来看,它也确实存在缺陷。您可以将 Firefox 中的内容保存到 /tmp 中,不会出现错误。但是当你尝试在文件浏览器中找到那个东西时,它不存在。WTF。

算我很恼火。

  • 在最新的 ubuntu 版本(至少 22.04)中,`apt` 软件包安装 `snap` 版本 (3认同)