web-dev-qa-db-ja.com

sshfsでマウントし、ファイル権限を書き込む

リモートディレクトリをsshfsマウントしようとしましたが、マウントされたファイルに書き込みできません。これをデバッグするためのアイデアや方法が不足しています。リモートサーバーで確認すべきことはありますか?

Xubuntu 14.04を使用しています。 14.04 Ubuntuのリモートディレクトリをマウントします。

local $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

/etc/Fuse.confを変更しました

local $ Sudo cat /etc/Fuse.conf
# /etc/Fuse.conf - Configuration file for Filesystem in Userspace (Fuse)

# Set the maximum number of Fuse mounts allowed to non-root users.
# The default is 1000.
#mount_max = 1000

# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other

私のユーザーはFuseグループに属しています

local $ Sudo grep Fuse /etc/group
Fuse:x:105:MY_LOACL_USERNAME

そして、私はリモートディレクトリをマウントします(Sudo、default_permissions、allow_otherの組み合わせで/なしで試しました):

local $Sudo sshfs -o allow_other,default_permissions -o IdentityFile=/path/to/ssh_key  REMOTE_USERNAME@REMOTE_Host:/remote/dir/path/  /mnt/LOCAL_DIR_NAME/

REMOTE_USERNAMEには、(リモートサーバー上の)dir/filesへの書き込み権限があります。

私は上記のコマンドをSudo、default_permissionsなしで試しましたが、すべての場合で次のようになります。

local $ ls -al /mnt/LOCAL_DIR_NAME/a_file
-rw-rw-r-- 1 699 699 1513 Aug 12 16:08 /mnt/LOCAL_DIR_NAME/a_file
local $ test -w /mnt/LOCAL_DIR_NAME/a_file && echo "Writable" || echo "Not Writable"
Not Writable

明確化0

User3188445のコメントへの応答:

$ whoami
LOCAL_USER
$ cd
$ mkdir test_mnt
$ sshfs -o allow_other,default_permissions -o IdentityFile=/path/to/ssh_key  REMOTE_USERNAME@REMOTE_Host:/remote/dir/path/ test_mnt/

$ ls test_mnt/
I see the contents of the dir correctly

$ ls -al test_mnt/
total 216
drwxr-xr-x  1 699 699  4096 Aug 12 16:42 .
drwxr----- 58 LOCAL_USER LOCAL_USER  4096 Aug 17 15:46 ..
-rw-r--r--  1 699 699  2557 Jul 30 16:48 sample_file
drwxr-xr-x  1 699 699  4096 Aug 11 17:25 sample_dir


$ touch test_mnt/new_file 
touch: cannot touch ‘test_mnt/new_file’: Permission denied

# extra info: SSH to the remote Host and check file permissions
$ ssh REMOTE_USERNAME@REMOTE_Host
# on remote Host
$ ls -al /remote/dir/path/
lrwxrwxrwx 1 root root 18 Jul 30 13:48 /remote/dir/path/ -> /srv/path/path/path/
$ cd /remote/dir/path/
$ ls -al
total 216
drwxr-xr-x 26 REMOTE_USERNAME  REMOTE_USERNAME   4096 Aug 12 13:42 .
drwxr-xr-x  4 root root  4096 Jul 30 14:37 ..
-rw-r--r--  1 REMOTE_USERNAME  REMOTE_USERNAME   2557 Jul 30 13:48 sample_file
drwxr-xr-x  2 REMOTE_USERNAME  REMOTE_USERNAME   4096 Aug 11 14:25 sample_dir
8
vkats

質問は linuxメーリングリスト ;で回答されました。完全を期すために、翻訳された回答をここに投稿します。

解決

解決策は、両方のオプションを使用しないことですdefault_permissionsおよびallow_other(元の実験では試していません)。

説明

問題は非常に単純なようです。オプションdefault_permissions fusermountの場合、FuseのFuseマウントの許可制御はkernelによって処理され、Fuse。これは、REMOTE_USERのuid/gidがLOCAL_USER(sshfs.c IDMAP_NONE)にマッピングされていないことを意味します。マッピングなしの単純なnfs fsと同じように機能します。

したがって、uid/gid番号が一致しない場合、アクセスを禁止することは理にかなっています。

オプションがある場合allow_otherこのディレクトリは、存在する場合、uid 699のローカルユーザーのみが書き込み可能です。

ヒューズの男から:

'default_permissions'

   By default Fuse doesn't check file access permissions, the
   filesystem is free to implement its access policy or leave it to
   the underlying file access mechanism (e.g. in case of network
   filesystems).  This option enables permission checking, restricting
   access based on file mode.  It is usually useful together with the
   'allow_other' mount option.

'allow_other'

   This option overrides the security measure restricting file access
   to the user mounting the filesystem.  This option is by default only
   allowed to root, but this restriction can be removed with a
   (userspace) configuration option.
11
vkats

Sudoでsshfsを実行しないでください。これを行うと、sshはファイルシステムがルートに属していると見なします。自分で実行すると、ファイルに書き込むことができます。

明確化

Sudoなしで実行するときは、おそらく/ mntに書き込むことができないため、自分のディレクトリにマウントする必要があります。したがって、user_allow_otherを/etc/Fuse.confに追加した後のsshfsの使用例を次に示します。

$ cd                      # make sure you are in home directory
$ mkdir mnt               # create empty directory
$ sshfs server.com: mnt   # mount my home directory on server.com on ./mnt
$ ls mnt
[contents of home directory on server]
$ touch mnt/new_file      # no problem creating a new file
$ fusermount -u mnt       # unmount file system
$ rmdir mnt
6
user3188445

考えられる理由の1つ-私がヒットしたもの-は、マウントしたディスクに空き領域がなくなったためです。

2
Lumy