为 sftp 帐户设置 umask?
Posted
技术标签:
【中文标题】为 sftp 帐户设置 umask?【英文标题】:Set umask for a sftp account? 【发布时间】:2011-04-22 19:23:51 【问题描述】:谁能告诉我如何为单个sftp
用户设置umask
?值得一提的是IBM AIX...
将umask 002
添加到该用户的.profile
不起作用...(目标是同一组的人可以访问此用户文件)。
我已经看到了一些关于编辑 sftpd 配置的方法,虽然我只想为一个用户设置它,所以我希望找到不需要 root 访问权限的东西。
谢谢!
f.
【问题讨论】:
【参考方案1】:我不知道为什么下面的行对我不起作用:
*匹配组
ForceCommand internal-sftp -u 73
最后添加 '-u 0002' for Subsystem 在 SUSE 11.3 上可以正常工作:
*Subsystem sftp /usr/lib64/ssh/sftp-server **-u 0002***
现在指定用户只能使用公钥登录:
Match User nappcpr, Group iwcopy
PasswordAuthentication no
PubkeyAuthentication yes
**KbdInteractiveAuthentication no**
【讨论】:
【参考方案2】:八进制的 111 的 umask 将产生十进制的 73,我们 将在本例中使用。
#vi /etc/ssh/sshd_config
在文件末尾添加以下两行来配置sftp umask 用于一组用户。
Match Group <group name>
ForceCommand internal-sftp -u 73
或者,在文件末尾添加以下两行,为单个用户配置 sftp umask。
Match User <user name>
ForceCommand internal-sftp -u 73
重新启动 sshd 守护进程。
#stopsrc -s sshd
#startsrc -s sshd
这会有所帮助:Aamod chandra
【讨论】:
【参考方案3】:对我来说效果很好。但是,需要进行一些研究,因为您提供的是文档的摘录。在我的例子中,一个具体的例子是在 /etc/ssh/sshd_config 的末尾放置两个连续的行
Match Group www-data
ForceCommand internal-sftp -u 2
在我的情况下,如果“www-data”组中的某个人登录,我想要将 umask 设置为“002”(十进制为 2)。
还有一个使用 env 的选项。变量 SSH_ORIGINAL_COMMAND 而不是 'internal-sftp',但我没有时间去追求。
【讨论】:
这样做时要小心。在上面的示例中,整个组“www-data”将无法通过控制台进行 ssh。我收到错误消息“此服务仅允许 sftp 连接。连接已关闭。”。 这对我也有用(在 Amazon Linux 上)。我以前一直在使用上述的 SSH_ORIGINAL_COMMAND 方法。由于某种原因,当我更改为 sftp-internal 并设置 Chroot 目录时,authorized_keys 中的 umask 停止了任何效果。谢谢! 对于我们大多数关心 sftp 用户安全的人来说,chroot 是解决方案。这个答案帮助我解决了这些没有 shell 访问权限或主目录的用户的 umask 问题。 +1。然而,这并没有在搜索中迅速出现。 我已经这样做了,当我通过命令行 sftp 而不是通过 FileZilla 创建文件时,它可以工作。有什么想法吗? 这对我有用,但必须将其设置为internal-sftp -u 002
【参考方案4】:
用户可以自行设置,无需 root 参与,无论是从客户端(每个连接)还是在服务器上(每个公钥)。
从客户端,我们可以使用-s
选项覆盖用于处理 sftp 交互的远程命令:
sftp -s 'umask 0777; env PATH=$PATH:/usr/libexec/openssh:/usr/lib/ssh:/usr/sbin sftp-server' username@hostname
(如果您的sftp-server
未安装在上述任一位置,请将其也添加到路径中。
只要使用特定的公钥建立连接,我们就可以从服务器强制运行特定的命令。这将为所有连接运行,而不仅仅是 SFTP 连接,但我们可以检查 $SSH_ORIGINAL_COMMAND
环境变量来决定采取什么行动。在authorized_keys
中添加如下内容可能足以满足您的需求:
command="umask 0777; if [[ -n $SSH_ORIGINAL_COMMAND ]]; then eval $SSH_ORIGINAL_COMMAND; else exec bash --login; fi" ssh-rsa AAAAB3NzaC1yc2EA...
(替换您最喜欢的 shell 来处理任何交互式登录,并注意如果您使用 tcsh
,则必须对其进行修改以适应该 shell 的语法)。
【讨论】:
【参考方案5】:我不了解 AIX,但您应该可以使用 OpenSSH 来执行此操作,尽管它需要 root 权限。您需要为 sftp 的服务器组件编写一个包装脚本。包装器需要选择性地更改用户的umask
,然后更改exec
sftp 服务器。对于选择用户,我偏爱:
id --user
如果您要创建像/usr/local/sbin/sftp-wrapper
这样的脚本,那么您将更改/etc/ssh/sshd_config
中sftp 子系统的配置:
Subsystem sftp /usr/libexec/openssh/sftp-server
到:
Subsystem sftp /usr/local/sbin/sftp-wrapper
除了编写包装脚本之外,每一步都需要 root 权限。
评论:我相信当你通过 sftp 连接时,sftp 服务器是由 root 启动的。因此,默认 umask 派生自 root 的 umask。我不相信有一种方法可以从该用户的配置中为特定用户更改此设置。如果要更改所有用户的 sftp umask,可以对 sftp 子系统配置进行更简单的修改:
Subsystem sftp /bin/bash -c ‘umask 002; /usr/libexec/openssh/sftp-server’
【讨论】:
以上是关于为 sftp 帐户设置 umask?的主要内容,如果未能解决你的问题,请参考以下文章