SFTP是SSH的一部分,SFTP沒有單獨的守護進程,它必須使用SSHD守護進程(端口號默認是22)來完成相應的連接操作,所以從某種意義上來說,SFTP並不像是一個服務器程序,而更像是一個客戶端程序。
SFTP是使用加密傳輸認證信息傳輸數據,所以SFTP是非常安全的。
本手冊是在centos7.5系統上進行編寫,理論上支持centos7.0以上版本
一、確定服務器SFTP可用
使用Xshell工具連接SFTP服務器,輸入systemctl status sshd,查看結果如下,表示機器SFTP已打開且可用
若SFTP未開啟,通過命令systemctl start sshd開啟
SFTP服務關閉命令為:systemctl stop sshd
二、分離SSH和SFTP服務
系統內開啟ssh服務和sftp服務都是通過/usr/sbin/sshd這個后台程序監聽22端口,而sftp服務作為一個子服務,是通過/etc/ssh/sshd_config配置文件中的Subsystem實現的,如果沒有配置Subsystem參數,則系統是不能進行sftp訪問的。
具體操作如下:
2.1 復制SSH相關文件,作為sftp的配置文件
1、 拷貝/usr/lib/systemd/system/目錄下的sshd.service文件,放到/etc/systemd/system/目錄下,命名為:sftpd.service
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service |
2、 拷貝/etc/pam.d/目錄下的sshd文件,放到同目錄,命名為:sftpd
cp /etc/pam.d/sshd /etc/pam.d/sftpd |
3、 拷貝/etc/ssh/目錄下的sshd_config文件,放到同目錄,命名為:sftpd_config
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config |
4、 對service和rcsftpd進行軟連接
ln -sf /usr/sbin/service /usr/sbin/rcsftpd |
5、 對sshd和sftpd進行軟連接
ln -sf /usr/sbin/sshd /usr/sbin/sftpd |
6、 拷貝/etc/sysconfig/目錄下的sshd文件,放到同目錄,命名為:sftp
cp /etc/sysconfig/sshd /etc/sysconfig/sftp |
7、 拷貝/var/run/目錄下的sshd.pid文件,放到同目錄,命名為:sftpd.pid
cp /var/run/sshd.pid /var/run/sftpd.pid |
2.2 修改復制好的配置文件
1、 修改/etc/systemd/system/目錄下sftpd.service文件
vim /etc/systemd/system/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、 修改/etc/ssh/目錄下的sftpd_config文件
vim /etc/ssh/sftpd_config |
具體修改如下:
①找到第17行,將 Port 22 改成 Port 20022 ②找到第38行,將 #PermitRootLogin yes 改成 PermitRootLogin no 就是取消該行的注釋,並將yes改成no,這行參數的目的是拒絕root用戶登錄
③找到116行,將 #PidFile /var/run/sshd.pid 改成 PidFile /var/run/sftpd.pid 就是取消該行的注釋,並將sshd.pid改成sftpd.pid
④找到第132行,將 Subsystem sftp /usr/libexec/openssh/sftp-server 注釋 #Subsystem sftp /usr/libexec/openssh/sftp-server並添以下5行 Subsystem sftp internal-sftp Match User sftpuser X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 就是注釋132行,並將132行下面,添加5行內容。 |
3、 清空/var/run/目錄下的sftpd.pid文件內容
# > /var/run/sftpd.pid |
將內容刪掉
4、 添加sftp的專用賬戶
useradd sftpuser |
passwd sftpuser |
usermod -s /bin/false sftpuser |
5、 禁用selinux
setenforce 0 |
sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config |
6、 重啟sftpd服務
systemctl daemon-reload |
systemctl start sftpd |
三、測試SFTP
使用xftp軟件,連接修改好的服務器,通過新建的用戶和端口連接
連接成功