sshfs를 사용하여 파일 권한 마운트 및 쓰기

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

내 사용자가 퓨즈 그룹에 속해 있습니다.

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(원격 서버에 있는) 디렉터리/파일에 대한 쓰기 권한이 있어야 합니다 .

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

사용자 3188445의 댓글에 답장하세요.

$ 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

답변1

이 질문에 답변되었습니다리눅스 메일링 리스트;완전함을 위해 여기에 번역된 답변을 게시합니다.

해결책

default_permissions해결책은 설치 시 두 옵션을 모두 사용하지 않는 것입니다 allow_other(초기 실험에서는 이 방법을 시도하지 않았습니다).

설명하다

문제는 간단한 것 같습니다. Fusermount 에서 옵션을 사용하면 default_permissions퓨즈 마운트에 대한 퓨즈의 권한은 다음에 의해 제어됩니다.핵심에 의해서보다는퓨즈.

이는 REMOTE_USER의 uid/gid가 LOCAL_USER(sshfs.c IDMAP_NONE)에 매핑되지 않음을 의미합니다. 매핑 없이 간단한 nfs fs와 동일하게 작동합니다.

따라서 uid/gid 번호가 일치하지 않으면 액세스를 거부하는 것이 합리적입니다.

이 옵션이 있는 경우 allow_other디렉토리는 로컬 사용자 uid 699(존재하는 경우)만 쓸 수 있습니다.

Fuse Guys에서:

'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.

답변2

sshfs를 실행하기 위해 sudo를 사용하지 마십시오. 이렇게 하면 ssh는 파일 시스템이 루트에 속해 있다고 생각할 것입니다. 직접 실행한 다음 파일에 쓸 수 있습니다.

밝히다

sudo 없이 실행하는 경우 /mnt에 쓸 수 없을 수 있으므로 자체 디렉터리에 마운트해야 합니다. 다음은 /etc/fuse.conf에 user_allow_other를 추가한 후 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

답변3

이에 대한 한 가지 가능한 이유(내가 경험한 이유)는 내가 설치한 디스크에 더 이상 여유 공간이 없다는 것입니다.

답변4

홈 디렉토리에 마운트 디렉토리를 생성하는 경우, 이를 사용할 유일한 사람이라고 가정하고 sudo 없이 sshfs 명령을 실행할 수 있습니다. 이렇게 하면 디렉터리를 마운트하는 데 필요한 권한을 갖게 됩니다. 도움이 될 것입니다. 명령 예 예 "sshfs -o reconnect, follow_synlinks <user@sshIp:<remote_dir>> <mount_dir>"

관련 정보