我想在我的 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