是否可以oracle
在 Linux 中禁用普通用户(例如 )的直接登录,但允许scp
和sftp
用于该用途?
答案1
创建文件/etc/nologin
、设置帐户登录 shell 或/bin/false
有效/sbin/nologin
禁止用户帐户登录交互式 shell 等方法,但不能保护系统。
如果您想明确限制用户只能使用scp
或sftp
,请安装专门用于执行此操作的受限 shell。该rssh
软件包是一个受限制的 shell,旨在与 OpenSSH 配合使用。
: rssh is a restricted shell for use with OpenSSH, allowing only scp
: and/or sftp. For example, if you have a server which you only want
: to allow users to copy files off of via scp, without providing shell
: access, you can use rssh to do that. It is a alternative to scponly.
您应该认真考虑chroot
为使用受限 shell 登录的用户设置 a rssh
。
阅读并理解以这种方式限制用户的安全影响。从和 的man
页面 开始。您还应该了解什么是rssh
rssh.conf
chroot
是及其运作方式。
答案2
您可以将其添加到 sshd_config:
Match User oracle
ForceCommand set - ""$SSH_ORIGINAL_COMMAND; [ "$1" = "scp" ] || exit 1; CMD=`IFS='\`&;<>'; set - ""$SSH_ORIGINAL_COMMAND; echo $1`; [ "$CMD" ] || exit 1; exec $CMD
在这里,我匹配用户“oracle”。相反,您可以用来Match group scponly
匹配“sconly”组中的用户。如果有人尝试以不运行 scp 的方式进行连接,那么它将静默退出并返回代码 1。
如果帐户使用基于密钥的身份验证,您可以在用户的 .ssh/authorized_keys 文件中的密钥前面添加command="<above commands>"
.
虽然我添加了一些安全措施,防止操纵文件导致执行流氓命令(通过截断任何&``;<>
字符),但我不能确定这不能以我没有想到的方式解决。
这对于粘贴到 sshd_config 文件来说有点长和混乱,并且拼写错误可能会破坏其他用户的东西。最好创建一个脚本来检查“scp”,然后从 ForceCommand 调用该脚本,从而使 modsshd_config
更简单。查看https://serverfault.com/questions/749474/ssh-authorized-keys-command-option-multiple-commands一些这方面的例子。
答案3
是的,这是可能的。
- 适当地设置他们的登录 shell,例如通过
chsh -s /bin/false ${user}
. - 告诉
sshd
使用内部sftp-server
Match User ${user} ForceCommand internal-sftp
Match
块一直持续到下一个Match
块或文件末尾(缩进仅适用于人类),因此在文件末尾添加此配置可能是最简单的。
(替换${user}
为所需的用户名。)
请注意,9.0 版本之前的客户端ssh
只能使用sftp
此配置。从版本 9.0 开始,它又scp
可以工作了,因为它已更改为sftp
在内部使用协议。
答案4
登录 shell 可以更改为bash
或/usr/sbin/nologin
阻止/bin/false
正常登录。可以使用以下命令更改登录 shell usermod
:
usermod user_name -s /usr/sbin/nologin