を使用してテスト環境を作成しようとすると、ソースディレクトリにアクセスできず、mount --bind
権限エラーで失敗することが時々あることに驚きました。root
これは NFS ファイルシステムにのみ影響を与えるようです。
mount --bind
アクセスできないディレクトリにアクセスする方法はありますかroot
?たぶんinode番号を介して直接可能ですか?
はい
vagrant:vagrant
一般ユーザーが完全にアクセスできるNFSマウントがあります。
vagrant@ubuntu-xenial:/tmp$ find nfs_mount/ -ls
4375 4 drwxr-xr-x 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/
257090 4 drwxr-xr-x 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/source
257091 4 drwx------ 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/source/path
257092 4 drwx------ 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/source/path/is
257093 4 drwx------ 2 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/source/path/is/here
...しかし、root:root
次はできません。
vagrant@ubuntu-xenial:/tmp$ sudo find nfs_mount/ -ls
4375 4 drwxr-xr-x 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/
257090 4 drwxr-xr-x 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/source
257091 4 drwx------ 3 vagrant vagrant 4096 Mar 20 21:28 nfs_mount/source/path
find: ‘nfs_mount/source/path’: Permission denied
試してもmount --bind
失敗した場合:
vagrant@ubuntu-xenial:/tmp$ mkdir /tmp/bindtarget
vagrant@ubuntu-xenial:/tmp$ sudo mount --bind /tmp/nfs_mount/source/path/is/here/ /tmp/bindtarget/
mount: mount /tmp/nfs_mount/source/path/is/here/ on /tmp/bindtarget failed: Permission denied
NFSマウント/tmp/nfs_mount
はで提供されており、localhost:/srv
ソースファイルシステムに直接移動してもディレクトリ権限によって問題は発生しません。
vagrant@ubuntu-xenial:/tmp$ sudo mount --bind /srv/source/path/is/here/ /tmp/bindtarget/
vagrant@ubuntu-xenial:/tmp$ findmnt /tmp/bindtarget
TARGET SOURCE FSTYPE OPTIONS
/tmp/bindtarget /dev/sda1[/srv/source/path/is/here] ext4 rw,relatime,data=ordered
NFS設定(もしあれば):
vagrant@ubuntu-xenial:/tmp$ showmount -e localhost
Export list for localhost:
/srv *
vagrant@ubuntu-xenial:/tmp$ cat /etc/exports
/srv/ *(rw,sync,no_subtree_check)
環境
- Ubuntu 16.04 (Xenial64)
- Linux ubuntu-xenial 4.4.0-116-generic #140-Ubuntu SMP 月 2月 12日 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
答え1
マウントするのは危険です。いくつかのクリーンアップ操作は、マウントポイントを考慮せず/tmp
に突然作業することを決定し、実際に属していない古いファイルを削除する可能性があるためです。つまり、OPの例を使います。/tmp
/tmp
/tmp
方法1:
NFS環境に対する完全な制御権限がある場合は、no_root_squash
エクスポートオプションにこのオプションを追加するだけです。これにより、ルートクライアントがサーバー上の誰にでもマッピングされ、権限を失うことを防ぐことができます。
方法2:
それ以外の場合は、まだ使用されている削除されたファイルにアクセスするのと同じように、探している比較的簡単なソリューションがあります。 / procを使用してください。
簡単にするために、2つの端末が必要です。
ユーザー端末:
vagrant@ubuntu-xenial:/tmp$ cd /tmp/nfs_mount/source/path/is/here/
vagrant@ubuntu-xenial:/tmp/nfs_mount/source/path/is/here$ echo $$
12345
ルートターミナル:ルートは必要なディレクトリへの参照を取得できますが、まだ読み取ることはできませんが、インストールは可能です。
# ls -l /proc/12345/cwd
lrwxrwxrwx. 1 vagrant vagrant 0 Mar 21 01:18 /proc/12345/cwd -> /tmp/nfs_mount/source/path/is/here
# ls -l /proc/12345/cwd/
ls: cannot open directory '/proc/12345/cwd/': Permission denied
# mount --bind /proc/12345/cwd /tmp/bindtarget
# ls /tmp/bindtarget
ls: cannot open directory '/tmp/bindtarget': Permission denied
それはすべてです。