如何在 Lightsail 实例上创建 SFTP 用户?

2 分钟阅读
0

我想在 Amazon Lightsail 实例上创建一个 SFTP 用户。

解决方案

**注意:**以下步骤创建一个 SFTP 用户,该用户可以在没有 SSH 访问权限的情况下访问 chroot 环境(chroot 监狱)。该 SFTP 用户无法访问 chroot 环境或目录之外的目录。对于这个用户来说,chroot 目录就是根目录。

设置您的 SFTP 组和用户

  1. 使用以下命令为 SFTP 用户创建一个组:

    sudo groupadd sftp_group

    **注意:**将 sftp_group 替换为您的组名。

  2. 在实例上创建一个用户,为它建立一个主目录,让它不能访问 SSH 登录 Shell。为此,请运行以下命令:

    sudo useradd -g sftp_group -m -d  /home/sftp_user -s /sbin/nologin sftp_user

    **注意:**将 sftp_user 替换为您的用户名。

将用户身份验证设置为使用密码身份验证或基于 SSH 密钥的身份验证

密码身份验证

使用以下命令创建密码:

sudo passwd sftp_user

基于 SSH 密钥的身份验证

  1. 要配置基于 SSH 密钥的身份验证,请在用户的主目录中创建一个 .ssh 文件夹。然后,创建一个 authorized_keys 文件:

    sudo mkdir /home/sftp_user/.ssh
    sudo touch /home/sftp_user/.ssh/authorized_keys
  2. 将要使用的 SSH 公钥添加到 /home/sftp_user/.ssh/authorized_keys 文件中。有关更多信息,请参阅 Set up SSH keys for Lightsail

  3. 要更改用户主目录的所有权和权限,请运行以下命令:

    sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -Rsudo chown root:sftp_group /home/sftp_user/
    sudo chmod 755 /home/sftp_user/
    sudo chmod 700 /home/sftp_user/.ssh/
    sudo chmod 600 /home/sftp_user/.ssh/authorized_keys

    **注意:**前面的示例在 /home/sftp_user 目录上将权限设置为 755,然后将所有权更改为根用户。此用户目录就是 chroot 目录。

编辑 /etc/ssh/sshd_config 文件

  1. Subsystem sftp 行中,注释掉 Subsystem sftp /usr/libexec/openssh/sftp-server 行:

    # Subsystem sftp /usr/libexec/openssh/sftp-server
  2. 将前面这行替换为以下内容:

    Subsystem sftp internal-sftp
  3. 要限制 SFTP 用户访问权限,请在文件末尾添加以下内容:

    Match Group sftp_group
    ChrootDirectory /home/%u
    ForceCommand internal-sftp

    在前面的示例中,ChrootDirectory 为 SFTP 用户指定了根目录。MatchGroup 识别 sftp_group 中使用路径 /home/%u 作为根目录的用户。字符 %u 代表用户。ForceCommand internal-sftp 强制使用进程内 SFTP 服务器。

  4. 如果您使用密码身份验证,请将 /etc/ssh/sshd_config 文件中的 PasswordAuthentication 设置为 yes

为用户创建 chroot 目录

  1. 要创建 chroot 目录,请运行以下命令:
    sudo mkdir /home/sftp_user/uploads
    **注意:**将目录名称、sftp_useruploads 替换为您的目录名称。
  2. 修改文件的所有权:
    sudo chown sftp_user:sftp_group /home/sftp_user/uploads
    **注意:**将目录名称、sftp_useruploads 替换为您的目录名称。

验证您的更改并重新启动 SSHD 服务

  1. 验证目录权限是否与以下示例类似:

    ls -ld /homedrwxr-xr-x 3 root root 23 Oct  6 15:17 /home
    
    ls -ld /home/sftp_user
    drwxr-xr-x 3 root sftp_group 21 Oct  6 15:17 /home/sftp_user
    
    ls -ld /home/sftp_user/uploads/
    drwxr-xr-x 2 sftp_user sftp_group 6 Oct  6 15:17 /home/sftp_user/uploads/
  2. 重新启动 SSHD 服务:

    sudo systemctl restart sshd

使用 SFTP 连接到实例

密码身份验证

运行以下命令:

# sftp sftp_user@example.com's password:

基于 SSH 密钥的身份验证

运行以下命令:

# sftp -i key.pem sftp_user@example.com
AWS 官方
AWS 官方已更新 1 年前