最新项目中想使用ftp,但是ftp没有被加密,因此考虑使用sftp。但是使用sftp,又需要限制用户仅仅访问特定目录,百度了下,发现通过openssh-server的Match可以匹配用户,ChrootDirectory可以限制访问目录。
这里记录下操作方式
1、创建个特定用户,并设置密码
这里假设创建的用户名为sftpuser
useradd -m sftpuser passwd sftpuser
2、修改目录所有者与权限(很重要)
chown root:root /home/sftpuser chmod 0755 /home/sftpuser
3、创建配置文件
创建用户的配置文件/etc/ssh/sshd_config.d/sftpuser.conf
内容为:
Match User sftpuser ChrootDirectory /home/sftpuser # 限制访问目录,该目录必须是属于root,权限必须是0755 ForceCommand internal-sftp # 只支持sftp指令 X11Forwarding no # 禁止X11转发 AllowTcpForwarding no # 禁止Tcp转发 PermitTTY no # 禁止TTY登录 AllowAgentForwarding no # 禁用代理转发 AllowStreamLocalForwarding no # 禁用流本地转发 PermitUserRC no # 禁用用户RC文件
4、其他优化
修改全局配置文件/etc/ssh/sshd_config
将
Subsystem sftp /usr/lib/openssh/sftp-server
改为
Subsystem sftp internal-sftp
说是internal-sftp比/usr/lib/openssh/sftp-server的性能更好,更省内存。
文章作者:沃航科技