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

上次更新时间:2021 年 10 月 14 日

我想在我的 Amazon Lightsail 实例上创建一个 SFTP 用户。我该如何操作?

解决方法

注意:以下步骤可以创建一个可以访问 chroot 环境(chroot jail)但没有 SSH 访问权限的 SFTP 用户。SFTP 用户无法访问 chroot 环境或目录之外的目录。因此,chroot 目录成为用户的根目录。

1.    为 SFTP 用户创建一个组。该小组有助于管理许多不同的 SFTP 用户。在本示例中,组名称为 sftp_group。您可以将名称更改为您选择的组名称。

sudo groupadd sftp_group

2.    在具有主目录的实例上创建用户。此用户仅执行 SFTP 任务,没有 SSH 登录 shell。请将后面示例中的 sftp_user 替换为您选择的用户名。

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

3.    通过 SFTP 连接到服务器时,用户可以通过不同的方式进行身份验证。以下示例使用的是基于密码和 SSH 密钥的身份验证。

密码身份验证

要要求进行密码身份验证,请使用以下命令创建密码:

sudo passwd sftp_user

基于 SSH 密钥的身份验证

如果您使用的是基于 SSH 密钥的身份验证,则需要为用户创建 SSH 文件,然后将公有密钥添加到文件中。为此,请执行以下操作:

在用户的主目录中,创建一个 ssh 文件夹和一个 authorized_keys 文件:

sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys

将要使用的 SSH 公有密钥添加到 /home/sftp_user/.ssh/authorized_keys 文件中。有关更多信息,请参阅为基于 Linux/UNIX 的 Lightsail 实例设置 SSH

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

sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -R
sudo 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 目录。请记住,路径名称的所有组件都必须是根目录,任何其他用户或组都不可写入。

4.    通过执行以下操作来编辑 /etc/sshd_config 文件:

通过注释掉 Subsystem sftp /usr/libexec/openssh/sftp-server 行来修改 Subsystem sftp 行:

# Subsystem sftp /usr/libexec/openssh/sftp-server

将上一行替换为:

Subsystem sftp internal-sftp

添加指令以限制 SFTP 用户的访问权限。这些指令必须添加到文件的底部:

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

在上面的示例中,使用了 ChrootDirectory 指令为 SFTP 用户指定根目录(chroot jail)。匹配阻止属于 sftp_group 的用户使用 /home/%u 作为其根目录。字符 %u 代表该用户。您可以更改用户的根目录。

ForceCommand internal-sftp 指令强制使用进程中的 SFTP 服务器。

如果使用密码身份验证,请在 /etc/ssh/sshd_config 文件中找到 PasswordAuthentication指令,并确保将其设置为 yes(是)。

5.    创建供用户使用的 chroot 目录。替换目录名 sftp_user,然后使用您的首选名称进行上载

sudo mkdir /home/sftp_user/uploads

修改文件的所有权:

sudo chown sftp_user:sftp_group /home/sftp_user/uploads

6.    验证目录权限是否如以下示例所示:

ls -ld /home
drwxr-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/

7.    重新启动 sshd 服务:

sudo systemctl restart sshd

8.    使用 sftp 连接到实例:

密码身份验证

# sftp sftp_user@example.com
sftp_user@example.com's password:

基于 SSH 密钥的身份验证

# sftp -i key.pem sftp_user@example.com

这篇文章对您有帮助吗?


您是否需要账单或技术支持?