我一直在寻找一种方式来设置的OpenSSH的的umask以0027
在所有连接类型一致的方式。
通过连接类型,我指的是:
- ftp
- scp
- ssh主机名
- ssh主机名程序
3.和4.之间的区别在于,前者启动外壳程序,该外壳程序通常读取/etc/profile
信息,而后者则不读取信息。
另外,通过阅读这篇文章,我了解了OpenSSH较新版本中的-u选项。但是,这不起作用。
我还必须补充一点,/etc/profile
现在包括umask 0027
。
逐点进行:
- SFTP -设置
-u 0027
在sshd_config
提到这里,是远远不够的。
如果我未设置此参数,则sftp默认使用umask 0022
。这意味着如果我有两个文件:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
当我使用sftp将它们放入目标计算机时,我实际上得到了:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
但是,当我在目标计算机-u 0027
上启动时sshd_config
,实际上得到了:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
这是不期望的,因为它实际上应该是:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
有人知道为什么会这样吗?
scp-与sftp的设置无关,权限始终是
umask 0022
。我目前不知道该如何更改。ssh主机名-此处没有问题,因为
/etc/profile
默认情况下shell会读取,这意味着umask 0027
在当前设置中。ssh主机名程序 -与scp相同。
总之,设置的umask上sftp
改变了结果,但并不像它应该ssh hostname
工作正常阅读/etc/profile
和双方scp
并ssh hostname program
似乎已经umask 0022
硬编码的地方。
欢迎您对以上任何观点提出任何见解。
编辑:我想避免需要手动编译openssh的补丁。系统正在运行openssh
来自maverick的软件包的Ubuntu Server 10.04.01(透明)LTS 。
答案:正如poige指出的那样,使用pam_umask可以达到目的。
确切的更改是:
行添加到/etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
另外,为了影响所有登录外壳,无论它们是否来源/etc/profile
,都将相同的行添加到/etc/pam.d/login
。
编辑:经过一些评论后,我重新测试了此问题。
至少在Ubuntu(我测试过)中,如果用户在其外壳的init文件中设置了不同的umask(.bashrc,.zshrc等),似乎会忽略PAM umask,而改用用户定义的umask。/etc/profile
除非用户在初始化文件中显式提供这些更改,否则更改不会影响结果。
目前尚不清楚此行为是否在所有发行版中都发生。
UsePAM yes
您的sshd_config中有吗?
/etc/profile
。像alias umask=/bin/true