Linux下使用openssh搭建sftp服务
创建 SFTP 用户组
为 SFTP 用户创建一个专用组:
sudo groupadd sftpusers
创建 SFTP 用户
创建 SFTP 用户并将其添加到 sftpusers
组,同时指定用户的主目录和禁止 shell 访问:
sudo useradd -g sftpusers -s /sbin/nologin username
sudo passwd username
配置 SSH 以限制 SFTP 访问
编辑 SSH 配置文件 /etc/ssh/sshd_config
:(编辑前记得备份)
sudo nano /etc/ssh/sshd_config
找到并修改或添加以下内容:
Subsystem sftp internal-sftpMatch Group sftpusersChrootDirectory /var/sftp/%uForceCommand internal-sftpAllowTcpForwarding noX11Forwarding no
-
Match Group sftpusers
:表示后面配置将仅应用于属于sftpusers
组的用户。 -
ChrootDirectory /var/sftp/%u
:将用户的根目录限制到/var/sftp/
下的用户目录(%u
表示用户名),防止用户访问授权目录之外的内容。 -
ForceCommand internal-sftp
:强制用户进入 SFTP 模式,禁止通过 SSH 登录到交互式 shell。 -
AllowTcpForwarding no
:禁用 TCP 转发,防止用户通过 SSH 隧道转发 TCP 流量。 -
X11Forwarding no
:禁用 X11 转发,防止用户通过 SSH 隧道转发 X11 图形界面应用程序。
设置 Chroot 目录结构
为 SFTP 用户设置目录结构:(如果有多个用户用来访问sftp,那么需要为每个用户都创建一个/var/sftp/username目录)
sudo mkdir -p /var/sftp/username
sudo chown root:root /var/sftp/username
sudo chmod 755 /var/sftp/username
sudo mkdir /var/sftp/username/files
sudo chown username:sftpusers /var/sftp/username/files
sudo chmod 755 /var/sftp/username/files
重启 SSH 服务
重启 SSH 服务以应用更改:
sudo systemctl restart sshd
验证设置
使用 SFTP 客户端测试连接:
sftp username@localhost
使用winSCP客户端测试连接:
登录成功后,只能在访问自己的文件目录,且根目录下只有读权限,files目录下具有读写权限。
通过上述步骤,可以确保 SFTP 用户只能访问其授权的目录,并且无法通过 SSH 登录系统。这些措施可以有效地提高文件传输的安全性。