禁止普通用户直接登录但允许 scp 和 sftp?

禁止普通用户直接登录但允许 scp 和 sftp?

是否可以oracle在 Linux 中禁用普通用户(例如 )的直接登录,但允许scpsftp用于该用途?

答案1

创建文件/etc/nologin、设置帐户登录 shell 或/bin/false有效/sbin/nologin禁止用户帐户登录交互式 shell 等方法,但不能保护系统。

如果您想明确限制用户只能使用scpsftp,请安装专门用于执行此操作的受限 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页面 开始。您还应该了解什么是rsshrssh.confchroot 是及其运作方式

答案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

是的,这是可能的。

  1. 适当地设置他们的登录 shell,例如通过chsh -s /bin/false ${user}.
  2. 告诉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

相关内容