需求客户要求与第三方通过sftp交互文件,需要在Linux系统部署sftp服务器。考虑安全,计划对提供给第三方的用户实现chroot控制提供sftp本次选用的是系统自带的internal-sftp。限制用户只能在home目录下活动,需要使用chroot。openssl4.8p1以后都支持chroot。
一、预装软件
系统需要先安装openssh
通过下面命令可以查看安装情况
dpkg -l | grep openssh-server
二、创建sftp管理组
为SFTP访问创建用户组,便于管理权限,sftp用户都属于此组以便统一管理。
groupadd sftpusers
三、SSH设置
编辑sshd配置文件
vim /etc/ssh/sshd_config
# 找到如下行,并注释掉
Subsystem sftp /usr/libexec/openssh/sftp-server
# 使用内置的sftp ,主要配合chroot的功能
Subsystem sftp internal-sftp
# 添加如下几行,表示sftpusers组的用户使用内置sftp ,并且用chroot功能 root设置为用户home目录
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
#以下两个参数建议修改成no,否则用户登录会比较慢
useDNS 设成no
GSSAPIAuthentication 设成no
保存后,重启sshd服务
service sshd restart
三、创建用户家目录和设置home权限
创建用户家目录及上传文件夹
mkdir -p /sFTP/share/testa/upload
配置用户home目录权限,用于chroot控制
chown root:root /sFTP/share/testa/
chmod 755 /sFTP/share/testa/
四、创建用户并设置上传目录权限控制
** 如果用户名必须是数字开头,先执行**
export SHADOW_ALLOW_ALL_NUMERIC_USER=1
创建新用户
useradd -g sftpusers -d /sFTP/share/testa -s /sbin/nologin testa
-d 指定home目录
-g 用户DF999999主属组为sftpusers。若此处为-G,则会自动创建DF999999组为用户的主属组
-s /bin/false 关闭其Shell访问
上传目录权限控制
(我这里设置的upload文件夹,用于sftp账号上传文件,upload上一层是没有权限的)
chown testa:sftpusers /sFTP/share/testa/upload
chmod 775 /sFTP/share/testa/upload
至此,用户可以sftp登录,并上传文件到send目录下。
五、用户初始化密码
passwd testa
六、说明
到此为止,已经在Ubuntu上成功安装并配置了SFTP服务器,并为SFTP用户设置了根目录。SFTP用户将被限制在其根目录中,并且无法访问系统上的其他目录,SFTP账号不能使用shell remote仅限SFTP使用。
版权归原作者 风行無痕 所有, 如有侵权,请联系我们删除。