在linux上搭建sftp服务器
sftp走的是ssh协议,是加密的,比vsftp要更安全可靠,SFTP本身没有单独的守护进程,它必须使用sshd守护进程。
先查看openssh的版本:ssh -V
此版本必须大于4.8p1,低于的这个版本需要升级。
- groupadd sftp(创建组sftp)
- useradd -g sftp -d /home/easySignUpdate -s /sbin/nologin easySignUpdate (创建用户easySignUpdate,属于sftp组,指定家目录为/home/easySignUpdate,不允许登录shell)
- passwd easySignUpdate(修改用户密码)
- chown root:sftp /home/easySignUpdate(修改用户的属主属组,否则会报错)
- chmod -R 755 /home/easySignUpdate(修改家目录的权限,其他用户一定不要有w的权限)
- vim /etc/ssh/sshd_config(修改配置文件
#Subsystem sftp /usr/libexec/openssh/sftp-server(文件带的这一行注释掉)
Subsystem sftp internal-sftp(这行指定使用sftp服务使用系统自带的internal-sftp)
ChrootDirectory /home/easySignUpdate/(用chroot将用户的根目录指定到/home/easySignUpdate/, 这样用户就只能在/home/easySignUpdate/下活动)
ForceCommand internal-sftp(指定sftp命令)
AllowTcpForwarding no
Match User easySignUpdate(这行用来匹配用户)
X11Forwarding no(不允许做X的ssh转发)
- systemctl restart sshd(重启服务)
- sftp easySignUpdate@127.0.0.1(在本地测试登入出现 sftp> 则登入成功)
报错:
ssh: connect to host 127.0.0.1 port 22: Connection refused Couldn’t read packet: Connection reset by peer
是你的属主或权限没改,用户的家目录的属主必须要是root,属主无所谓,除了属主其他用户不能有写权限。还有就是配置文件里指定用户根目录的语句为ChrootDirectory /home/easySignUpdate/,不能写成
ChrootDirectory /home/easySignUpdate/%u
Directive ‘UseDNS’ is not allowed within a Match block
如果有这个报错就把配置文件里的UseDNS no 注释掉