SFTP,即 SSH 文件传输协议,或者说是安全文件传输协议, 通过SSH端口加密传输。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。SFTP的优势在于SSH软件包中包含SFTP(无需额外安装),iptables无需添加额外端口,配置方便
添加用户
在默认情况下, SFTP 使用 SSH 协议进行身份验证并建立安全连接,所以直接使用命令添加账户。
添加组
groupadd sftp
添加账户
useradd -g sftp -M -N -s /sbin/nologin user
设置密码
passwd user
更改用户 user 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
修改sshd_config配置文件
编辑配置文件:/etc/ssh/sshd_config
修改Subsystem sftp /usr/libexec/openssh/sftp-server
为Subsystem sftp internal-sftp
以下是对sftp组权限配置
#匹配 sftp 组的用户
Match Group sftp
#锁定的目录
ChrootDirectory /data/%u
#指定使用sftp服务使用系统自带的internal-sftp
ForceCommand internal-sftp
#如果不希望该用户能使用端口转发就加上,否则删掉
AllowTcpForwarding no
X11Forwarding no
或者对user用户权限配置
#匹配 user 用户
Match User user
#ChrootDirectory %u (%u代表变量用户名)
ChrootDirectory /data/%u
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
修改锁定用户目录的权限
所有者设置为了root,所有组设置为sftp
chown root:sftp /data/test
权限设置为755,所有者root有写入权限,而所有组sftp无写入权限
chmod -R 755 /data/test
目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限为755)
添加可上传删除目录
mkdir /data/user/upload
chown user:sftp /data/user/upload
允许user用户有读写权限,群组外用户无写入权限
chmod 755 /data/user/upload
此时目录权限结构
drwxr-xr-x 19 root sftp 4096 9月 4 17:52 /data/user
test目录下,user用户可读不可写
drwxr-xr-x 4 user sftp 4096 9月 28 12:02 /data/user/upload
upload目录下,user用户可进行读写操作
重启sshd使配置生效
systemctl restart sshd
问题:
1.目录权限不对,会提示broken pipe
2.对于使用堡垒机登录的主机,要改成PasswordAuthentication yes,此命令不支持在match块中
3.报错ssh: connect to host 127.0.0.1 port 22: Connection refused Couldn’t read packet: Connection reset by peer 解决:从其他主机上登录时无报错
FTP配置参考
对于多个用户共享目录的配置可以参考 《vsftp配置ftp服务器全步骤–多个用户共享目录》
对于不同用户不同目录的配置可以参考 《vsftp配置ftp服务器全步骤[chroot版本]–多个用户不共享目录》