根据条件限制每个用户的 ssh 访问

根据条件限制每个用户的 ssh 访问

有没有办法限制用户仅使用 ssh 通过 SFTP 连接,但不允许同一用户登录安全 shell 终端?我只希望用户能够通过 SFTP 客户端进行连接,仅此而已。

答案1

是的,看看Ubuntu 仅 SFTP 帐户操作方法:

  1. 第 1 步 - 为受限帐户创建一个组

    在本示例中,我们将创建一个名为“sftponly”的新组。最好使用 addgroup 命令来执行此操作,因为它负责为我们分配一个未使用的 GID(组标识符)到新组:

    sudo addgroup sftponly
    
  2. 第 2 步 - 创建用户帐户

    例如,我们将创建一个用户名为“bob”的用户帐户,将其主目录设置为“/home/bob”,并为其提供密码“pass”

    我们将在此处使用 useradd 命令,因为它负责为我们将未分配的 UID 分配给用户帐户。

    创建用户帐户:

    sudo useradd -d /home/bob -s /usr/lib/sftp-server -M -N -g sftponly bob
    

    设置密码:

    sudo passwd bob 
    
  3. 第 3 步 - 设置用户主目录

    好吧,让我们为鲍勃创建一个家,并给他一个地方来放置他的文件。在不同的行中一一输入以下命令:

      sudo mkdir -p /home/bob/uploads /home/bob/.ssh 
      sudo chown bob:sftponly /home/bob/uploads /home/bob/.ssh 
      sudo chmod 700 /home/bob/.ssh
    

    第一行创建 '/home/bob'、/home/bob/uploads' 和 '/home/bob/.ssh' 目录。

    第二行将 /home/bob 目录的所有者和组设置为 root。这是重要的一步,因为如果用户主目录的根目录不属于 root 用户,SSH 服务器将会抱怨(并拒绝让我们的受限用户登录)。

    第三行设置“/home/bob/uploads”和“/home/bob/.ssh”的所有者和组,以便受限用户可以使用这些目录。在此示例中,“uploads”子目录将用于存储文件,而“.ssh”子目录用于存储用户公钥。

    完成本指南中的所有步骤后,您应该能够使用用户名和密码登录您的帐户,但建议您使用公钥方法进行身份验证,因为它更加安全。

    如果您已经拥有想要使用的私钥和公钥,那么您所需要做的就是将公钥的副本上传到用户主目录中名为 .ssh 的子目录。

    假设我们的公钥文件名为“bob.pub”,我们将发出以下命令来为 bob 用户帐户设置公钥身份验证。

    cd /home/bob/.ssh cat bob.pub >> authorized_keys 
    chmod 700 authorized_keys 
    chown bob:sftponly authorized_keys 
    rm -r bob.pub
    
  4. 第 4 步 - 将条目添加到 /etc/shells

    在您最喜欢的文本编辑器中以 root 身份打开文件 /etc/shells,并在底部添加以下行:

    /usr/lib/sftp-server
    
  5. 步骤 5-修改 SSH 服务器配置文件

    以 root 身份打开 SSH 服务器配置文件以开始进行更改。在 Ubuntu 系统上,该文件通常是 /etc/ssh/sshd_config 这可能与其他发行版有所不同,因此请提前检查。

    找到该行Subsystem sftp /usr/lib/openssh/sftp-server并将其更改为:

    Subsystem sftp internal-sftp
    

    现在在文件底部添加以下行:

    Match group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    

    该行Match group sftponly告诉 SSH 服务器将其下面的配置选项应用于sftponly系统组的所有成员。

    该行ChrootDirectory %h告诉 SSH 服务器仅将用户限制在其主目录中(此处使用 指定主目录 %h

    X11Forwarding no和行AllowTcpForwarding no分别阻止用户访问服务器上的图形应用程序以及通过我们的系统连接到其他系统。

    ForceCommand internal-sftp行阻止用户执行自己的命令,并通过在用户登录时执行“internal-sftp”命令强制他们使用 SSH 服务器的 SFTP 服务器组件。

  6. 第 6 步 - 重新启动 SSH 服务器

    Ubuntu/Debian 用户可以发出以下命令来重新启动 SSH 服务器:

    sudo /etc/init.d/ssh restart 
    

就是这样。您应该能够使用“sftp”命令以及您设置的用户名和密码或使用您的私钥登录(如果您在步骤 2 中进行了设置)。使用此处概述的设置,您只需重复步骤 1 -3 设置新帐户。

相关内容