Linux 创建 SFTP 用户
创建 FTP 目录
在服务器中,指定一个特定目录为 ftp 根目录(这里假设根目录为 /data/sftp)。
在该目录下存储各种用户的 ftp 目录。
这里需要注意一下,由于 ChrootDirectory 指令的限制,用户的 ftp 目录归 root 所有。需要在用户目录下新建目录,指定所有人为具体的用户。否则的话,会报 sftp fatal: bad ownership or modes for chroot directory 报错。
这里以用户 demo 为例。
# 创建根目录
mkdir -p /data/sftp
# 创建用户 ftp 目录
mkdir -p /data/sftp/demo
# 创建文件存储目录
mkdir -p /data/sftp/demo/files
创建用户
创建用户组,执行以下命令:
# 创建用户组
groupadd sftp_users
创建用户,执行以下命令:
useradd -r -g sftp_users -s /sbin/nologin demo
参数说明:
-r创建的是系统用户而非普通用户,并且不会创建家目录。-g指定用户所属组。-s指定用户使用的 shell,/sbin/nologin代表禁止登录系统。
变更文件存储目录权限,使用户可以正常上传下载文件:
chown demo:sftp_users /data/sftp/demo/files
chmod 755 /data/sftp/demo/files
编辑 sshd_config 文件
vim /etc/ssh/sshd_config
启用 SFTP 子系统
Subsystem sftp internal-sftp
如果存在该行,注释掉原有的,添加上面的。
配置 SFTP 用户访问
Match Group sftp_users
ForceCommand internal-sftp
ChrootDirectory /data/sftp/%u
AllowTcpForwarding no
X11Forwarding no
参数说明:
Match Group sftp_users指定下面设置仅适用于sftp_users用户组。ChrootDirectory /data/sftp/%u将 SFTP 用户的活动限制在其个人目录内。%u变量会被替换为用户名,确保每个用户只能访问自己的目录。ForceCommand internal-sftp强制SFTP会话使用内部SFTP子系统,进一步增加了安全性。AllowTcpForwarding no禁用 SSH 端口转发。X11Forwarding no禁用 X11 转发功能。
调试
执行以下命令查看 sshd 服务的输出
journalctl -u sshd.service