一、分離SSH和SFTP服務
系統內開啟ssh服務和sftp服務都是通過/usr/sbin/sshd這個后臺程序監聽22端口,而sftp服務作為一個子服務,是通過/etc/ssh/sshd_config配置文件中的Subsystem實現的,如果沒有配置Subsystem參數,則系統是不能進行sftp訪問的。
具體操作如下:
1.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
具體修改如下:
Port 22 改成Port 指定端口
PermitRootLogin yes
改成
PermitRootLogin no
就是取消該行的注釋,并將yes改成no,這行參數的目的是拒絕root用戶登錄
PidFile /var/run/sshd.pid
改成
PidFile /var/run/sftpd.pid
就是取消該行的注釋,并將sshd.pid改成sftpd.pid
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
3、 清空/var/run/目錄下的sftpd.pid文件內容
> /var/run/sftpd.pid
**將內容刪掉**
4、 添加sftp的專用賬戶
useradd sftpuser
passwd sftpuser
usermod -s /bin/false sftpuser
5、 禁用selinux
setenforce 0
6、 重啟sftpd服務
systemctl daemon-reload
systemctl start sftpd