SFTP配置
SFTP简介
sftp是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口和SSH一样为22。
修改/etc/ssh/sshd_config配置文件
核心参数说明:
/data/sftp/%u:%u 会自动替换为登录用户名
此配置会使:
hanhua_test 用户 → 锁定到 /data/sftp/hanhua_test
junhang_test 用户 → 锁定到 /data/sftp/junhang_test
#强制执行内部sftp
Subsystem sftp internal-sftp
#限定只有sftpfroup组的才能访问
Match Group sftpgroup
#是否允许进行 X11 转发
X11Forwarding no
#是否允许TCP转发
AllowTcpForwarding no
#设定属于用户组sftp的用户访问的根目录
ChrootDirectory /data/sftp/%u
#强制执行这里指定的命令而忽略客户端提供的任何命令
ForceCommand internal-sftp
注释Subsystem sftp /usr/libexec/openssh/sftp-server
#Subsystem sftp /usr/libexec/openssh/sftp-server
创建用户
注:为保障系统安全,添加用户的时候建议添加如下参数:
-M // 表示创建用户时不生成对应home目录
-s /sbin/nologin // 表示sftp用户不能登录系统
useradd -M -s /sbin/nologin hanhua_test
password hanhua_test
useradd -M -s /sbin/nologin junhang_test
password junhang_test
创建组名
将用户加入 sftpgroup
usermod -aG sftpgroup hanhua_test
usermod -aG sftpgroup junhang_test
验证组关系
groups hanhua_test
创建目录
sftp hanhua_test@IP
hanhua_test@IP's password:
packet_write_wait: Connection to IP port 22: Broken pipe
Couldn't read packet: Connection reset by peer
以上报错的原因就是,未严格按照以下路径创建目录及权限
# 将用户目录所有权改为 root
sudo chown root:root /data/sftp/hanhua_test
sudo chown root:root /data/sftp/junhang_test
# 设置正确权限
sudo chmod 755 /data/sftp/hanhua_test
sudo chmod 755 /data/sftp/junhang_test
# 创建用户可写子目录
sudo mkdir /data/sftp/hanhua_test/files
sudo mkdir /data/sftp/junhang_test/files
sudo chown hanhua_test:hanhua_test /data/sftp/hanhua_test/files
sudo chown junhang_test:junhang_test /data/sftp/junhang_test/files
sudo chmod 770 /data/sftp/hanhua_test/files
sudo chmod 770 /data/sftp/junhang_test/files
重启SSH
systemctl restart sshd.service
多功能剪刀折叠旅行剪不锈钢方便剪便携折叠剪钓鱼剪子迷你小剪刀
权限结构最终检查
$ tree /data/sftp -p
/data/sftp
├── [drwxr-xr-x root] hanhua_test
│ └── [drwxrwx— hanhua_test] files # 用户可操作
└── [drwxr-xr-x root] junhang_test
└── [drwxrwx— junhang_test] files
核心要点总结:
用户必须在sftpgroup组中
Chroot目录(如/data/sftp/hanhua_test) 必须
- 所有者:root:root
- 权限:755
用户文件操作只能在files/子目录进行
效果验证
# 1. 连接测试
sftp hanhua_test@IP
# 2. 登录后操作
sftp> pwd
Remote working directory: /
sftp> ls
files # 应只看到此目录
sftp> cd files
sftp> put test.txt # 可正常上传文件到files目录
路径规则详解
核心路径要求
/data/sftp/hanhua_test 是 必须存在的专属路径
ChrootDirectory /data/sftp/%u # %u 自动扩展为用户名
为什么不能直接使用 /data/sftp?
设计原理:通过专属路径实现:
- 用户隔离(每个用户独立沙箱)
- 权限控制(root锁死上级目录)
- 安全访问(仅files目录可写