SFTP (Secure File Transfer Protocol)是一种在网络上安全可靠的文件传输方法。在 Linux 上设置 SFTP 服务器允许您安全地传输文件,管理权限和控制访问。
在本指南中,我们将逐步解释如何在 Ubuntu 24.04 LTS 系统上设置 SFTP 服务器。
chroot 介绍
当我们在 chroot 环境中配置 SFTP 时,那么用户将被限制在他们的 home directory,或者我们可以说被用户将处于类似于 监狱 的环境中,在那里他们甚至不能更改他们的目录。
Install OpenSSH Server
SFTP 是 OpenSSH 服务器包的一部分,安装 OpenSSH 服务器包,如果已经安装,则跳过此步骤。
$ sudo apt update
$ sudo apt install openssh-server -y
安装 openssh 服务器后,使用以下 systemctl 命令启动并启用它的服务。
$ sudo systemctl start sshd
$ sudo systemctl enable sshd
Create SFTP Group and User
要管理对 SFTP 服务器的访问,最好创建一个专用的 SFTP 组和用户。
使用 groupadd 命令创建一个 sftp _ users 组
$ sudo groupadd sftp_users
添加一个新用户 sftpuser,并将其分配给 sftp_users 组,该用户只具有 SFTP 访问权限
$ sudo useradd -m -G sftp_users -s /usr/sbin/nologin sftpuser
接下来,运行 passwd 命令设置 sftpuser 用户的密码
$ sudo passwd sftpuser
Configure SSH for SFTP-Only Access
我们需要配置 SSH,以限制 SFTP 用户只能访问 SFTP。编辑 sshd_config 文件,在文件末尾添加以下行,配置 sftp_users 组中的用户只能访问 sftp 服务。
# vi /etc/ssh/sshd_config
#comment out the below line and add a line like below
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# add Below lines at the end of file
Match Group sftp_users
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
部分配置说明:
Match Group sftp_users – 只匹配属于 sftp_users 组的用户
ChrootDirectory %h – 默认用户的主目录,对于 sftpuser,这是 /home/sftpuser
ForceCommand internal-sftp – 这将强制执行 Internal-sftp 并忽略 ~/. ssh/rc
文件中提到的任何命令。
进行上述更改后,使用以下命令重新启动 ssh 服务
$ sudo systemctl restart sshd // For RHEL based Distributions
$ sudo systemctl restart ssh // For Debian based Distributions
Set the required permissions
使用 chown 和 chmod 命令调整用户主目录的权限
$ sudo chown root:root /home/sftpuser
$ sudo chmod 755 /home/sftpuser
创建一个 sftpuser 可以上传文件的目录
$ sudo mkdir /home/sftpuser/uploads
$ sudo chown sftpuser:sftp_users /home/sftpuser/uploads
5) Test sftp server
首先,尝试使用 ssh 访问系统
$ ssh sftpuser@your_server_ip
正如我们在上面的输出中看到的,sftpuser 不允许 ssh 登陆。
现在,让我们尝试使用 sftp 登录
正如您在上面看到的,sftpuser 通过 sftp 登录,但是由于 chroot 环境的原因无法更改目录。
进行上传和下载测试,如下所示: