ubuntu搭建sftp服务

sftp直接使用系统的sshd服务,无需额外安装软件,配置也比较简单。

一、添加用户

添加一个sftp用户,不设置家目录,指定不能登录的shell,然后设置登录密码

useradd -M -s /sbin/nologin mysftp
passwd mysftp
二、新建一个工作目录

为sftp选择/新建一个工作目录,目录的所有上级目录属主必须为root,且不能为777的权限

mkdir -p /mnt/sftp/mysftp
chown root:root /mnt/sftp
chown 755 /mnt/sftp
chown mysftp:mysftp /mnt/ftp/mysftp

目录/mnt/sftp用于给用户进行chroot,而mysftp真正有权限写的目录是/mnt/sftp/mysftp,由于Linux的安全机制此处看起来有一些复杂

三、修改sshd配置文件

修改最好前先备份一下配置文件

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

将原有的sftp配置注释掉,然后在配置文件的最后加上下面的部分

#在配置文件中找到这一行注释掉
#Subsystem       sftp    /usr/lib/openssh/sftp-server


#文件最后加上下面这几行
Subsystem sftp internal-sftp
Match User mysftp
	ChrootDirectory /mnt/ftp
	AllowTcpForwarding no
	X11Forwarding no
	ForceCommand internal-sftp
四、重启sshd生效
systemctl restart sshd
五、遇到的一些问题和Tips
  1. sftp登录不成功,如何排查?

    查看检查sshd的日志,根据报错修复。根据sshd版本不同,日志可能存在下面几个文件中。

    grep sshd /var/log/messages
    less /var/log/journal/sshd.service.log
    less /var/log/auth.log
    
  2. 由于sftp使用的sshd服务,默认使用22端口,想要换一个端口?

    可以在sshd_config配置文件中增加一个端口监听,让sshd同时监听多个端口。记得将Port=22这行注释掉哦,这样就不会影响原来的ssh服务。

    Port 22		#将原有的这一行注释取消,下面另外加一行
    Port 38812
    
  3. 如果登录的时候还没有提示输入密码,就直接提示证书认证失败了

    在sshd_config中针对mysftp用户增加一行配置(步骤三),允许使用密码登陆

    PasswordAuthentication yes
    
  4. 上传的文件权限变少了?

    原来上传的文件权限是755,上传后变成了750,可以通过设置sftp的umask来解决,增加一个-u参数指定,如下

    Subsystem sftp internal-sftp -u 000
    
  5. 日志报错 bad ownership or modes for chroot directory

    检查为sftp设置的工作目录(ChrootDirectory),目录本身及所有上级目录属主必须是root,所有不能有777的权限

posted @ 2022-11-12 18:14  小伍子  阅读(2615)  评论(0编辑  收藏  举报