为sftp帐户设置umask?

时间:2010-10-08 09:42:29

标签: unix ssh sftp

有人可以告诉我如何为单个umask用户设置sftp吗?值得一提的是 IBM AIX ...

umask 002添加到该用户的.profile不起作用...(目标是此用户文件可供同一组人员访问)。

我已经看到了编辑sftpd配置的方法,虽然我只想为一个用户设置它,所以我希望找到一些不需要root访问权限的东西。

谢谢!

F。

5 个答案:

答案 0 :(得分:22)

对我来说很棒。但是,需要进行一些研究,因为您提供的是文档的摘录。在我的情况下,一个具体的例子是在/ etc / ssh / sshd_config的末尾放两个连续的行

Match Group www-data
ForceCommand internal-sftp -u 2

在我的情况下,我想要做的是如果组'www-data'中有人登录,则将umask设置为'002'(十进制2)。

还有一个使用env的选项。变量SSH_ORIGINAL_COMMAND而不是'internal-sftp',但我没有时间去追求它。

答案 1 :(得分:3)

我不知道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’

答案 2 :(得分:3)

用户可以自己设置,无需客户端(每个连接)或服务器(每个公钥)的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的语法。)

答案 3 :(得分:1)

八进制中的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

答案 4 :(得分:0)

我不知道为什么以下行不适合我:

*匹配组

ForceCommand  internal-sftp  -u 73

最后添加&#39; -u 0002&#39; 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**