SSH和SFTP服务分离
SSH和SFTP服務分離
- 1.原理
- 1.1 daemon和service
- 1.2 sftp
- 2.分離SSH和SFTP服務
- 2.1 復制SSH相關文件,作為sftp的配置文件
- 2.1.1 /usr/lib/systemd/system/sshd.service
- 2.1.2 /etc/pam.d/sshd
- 2.1.3 /etc/ssh/sshd_config
- 2.1.4 /usr/sbin/service
- 2.1.5 /usr/sbin/sshd
- 2.1.6 /etc/sysconfig/sshd
- 2.1.7 /var/run/sshd.pid
- 2.2 修改SFTP配置文件
- 2.2.1 /etc/systemd/system/sftpd.service
- 2.2.2 /etc/ssh/sftpd_config
- 2.2.2.1 Port
- 2.2.2.2 PermitRootLogin
- 2.2.2.3 PidFile
- 2.2.2.4 Subsystem
- 2.2.2.5 添加sftpusers用戶組并創建用戶目錄
- 3.啟動sftp服務
- 3.1 禁用SELINUX
- 3.1 啟動服務
- 3.2 登錄驗證
- 4. 22端口禁止sftpusers用戶登錄(非必須)
- 4.1
1.原理
1.1 daemon和service
Linux操作系統提供的服務稱為Service,而提供服務的程序稱為Daemon。舉例來說,達成循環型例行性工作排程服務(service)的程序為crond這個daemon。我理解通過servie啟動特定配置的daemon。
1.2 sftp
SFTP是SSH的一部分,SFTP沒有單獨的守護進程,它必須使用SSHD守護進程(端口號默認是22)來完成相應的連接操作。
通過新建另一個‘sshd’進程,作為sftp服務的deamon,完成服務分離。
2.分離SSH和SFTP服務
系統內開啟ssh服務和sftp服務都是通過/usr/sbin/sshd這個后臺程序監聽22端口,而sftp服務作為一個子服務,是通過/etc/ssh/sshd_config配置文件中的Subsystem實現的,如果沒有配置Subsystem參數,則系統是不能進行sftp訪問的。
2.1 復制SSH相關文件,作為sftp的配置文件
2.1.1 /usr/lib/systemd/system/sshd.service
拷貝/usr/lib/systemd/system/目錄下的sshd.service文件,放到/etc/systemd/system/目錄下,命名為:sftpd.service
cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service2.1.2 /etc/pam.d/sshd
cp /etc/pam.d/sshd /etc/pam.d/sftpd2.1.3 /etc/ssh/sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sftpd_config2.1.4 /usr/sbin/service
對sshd和sftpd進行軟連接
ln -sf /usr/sbin/service /usr/sbin/rcsftpd2.1.5 /usr/sbin/sshd
對sshd和sftpd進行軟連接
ln -sf /usr/sbin/sshd /usr/sbin/sftpd2.1.6 /etc/sysconfig/sshd
cp /etc/sysconfig/sshd /etc/sysconfig/sftp2.1.7 /var/run/sshd.pid
復制并清空
cp /var/run/sshd.pid /var/run/sftpd.pid > /var/run/sftpd.pid2.2 修改SFTP配置文件
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.2.2 /etc/ssh/sftpd_config
vim /etc/ssh/sftpd_config輸入:set nu
2.2.2.1 Port
找到第17行,將
Port 22改成
Port 22222.2.2.2 PermitRootLogin
找到第38行,將
#PermitRootLogin yes改成
PermitRootLogin no就是取消該行的注釋,并將yes改成no,這行參數的目的是拒絕root用戶登錄
2.2.2.3 PidFile
③找到116行,將
#PidFile /var/run/sshd.pid改成
PidFile /var/run/sftpd.pid就是取消該行的注釋,并將sshd.pid改成sftpd.pid
2.2.2.4 Subsystem
找到第132行,將
Subsystem sftp /usr/libexec/openssh/sftp-server注釋
#Subsystem sftp /usr/libexec/openssh/sftp-server并添以下6行 Subsystem sftp internal-sftp # 指定使用sftp服務使用系統自帶的internal-sftpMatch Group sftpusers # 匹配sftp組的用戶,若要匹配多個組,可用逗號分開X11Forwarding no # 禁止用戶使用端口轉發AllowTcpForwarding no # 禁止用戶使用端口轉發ForceCommand internal-sftp # 只能用于sftp登錄ChrootDirectory /home/sftp # 限制用戶的根目錄2.2.2.5 添加sftpusers用戶組并創建用戶目錄
groupadd sftpusers mkdir -p /home/sftp chown root:root /home/sftp chmod 755 /home/sftp mkdir -p /u01/scripts vim /u01/sftpuseradd.sh輸入以下內容
#! /bin/bash useradd -g sftpusers -d /home/sftp/$1 $1 chown $1:sftpusers /home/sftp/$1 # 文件所屬用戶讀寫執行,屬組用戶、其他用戶無權限 chmod 700 /home/sftp/$1 echo $2 | passwd --stdin $1增加執行權限,并添加用戶
chmod 755 /u01/sftpuseradd.sh # 第一個參數賬號,第二個參數密碼 sh /u01/sftpuseradd.sh sftpu xxxxxxxx sh /u01/sftpuseradd.sh sftpu2 xxxxxxxx3.啟動sftp服務
3.1 禁用SELINUX
setenforce 0sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config 若不設置,啟動sftp時將報錯,無法使用上面綁定的2222端口3.1 啟動服務
systemctl daemon-reload #使修改的sshd配置生效systemctl start sftpd #啟動sftp3.2 登錄驗證
不能訪問sftpu2用戶文件夾
上傳文件成功
4. 22端口禁止sftpusers用戶登錄(非必須)
4.1
編輯配置文件
vim /etc/ssh/sshd_config個性化配置
#禁止指定用戶登錄,多個用戶時用空格分隔 DenyUsers sftpu sftpu2 #禁止指定用戶組登錄,多個組時用空格分隔 DenyGroups sftpusers #只允許這兩個用戶從192.168.0.101登錄 AllowUsers sftpu sftpu2@192.168.0.101重啟sshd服務
systemctl restart sshd參考博文: link
參考博文: link
參考博文: link
總結
以上是生活随笔為你收集整理的SSH和SFTP服务分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 向日葵使用记录
- 下一篇: NAT、防火墙的原理区别和分类