我有一群用户只需要将文件上传到他们设置的 homedirs。我认为 sftp 就足够了,但我不希望他们通过 shell 登录。那么有可能吗?我的平台是centos 7,用户的homedirs被存储可以说/personal/$user
我使用这些设置创建了用户
useradd -m -d /personal/user1 -s /sbin/nologin
Run Code Online (Sandbox Code Playgroud)
为用户分配了密码,然后当我使用 sftp 登录机器时,它说无法连接。
mar*_*elm 44
我喜欢以下用于管理 SSH 访问的设置,我在工作中使用它来管理小型服务器上的一组用户。安全性和易于管理在我的优先事项列表中占据重要位置。
它的主要特点是通过 Unix 组成员身份轻松管理 SSH 权限,具有严格定义的权限,并且默认情况下是安全的。
安装软件(可选但有用):
yum install members # or apt install members
Run Code Online (Sandbox Code Playgroud)
添加组:
addgroup --system allowssh
addgroup --system sftponly
Run Code Online (Sandbox Code Playgroud)
在 中/etc/ssh/sshd_config
,确保以下设置为No
:
PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)
在 末尾/etc/ssh/sshd_config
,添加以下两节:
Match Group allowssh
PubkeyAuthentication yes
Match Group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
(编辑完文件后不要忘记重启SSH)
那么,这一切有什么作用呢?
allowssh
组中的用户登录。sftponly
组无法得到通过SSH外壳,仅SFTP。然后只需通过管理组成员身份来管理谁具有访问权限(这些更改会立即生效,无需重新启动 SSH)。members allowssh
将显示允许通过 SSH 登录的members sftponly
所有用户,并将显示所有仅限于 SFTP 的用户。
# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#
Run Code Online (Sandbox Code Playgroud)
请注意,您的 sftp 用户需要同时是sftponly
(以确保他们不会获得 shell)和allowssh
(以首先允许登录)的成员。
请注意,此配置不允许密码登录;所有账户都需要使用公钥认证。这可能是您使用 SSH 获得的最大的安全优势,因此我认为即使您必须现在开始,也值得付出努力。
如果你真的不想要这个,那么也添加PasswordAuthentication yes
到Match Group allowssh
节中。这将允许用户使用公钥和密码进行身份验证allowssh
。或者,您可以添加另一个组(和Match Group
节)来有选择地授予用户基于密码的登录。
此配置将任何sftponly
用户限制在其主目录中。如果您不希望那样,请删除该ChrootDirectory %h
指令。
如果您确实希望 chrooting 工作,重要的是用户的主目录(以及它上面的任何目录)root:root
由 group/other所有并且不能由 group/other 写入。主目录的子目录可以是用户拥有和/或可写的。
是的,用户的主目录必须是 root 用户拥有的并且对用户不可写。遗憾的是,这种限制是有充分理由的。根据您的情况,ChrootDirectory /home
可能是一个不错的选择。
设置的外壳sftponly
用户/sbin/nologin
是既无必要,也有害于这种解决方案,因为SSH的ForceCommand internal-sftp
覆盖用户的shell。
使用/sbin/nologin
可能有助于阻止他们通过其他方式(物理控制台、samba 等)登录。
此设置不允许root
通过 SSH直接登录;这形成了额外的安全层。如果你真的就需要直接root登录,修改PermitRootLogin
指令。考虑将其设置为forced-commands-only
, prohibit-password
, and (作为最后的手段)yes
。
对于奖励积分,看看限制谁可以su
root;添加一个名为 的系统组wheel
,并auth required pam_wheel.so
在/etc/pam.d/su
.
kem*_*tep 13
编辑您/etc/ssh/sshd_config
的包含:
Match User [SFTP user]
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
重新启动sshd
。如果您有多个用户,将它们全部放在 match user 行上,以逗号分隔,如下所示:
Match User User1,User2,User3
Run Code Online (Sandbox Code Playgroud)
配置sftp
为不允许 shell 访问的关键是通过ForceCommand
选项限制用户。