777 권한이 있는 sshfs 마운트 디렉터리의 소유자는 해당 디렉터리를 열 수 없습니다(ACL 없음, SELinux 없음).

777 권한이 있는 sshfs 마운트 디렉터리의 소유자는 해당 디렉터리를 열 수 없습니다(ACL 없음, SELinux 없음).

따라서 sshfs 설치에 권한 문제가 있습니다.

root@server01:/mnt# sshfs -o uid=$(id -u www-data) -o gid=$(id -g www-data) user@host:/path mountpoint
root@server01:/mnt# ls -Zlah
total 12K
drwxr-xr-x  3 root     root     ? 4.0K Nov 29 20:00 .
drwxr-xr-x 23 root         1001 ? 4.0K Nov 29 13:03 ..
drwxrwxrwx  1 www-data www-data ? 4.0K Nov 29 18:53 mountpoint
root@server01:/mnt# getfacl mountpoint/
# file: mountpoint/
# owner: www-data
# group: www-data
user::rwx
group::rwx
other::rwx
root@server01:/mnt# sudo -u www-data ls -lah
ls: cannot access mountpoint: Permission denied
total 8.0K
drwxr-xr-x  3 root root 4.0K Nov 29 20:00 .
drwxr-xr-x 23 root 1001 4.0K Nov 29 13:03 ..
d?????????  ? ?    ?       ?            ? mountpoint

아마도 문제는 여기에 있을 것입니다.

root@server01:/mnt# mount
# unrelated stuff skipped
user@host:/path/ on /mnt/mountpoint type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)

여기서는 마운트된 uid와 gid가 모두 0, 즉 루트라고 합니다. 하지만 내 mount 명령에서 ls를 루트로 사용하면 모든 것이 www-data인 gid/uid 33에 속한다는 것을 알려줍니다.

답변1

sshfs=FUSE, 루트로 설치한 다음 다른 사용자를 사용하여 액세스를 시도하고 있습니다.

농담/테스트입니다. 일반 사용자로 sshfs를 수행한 다음 루트, CD로 전환할 수 있습니다. 아, 권한이 거부되었습니다. 어떻게 루트가 거부될 수 있습니까? 루트입니다...

액세스하려는 사용자로 sshfs를 실행하십시오.

업데이트된 예:

**test**@mike-laptop4:/mnt$ sshfs [email protected]:/home/mike moo
test@mike-laptop4:/mnt$ ls moo/
src
mike@mike-laptop4:/mnt$ ls moo 
ls: cannot access 'moo': Permission denied
mike@mike-laptop4:/mnt$ sudo su
root@mike-laptop4:/mnt# ls moo 
ls: cannot access 'moo': Permission denied

그 반대:

**mike**@mike-laptop4:/mnt$ sshfs [email protected]:/home/mike moo
mike@mike-laptop4:/mnt$ ls moo
src
test@mike-laptop4:/mnt$ ls moo
ls: cannot access 'moo': Permission denied
mike@mike-laptop4:/mnt$ sudo su
root@mike-laptop4:/mnt# ls moo
ls: cannot access 'moo': Permission denied

업데이트되고 확장된 솔루션:

솔루션 1: 데이터 접근에 필요한 사용자로 설치됩니다(보안 기본 설정).

$ sshfs [email protected]:/home/mike moo

이 옵션을 사용하면 설치하는 사용자만 데이터에 액세스할 수 있습니다.


다음 2x 솔루션에 필요합니다(루트로 설치하지 않는 한 sshfs에 루트를 사용하면 안 됨).

/etc/fuse.conf user_allow_other

솔루션 2: 상자에 있는 모든 사용자에게 액세스를 허용합니다.

$ sshfs -o allow_other [email protected]:/home/mike moo

말 그대로 원본 호스트의 모든 사용자가 파일을 생성, 편집, 삭제할 수 있습니다. 이는 대부분의 경우 좋지 않은 생각이며 PCI 환경에서는 이미징을 허용할 수 없습니다.

원격지에 있는 모든 데이터가 위험에 처할 뿐만 아니라 로컬 사용자가 나중에 다른 로컬 사용자가 사용할 수 있는 데이터를 조작할 위험도 있습니다.

해결 방법 3: 머신의 모든 사용자를 허용하지만 로컬 파일 시스템 권한을 존중합니다.

$ sshfs -o allow_other,default_permissions [email protected]:/home/mike moo

로컬 파일 시스템에서 승인된 사용자만 마운트에 있는 파일에 액세스/편집할 수 있으므로 이 옵션이 이전 옵션보다 더 적합합니다.

그룹 기반 권한도 설정할 수 있습니다.

관련 정보