我有一群用户只需将文件上传到他们设置的主目录。我认为 sftp 就足够了,但我不希望他们通过 shell 登录。那么有可能吗?我的平台是centos 7,用户的主目录存储在/personal/$user
我使用这些设置创建了用户
useradd -m -d /personal/user1 -s /sbin/nologin
为用户分配了密码,然后当我使用 sftp 登录到机器时,它说无法连接。
答案1
基于组的默认安全 SSH 设置
我喜欢以下用于管理 SSH 访问的设置,我曾用它来管理小型服务器群上的一组用户。安全性和易于管理是我的首要任务。
其主要功能是通过 Unix 组成员身份轻松管理 SSH 权限,具有严格定义的权限,并且默认情况下是安全的。
配置
安装软件(可选但有用):
yum install members # or apt install members
添加群组:
addgroup --system allowssh
addgroup --system sftponly
添加一个新文件/etc/ssh/sshd_config.d/strict.conf
(您可以替换strict
为更好的名称),其中包含以下内容:
PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no
Match Group allowssh
PubkeyAuthentication yes
Match Group sftponly
ChrootDirectory %h
DisableForwarding yes
ForceCommand internal-sftp
这假设您的 OpenSSH 设置包括sshd_config.d/*.conf
覆盖主配置。检查您的 SSH 文档,或验证 main 是否sshd_config
有适当的Include
指令。如果您的设置不支持此功能,您可以sshd_config
直接编辑。
另外,修改配置后不要忘记重新启动 SSH 服务。
基本原理
那么,这一切有什么作用呢?
- 作为一项额外的安全措施,它始终禁用 root 登录。
- 它始终禁用基于密码的登录(弱密码对于运行 sshd 的服务器来说是一个很大的风险)。
- 它只允许
allowssh
组中的用户(pubkey)登录。 - 组中的用户
sftponly
无法通过 SSH 获取 shell,只能通过 SFTP 获取 shell。
然后,只需通过管理组成员身份来管理有权访问的人员(组成员身份更改立即生效,无需重新启动 SSH;但请注意,现有会话不受影响)。members allowssh
将显示所有允许通过 SSH 登录的用户,并将members sftponly
显示所有仅限于 SFTP 的用户。
# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#
请注意,您的 sftp 用户需要同时是两者的成员sftponly
(以确保他们不会获得 shell)和allowssh
(以首先允许登录)。
更多信息
请注意此配置不允许密码登录;所有帐户需要使用公钥认证。这可能是您可以通过 SSH 获得的最大的安全优势,因此我认为即使您必须现在就开始,这也是值得的。
如果您确实不想要这个,那么也可以添加
PasswordAuthentication yes
到该Match Group allowssh
节中。这将允许allowssh
用户使用公钥和密码进行身份验证。或者,您可以添加另一个组(和Match Group
节)来有选择地授予用户基于密码的登录权限。此配置将任何
sftponly
用户限制为其主目录。如果您不希望这样,请删除该ChrootDirectory %h
指令。如果你做想要 chroot 工作,重要的是用户的主目录(及其之上的任何目录)
root:root
由组/其他拥有且不可写。主目录的子目录可以由用户拥有和/或可写。是的,用户的主目录必须由 root 拥有并且对用户来说不可写。可悲的是,有充分的理由对于这个限制。根据您的情况,
ChrootDirectory /home
可能是一个不错的选择。对于此解决方案,将用户的 shell 设置
sftponly
为/sbin/nologin
既不必要也不有害,因为 SSH 会ForceCommand internal-sftp
覆盖用户的 shell。使用
/sbin/nologin
可能有助于阻止他们通过其他方式(物理控制台、Samba 等)登录,因此仍然建议使用。此设置不允许
root
通过 SSH 直接登录;这形成了额外的安全层。如果你真的做需要直接 root 登录,请将PermitRootLogin
指令更改为forced-commands-only
,以仅允许通过 进行基于键的强制命令/root/.ssh/authorized_keys
。作为最后的手段,您可以使用prohibit-password
允许完全基于密钥的登录。避免yes
。为了获得奖励积分,请考虑限制谁可以
su
root;添加一个名为 的系统组wheel
,并auth required pam_wheel.so
在 中添加/启用/etc/pam.d/su
。
答案2
编辑您的/etc/ssh/sshd_config
内容以包含:
Match User [SFTP user]
ForceCommand internal-sftp
重新开始sshd
。如果您有多个用户,请将它们全部放在匹配用户行上,并用逗号分隔,如下所示:
Match User User1,User2,User3
sftp
配置不允许 shell 访问的关键是通过ForceCommand
选项限制用户。
答案3
只需将其默认 shell 更改为 /sbin/nologin 即可。假设大多数 Linux 版本:
# usermod -s /sbin/nologin username
答案4
有mysecureshell
它允许限制用户使用 SFTP,甚至限制可访问的路径。
还有rrsync
用于限制用户rsync
仅。