はじめに
-
snap版のアプリ(例えば VS Code)をNFS環境で使うときに,↓のようなエラーでハマってしまった.
$ code cannot create user data directory: /home/file-server/user1/snap/code/194: Permission denied
-
下書きのような雑文ですが,現状日本語だと情報が見つからないので,誰かの役に立つと信じて残しておきます.
-
以下,Ubuntu 24.04 で動作確認をしています.
何が起こっているのか
NFS でホームディレクトリを共有する設定だと,たいていユーザのホームディレクトリは:
/srv/nfs/user1
/home/fs1/user1 # /home/fs1 = mount point, user1 = username
みたいにしているかと思います.
しかし,Apparmor の初期設定ではデフォルトのユーザディレクトリ /home/*
と /root
しか,ホームディレクトリの対象として登録されていません.(そしてこの設定はrecursiveではない様子)
そのため,ユーザのホームディレクトリの場所を明示しておかないと,不要なパーミッションエラーに悩まされることになります.
参考:
設定方法
設定方法を2通り紹介します.
設定方法1
コマンドを使って設定したいなら:
$ sudo dpkg-reconfigure apparmor
で,「追加のホームディレクトリの場所 (Additional home directory locations)」 に,該当のディレクトリを追加する.
例えば,fstab や autofs で /home/file-server
をマウントしていて,tako
ユーザのディレクトリが /home/file-server/tako
のような場所にあるとしたら:
/home/file-server/
を入力する.
なお,この手順により /etc/apparmor.d/tunables/home.d/ubuntu
に設定項目が追加される.
設定方法2
を参考にして,/etc/apparmor.d/tunables/home.d/site.local
を書き換える.例えば:
@{HOMEDIRS}+=/home/file-server/
デフォルトではコメントアウトされていることに注意.
このhome.d
にあるファイルは,/etc/apparmor.d/tunables/home
で include されている.
最後に
$ sudo systemctl reload apparmor.service
あるいは:
$ sudo systemctl restart apparmor.service snapd.apparmor.service snapd.service snapd.socket
を忘れずに.
参考