背景

背景

我正在设置一个文件服务器,用户可以通过 SFTP 登录。我希望所有用户都具有相同的权限来读取和写入任何文件。由于他们都有不同的帐户和不同的密码,我最终得到如下结果:

-rw-r-----   1 user1   sharing  308 Jul  6 12:03 test2.rtf
-rw-r-----   1 user2   sharing  308 Jul  6 12:16 test3.rtf

该组sharing包含所有用户。问题是,在写入文件时,组的默认权限是只读的。

我曾尝试在以下位置设置 umask sshd_config

Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Match Group sharing
    ChrootDirectory /files/
    ForceCommand internal-sftp -u 002
    AllowTCPForwarding no
    X11Forwarding no

该目录的 facl 如下:

# file: .
# owner: root
# group: sharing
# flags: -s-
user::rwx
group::rwx
group:sharing:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

也在这些地方:

init.d/rc:umask 002
init.d/ssh:umask 002
bash.bashrc:umask 002

如果我通过 SFTP 登录,我将获得 640 的权限。如果我禁用 sftp 并通过 ssh 以用户 1 身份登录,并触摸新文件,我将获得 660 的权限 - 这就是我想要的。

那么我怎样才能让它通过 SFTP 工作呢?

顺便说一下,这是 debian 7。

答案1

背景

这是文件共享中一个永恒的问题sftp。这是因为最终的权限是基于用户端文件的原始权限,而 umask( -u) 参数不会强制授予此类权限,而只会剥离不需要的权限。这意味着,只有当用户尝试上传具有权限的文件时0777,才会应用权限并将其剥离为0775。否则,它就保持原样。例如,如果用户在其文件系统上存储了具有权限的文件0700,则在上传后也会显示为0700

解决方案

最近,我们通过应用补丁解决了 Fedora 中的这个问题,该补丁强制新上传文件的精确权限,基于以下内容:

https://bugzilla.mindrot.org/show_bug.cgi?id=1844

这将在几个月后在 CentOS 中推出,但不确定是否在 Debian 中推出。

解决方法

除了定期运行一些脚本(来自),没有其他优雅的解决方案cron,这些脚本正在修复错误的权限。这将是 bash 中的一些单行代码,但我想你可以想到一些。如果你有兴趣,我可以更详细地说明这一点。

答案2

我能够使用 bindfs 在 debian 上实现这一点 - 虽然这仍然有点不靠谱,但确实有效。基本上,它将一个目录挂载到另一个目录中,您可以强制所有权限按照您喜欢的方式运行。因此,无论文件在实际目录中的写入方式如何,sftp 提供的目录始终是可写的。现在,我的所有客户端都可以写入其他用户创建的文件 :D

相关内容