我想在 Amazon Lightsail 实例上创建一个 SFTP 用户。
解决方案
**注意:**以下步骤创建一个 SFTP 用户,该用户可以在没有 SSH 访问权限的情况下访问 chroot 环境(chroot 监狱)。该 SFTP 用户无法访问 chroot 环境或目录之外的目录。对于这个用户来说,chroot 目录就是根目录。
设置您的 SFTP 组和用户
-
使用以下命令为 SFTP 用户创建一个组:
sudo groupadd sftp_group
**注意:**将 sftp_group 替换为您的组名。
-
在实例上创建一个用户,为它建立一个主目录,让它不能访问 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 密钥的身份验证
-
要配置基于 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 文件中。有关更多信息,请参阅 Set up SSH keys for Lightsail。
-
要更改用户主目录的所有权和权限,请运行以下命令:
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 文件
-
在 Subsystem sftp 行中,注释掉 Subsystem sftp /usr/libexec/openssh/sftp-server 行:
# Subsystem sftp /usr/libexec/openssh/sftp-server
-
将前面这行替换为以下内容:
Subsystem sftp internal-sftp
-
要限制 SFTP 用户访问权限,请在文件末尾添加以下内容:
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
在前面的示例中,ChrootDirectory 为 SFTP 用户指定了根目录。MatchGroup 识别 sftp_group 中使用路径 /home/%u 作为根目录的用户。字符 %u 代表用户。ForceCommand internal-sftp 强制使用进程内 SFTP 服务器。
-
如果您使用密码身份验证,请将 /etc/ssh/sshd_config 文件中的 PasswordAuthentication 设置为 yes。
为用户创建 chroot 目录
- 要创建 chroot 目录,请运行以下命令:
sudo mkdir /home/sftp_user/uploads
**注意:**将目录名称、sftp_user 和 uploads 替换为您的目录名称。
- 修改文件的所有权:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
**注意:**将目录名称、sftp_user 和 uploads 替换为您的目录名称。
验证您的更改并重新启动 SSHD 服务
-
验证目录权限是否与以下示例类似:
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/
-
重新启动 SSHD 服务:
sudo systemctl restart sshd
使用 SFTP 连接到实例
密码身份验证
运行以下命令:
# sftp sftp_user@example.com's password:
基于 SSH 密钥的身份验证
运行以下命令:
# sftp -i key.pem sftp_user@example.com