【发布时间】:2011-04-22 19:23:51
【问题描述】:
谁能告诉我如何为单个sftp 用户设置umask?值得一提的是IBM AIX...
将umask 002 添加到该用户的.profile 不起作用...(目标是同一组的人可以访问此用户文件)。
我已经看到了一些关于编辑 sftpd 配置的方法,虽然我只想为一个用户设置它,所以我希望找到不需要 root 访问权限的东西。
谢谢!
f.
【问题讨论】:
谁能告诉我如何为单个sftp 用户设置umask?值得一提的是IBM AIX...
将umask 002 添加到该用户的.profile 不起作用...(目标是同一组的人可以访问此用户文件)。
我已经看到了一些关于编辑 sftpd 配置的方法,虽然我只想为一个用户设置它,所以我希望找到不需要 root 访问权限的东西。
谢谢!
f.
【问题讨论】:
我不知道为什么下面的行对我不起作用:
*匹配组
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**
【讨论】:
八进制的 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
【讨论】:
对我来说效果很好。但是,需要进行一些研究,因为您提供的是文档的摘录。在我的例子中,一个具体的例子是在 /etc/ssh/sshd_config 的末尾放置两个连续的行
Match Group www-data
ForceCommand internal-sftp -u 2
在我的情况下,如果“www-data”组中的某个人登录,我想要将 umask 设置为“002”(十进制为 2)。
还有一个使用 env 的选项。变量 SSH_ORIGINAL_COMMAND 而不是 'internal-sftp',但我没有时间去追求。
【讨论】:
internal-sftp -u 002
用户可以自行设置,无需 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 的语法)。
【讨论】:
我不了解 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’
【讨论】: