Nob*_*ody 2 permissions debian fuse sshfs
所以我的 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
Run Code Online (Sandbox Code Playgroud)
也许问题出在这里:
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)
Run Code Online (Sandbox Code Playgroud)
这里说mount的uid和gid都是0,也就是root。但是在我的 mount 命令上,当以 root 用户使用 ls 时,它告诉我一切都属于 www-data 的 gid/uid 33。
sshfs = FUSE,您以 root 身份挂载,然后尝试使用其他用户访问。
对于笑话/测试,您可以以普通用户身份sshfs,然后切换到root,cd,ohh权限被拒绝,root如何被拒绝,它是root ...
以您要访问的用户身份运行 sshfs。
更新示例:
**test**@mike-laptop4:/mnt$ sshfs mike@192.0.2.0:/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
Run Code Online (Sandbox Code Playgroud)
反之亦然:
**mike**@mike-laptop4:/mnt$ sshfs mike@192.0.2.0:/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
Run Code Online (Sandbox Code Playgroud)
更新,扩展解决方案:
解决方案 1:挂载为访问数据所需的用户(安全首选项)。
$ sshfs mike@192.0.2.0:/home/mike moo
Run Code Online (Sandbox Code Playgroud)
使用此选项将只允许安装用户访问数据。
以下 2x 解决方案需要(除非以 root 身份安装,否则 root 不应用于 sshfs);
/etc/fuse.conf user_allow_other
解决方案 2:允许盒子上的任何用户访问
$ sshfs -o allow_other mike@192.0.2.0:/home/mike moo
Run Code Online (Sandbox Code Playgroud)
从字面上看,源主机上的任何用户都可以创建、编辑、删除文件,这在大多数情况下是一个糟糕的主意,而且我不能在 PCI 环境中进行成像。
您不仅要冒着远程所有数据的风险,还要冒着本地用户操作数据的风险,这些数据以后可以被另一个本地用户使用。
解决方案 3:允许任何用户使用盒子,但尊重本地文件系统权限。
$ sshfs -o allow_other,default_permissions mike@192.0.2.0:/home/mike moo
Run Code Online (Sandbox Code Playgroud)
这个选项比上一个更容易接受,因为只有本地文件系统授权的用户才被允许访问/编辑挂载中的文件。
也可以设置基于组的权限。