1.SFTP简介

      sftp是ssh的一部分,sftp没有单独的守护进程,其必须使用sshd守护进程(默认端口为22)进行相应的连接操作。

2.分离SSH和SFTP服务

       系统内开启ssh服务和sftp服务都是通过/usr/sbin/sshd这个后台程序监听22端口,而sftp服务作为一个子服务,是通过/etc/ssh/sshd_config配置文件中的Subsystem实现的,如果没有配置Subsystem参数,则系统是不能进行sftp访问。

2.1 复制ssh文件重名为sftp配置文件 


#复制/usr/lib/systemd/system/sshd.service为/etc/systemd/system/sftpd.service
[root@lv ~]# cp /usr/lib/systemd/system/sshd.service  /etc/systemd/system/sftpd.service

#复制/etc/pam.d/sshd为/etc/pam.d/sftpd
[root@lv ~]# cp /etc/pam.d/sshd  /etc/pam.d/sftpd

#复制/etc/ssh/sshd_config为/etc/ssh/sshd_config
[root@lv ~]# cp /etc/ssh/sshd_config  /etc/ssh/sftpd_config

#将sshd与sftpd创建软链接
[root@lv ~]# ln -sf  /usr/sbin/sshd  /usr/sbin/sftpd

#复制/etc/sysconfig/sshd为/etc/sysconfig/sftp
[root@lv ~]# cp /etc/sysconfig/sshd  /etc/sysconfig/sftp

#复制/var/run/sshd.pid为/var/run/sftpd.pid,并清空/var/run/sftpd.pid
[root@lv ~]# cp /var/run/sshd.pid  /var/run/sftpd.pid
[root@lv ~]# > /var/run/sftpd.pid

2.2修改服务配置文件

vim /etc/systemd/system/sftpd.service
#删除sftpd.service内容并添加如下内容
[Unit]
Description=sftpd server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sftp
ExecStart=/usr/sbin/sftpd -f /etc/ssh/sftpd_config
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

2.3修改sftp配置文件


vim /etc/ssh/sftpd_config
修改Port't:Port 22
修改PidFile:PidFile /var/run/sftpd.pid
#注释
#Subsystem      sftp    /usr/libexec/openssh/sftp-server

#文件末尾添加如下内容
Subsystem sftp internal-sftp
Match Group sftp
ForceCommand internal-sftp
AllowTcpForwarding no


#配置解释:
Subsystem sftp internal-sftp       #指定使用sftp服务使用系统自带的internal-sftp
Match Group sftpusers              #匹配sftp组的用户,若要匹配多个组,可用逗号分开
X11Forwarding no                   #禁止用户使用端口转发
AllowTcpForwarding no              #禁止用户使用端口转发
ForceCommand internal-sftp         #只能用于sftp登录
ChrootDirectory /home/sftp         #限制用户的根目录

2.4创建用户与目录


#使用root用户创建用户组,组名为sftp;创建sftp用户,用户名为sftp,并设置密码
groupadd sftp
useradd -g sftp -s /sbin/nologin sftp
passwd sftp

#使用root用户新建目录/data,将其设置为sftp的home目录,并指定目录权限
mkdir -p /data 
usermod -d /data sftp

#设置Chroot目录权限
chown root:sftp /data
chmod 755 /data

#设置sftp用户可以操作的目录
mkdir -p /data/sftp/home
chown sftp:sftp /data/sftp/home
chmod 755 /data/sftp/home

2.5启动服务


 #使修改的sshd配置生效
systemctl daemon-reload
#启动sftp
systemctl start sftpd #启动sftp

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐