Linux SSH和SFTP服務分離


原理:

創建兩個‘sshd’進程,一個作為ssh服務的deamon,一個作為sftp服務的deamon.

ssh服務和sftp服務分離之前:

系統內開啟ssh服務和sftp服務都是通過/usr/sbin/sshd這個后台程序監聽22端口,而sftp服務作為一個子服務,是通過/etc/ssh/sshd_config配置文件中的Subsystem實現的,如果沒有配置Subsystem參數,則系統是不能sftp訪問的

實現ssh服務和sftp服務分離:

1.兩個deamon

要實現ssh和sftp分離,分別監聽不同的端口,可以通過創建兩個‘/usr/sbin/sshd’后台程序,一個監聽22端口(ssh),一個監聽20022端口(sftp),為了區分ssh和sftp服務的后台程序,這里將ssh服務的后台程序保持為/usr/sbin/sshd,而將sftp服務的后台程序改為/usr/sbin/sftpd。/usr/sbin/sftpd是/usr/sbin/sshd的一個鏈接,其內容完全相同(ln -sf /usr/sbin/sshd /usr/sbin/sftpd)。

2.兩個service

SLES12使用systemd管理系統服務,ssh服務對應/usr/lib/systemd/system/sshd.service文件,實現sftp服務時可以將/usr/lib/systemd/system/sshd.service 復制到 /etc/systemd/system/sftpd.service,然后修改sftpd.service文件內容。(使用修改好的sftpd.service文件即可)

3.其他文件
系統的ssh服務是通過安裝openssh實現的,可以通過rpm -ql openssh查看該rpm包含哪些文件。

總結實現ssh和sftp分離的相關的文件有:

ssh服務 sftp服務
/usr/lib/systemd/system/sshd.service /etc/systemd/system/sftpd.service 
(通過修改/usr/lib/systemd/system/sshd.service文件得到)
/etc/pam.d/sshd /etc/pam.d/sftpd (通過復制 /etc/pam.d/sshd文件得到)
/etc/ssh/sshd_config /etc/ssh/sftpd_config (通過復制/etc/ssh/sshd_config文件得到)
/usr/sbin/rcsshd /usr/sbin/rcsftpd (ln -sf /usr/sbin/service /usr/sbin/rcsftpd)
/usr/sbin/sshd /usr/sbin/sftpd (ln -sf /usr/sbin/sshd /usr/sbin/sftpd)
/etc/sysconfig/ssh /etc/sysconfig/sftp (通過修改/etc/sysconfig/ssh文件得到)

至此,我們已經實現了兩個服務。

但是,ssh服務和sftp服務並沒有真正的分離,此時已然可以通過22號端口使用ssh服務和sftp服務,而新開的20022端口也可以使用ssh服務(ssh -p 20022 username@serverip )和sftp服務(sftp -o Port=20022 username@serverip )。

4.關閉22號端口下的sftp服務
編輯/usr/sbin/sshd的配置文件/etc/ssh/sshd_config文件,將Subsystem參數注釋掉,然后重啟sshd
同時也可以設置可訪問22號端口的用戶白名單:
編輯/etc/ssh/sshd_config文件,設置AllowGroups參數(假設設置為AllowGroups sshonly),限制僅AllowGroups組內的用戶可通過22號端口ssh登錄系統(對於需要ssh登錄系統的用戶可通過usermod -A sshonly <username>將其加入到AllowGroups組內)

5.“關閉20022號端口下的ssh服務”
sftp作為一個子服務,它的開啟依賴於ssh服務,因此不能從本質上關閉ssh服務而只開啟sftp服務。
可以用以下方式來規避:
/usr/sbin/sftpd的配置文件/etc/ssh/sftpd_config中包含Subsystem參數配置(推薦使用Subsystem sftp internal-sftp -l INFO -f AUTH
/etc/ssh/sftpd_config中包含AllowGroups參數(假設為AllowGroups sftponly),限制僅AllowGroups組內的用戶可以訪問20022端口
將AllowGroups組內的用戶的shell改為/bin/false(usermod -s /bin/false <username>),使AllowGroups組內的用戶僅能sftp登錄系統(如果一個用戶即需要ssh,又需要sftp,則不能將其shell改為/bin/false)

6.用戶白名單配置
配置之后,需將系統內需要ssh訪問系統的用戶加入到sshonly組內,需將系統內需要sftp訪問系統的用戶加入到sftponly組,同時需要ssh和sftp的用戶則sshonly和sftponly組都要加入。

7. 重啟ssh服務和sftp服務,並設置開機啟動

service sshd restart
service sftpd restart


訪問ssh服務可使用:ssh username@serverip

分離后如何訪問ssh/sftp

對於同時是sshonly組和sftponly組的成員的用戶還可以使用
ssh -o Port=20022 username@serverip訪問系統
訪問sftp服務可使用:sftp -o Port=20022 username@serverip

附件sshsftpseparate_sles12.tar.gz使用說明:
將sshsftpseparate_sles12.tar.gz上傳到服務器(需實現ssh和sftp分離的機器)上
解壓:tar -xzvf sshsftpseparate_sles12.tar.gz
進入sshsftpseparate目錄,編輯sshusers,sftpusers,sshsftpusers文件,將僅需要ssh的用戶添加到sshusers文件中(每行一個),將僅需要sftp的用戶添加到sftpusers文件中(每行一個),將既需要ssh又需要sftp的用戶添加到sshsftpusers文件中(每行一個)。
最后執行一下set.sh腳本即可
sshsftpseparate目錄下文件說明:
set.sh 完成ssh和sftp分離的自動化腳本
sftp /etc/sysconfig/sftp配置文件
sftpd.service /etc/system/system/sftpd.service文件
sftpd_config sftpd服務配置文件/etc/ssh/sftpd_config(可修改,包括sftp監聽的20022端口等)
sftpusers 配置僅需要sftp的用戶名單
sshusers 配置僅需要ssh的用戶名單
sshsftpuser 配置既需要ssh又需要sftp的用戶名單


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM