【问题标题】:Set umask for a sftp account?为 sftp 帐户设置 umask?
【发布时间】:2011-04-22 19:23:51
【问题描述】:

谁能告诉我如何为单个sftp 用户设置umask?值得一提的是IBM AIX...

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

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

谢谢!

f.

【问题讨论】:

    标签: unix ssh sftp


    【解决方案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’
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-14
            • 2010-09-30
            • 1970-01-01
            • 2015-08-25
            • 2015-03-23
            • 1970-01-01
            • 2017-06-17
            • 2021-06-14
            相关资源
            最近更新 更多