为 sshfs 挂载的文件系统设置 umask

Mar*_*ter 4 filesystems permissions umask mount sshfs

我有一个远程 sshfs 文件系统安装在/mnt/data. 以下是中的相关行/etc/fstab

www-data@192.168.1.10:/var/www/ /mnt/data       fuse.sshfs   rw,noauto,nodev,nosuid,noexec,_netdev,allow_other,default_permissions,uid=martin,gid=martin    0   0
Run Code Online (Sandbox Code Playgroud)

/var/www/远程系统上的文件归 user 所有www-data,但我使用uid=martin,gid=martin将挂载的文件系统上的所有权映射到 uid 1000。

当我 cd/mnt/data/为 martin 时,我拥有正确的文件权限/所有权,但我需要更改 umask。

在远程文件系统上,用户www-data有 umask 0027。在我的本地文件系统上,用户martin有 umask 0077。我想0077在我的本地文件上保留 umask ,但0027在 sshfs 挂载的文件(即 /mnt/data/ 中的所有文件)上使用。

这甚至可能吗?

我尝试在远程文件系统上的整个目录上设置 acl 权限:

setfacl -d -m g::rx  /var/www/
setfacl -d -m o::--- /var/www/
Run Code Online (Sandbox Code Playgroud)

但这对 sshfs 挂载的共享没有影响。

Jak*_*uje 5

sshfs正在sftp幕后使用,umask用于创建新文件的操作由远程sftp-server. 您可以将服务器上的in设置umask为参数,例如sftp-server/etc/ssh/sshd_config

Subsystem sftp /usr/lib/openssh/sftp-server -u 027     # Debian/Ubuntu
Run Code Online (Sandbox Code Playgroud)

或者

Subsystem sftp /usr/libexec/openssh/sftp-server -u 027 # RHEL/Fedora
Run Code Online (Sandbox Code Playgroud)

或者

Subsystem sftp /usr/lib/ssh/sftp-server -u 027         # Arch
Run Code Online (Sandbox Code Playgroud)

umask 设置和扩展 ACL 不通过 openssh 实现的 SFTP 协议传输。另请注意,没有“ umaskon files”,但umask始终与创建文件的运行进程相关联。

  • `-o umask=027` 切换到 sshfs(当在 `/etc/fstab` 中使用时)只影响现有文件在挂载的文件系统上的显示方式。但它并不代表远程服务器上的实际权限,也不影响新创建文件的真实权限(在远程服务器上)。 (2认同)