在網災中明哲保身
使用rssh建置更安全的sftp/rsync伺服器

2010-08-25
一般的sftp/rsync伺服器若透過ssh會允許帳戶使用指令操作介面,亦即ssh登入使用指令介面,而且可以存取到整個根目錄下的樹狀結構。而rssh(restricted shell for use with ssh)可限制ssh客戶端只能以scp、sftp、cvs、rdist、rsync方式傳輸資料,但不能ssh進來使用指令介面。除此之外,rssh也提供chroot功能,這個功能與ftp伺服器chroot功能類似,限定客戶端在一個chroot環境下傳輸資料,看不到原本的根目錄樹狀結構。
這次的測試平台是CentOS 5.5 Xen子系統(DomU)x86_64環境,以下說明操作的細節。  

下載與安裝rssh  

先到官方網站下載軟體,然後編譯src.rpm(Source RPM)。  

下載rssh軟體  

連結至「http://dragontoe.org/rssh/」網頁,然後點選「download」連結。隨後,來到下載tarball/source RPM格式的頁面,點選「rssh 2.3.2 source RPM」(實際下載位址為「http://prdownloads.sourceforge.net/rssh/rssh-2.3.2-1.src.rpm?download」),下載「rssh-2.3.2-1.src.rpm」檔案。  

安裝rssh source RPM  

使用指令「rpm -ivh rssh-2.3.2-1.src.rpm」安裝時,卻出現一則「error: cannot create %sourcedir /usr/src/redhat/SOURCES」錯誤訊息。  

幸好,yum提供whatprovides功能,所以使用指令「yum whatprovides /usr/src/redhat/SOURCES」能指引出「/usr/src/redhat/SOURCES」是由rpm-build套件所提供。  

接著,先使用「yum install -y rpm-build」安裝所需的套件。

二度使用指令「rpm -ivh rssh-2.3.2-1.src.rpm」進行安裝,雖然出現一些警告訊息,但影響不大。然後,使用指令「rpm -qlp rssh-2.3.2-1.src.rpm」查出此套件包含兩個檔案,包括一個tarbal及一個spec檔案。執行指令「find /usr/src/redhat/」後發現,這兩個檔案被分別安裝到「SOURCES/」與「SPECS/」目錄下。  

編譯rssh程式  

先執行指令「cd /usr/src/redhat/SPECS/」切換到「SPECS/」目錄下,再使用指令「rpmbuild -bb rssh.spec」來編譯rssh程式。

若出現錯誤訊息:「configure: error: no acceptable C compiler found in $PATH」,則是因為gcc尚未安裝,使用指令「yum install -y gcc」補裝即可。  

使用指令「rpmbuild -bb rssh.spec」順利編譯rssh程式後,編好的套件會放在「RPMS」目錄下,依照不同CPU架構分門別類放置,以x86_64為例,則是放在目錄「/usr/src/redhat/RPMS/x86_64/」,檔名為「rssh-2.3.2-1.x86_64.rpm」。  

接著執行指令「rpm -ivh /usr/src/redhat/RPMS/x86_64/rssh-2.3.2-1.x86_64.rpm」將編譯好的程式安裝起來。

 

實作rssh:限制指令操控功能  

先前提到rssh主要有兩個功能:一個是只允許系統帳戶透過scp、sftp、cvs、rdist、rsync傳輸檔案與目錄,不允許使用指令操控介面;另一個則是chroot安全機制。 底下先來實作rssh限制指令操控功能。  

設定帳戶的介殼為rssh  

使用指令「useradd albert_hsu」建立測試帳號albert_hsu,接著輸入指令「passwd albert_hsu」設定密碼。隨後,使用指令「which rssh」找出rssh在Linux系統中的絕對路徑「/usr/bin/rssh」。  

最後,執行指令「chsh albert_hsu」將albert_hsu的介殼修改成「/usr/bin/rssh」。若使用指令「finger albert_hsu」,則可以觀察修改介殼後的使用者資訊。

使用ssh測試登入下指令功能 要被rssh限制住而無法使用

使用指令「ssh albert_hsu@localhost」後回答「yes」並正確密碼,將會得到下列訊息,然後就斷線了,因為rssh限制功能生效。  

This account is restricted by rssh. This user is locked out. If you believe this is in error, please contact your system administrator.  

設定「/etc/rssh.conf」允許特定的傳輸方式  

編輯「/etc/rssh.conf」設定要允許哪幾種傳輸方式,共有scp、sftp、cvs、rdist、rsync五種。例如,將allowsftp與allowrsync註解去掉,允許使用sftp與rsync功能。  

分別使用scp、sftp、rsync 客戶端程式測試  

之前在「/etc/rssh.conf」檔案中並未允許scp傳輸,所以測試「scp anaconda-ks.cfg albert_hsu@localhost:」時傳檔失敗。  

sftp傳輸正常,如下圖所示。先使用指令「sftp albert_hsu@localhost」連上伺服器後,再使用指令「put anaconda-ks.cfg」置放資料,隨後執行指令「quit」離開sftp客戶端。傳輸完成後,在伺服器上albert_hsu家目錄會看到傳上來的資料,帳戶albert_hsu的家目錄預設是「/home/albert_hsu/」。  

rsync傳輸正常,如下圖所示。使用指令「rsync -av albert_hsu@localhost:anaconda-ks.cfg a.cfg」將剛才傳到伺服器上的anaconda-ks.cfg傳回本地並命名為「a.cfg」。

(更多精采文章詳見網管人第55期)


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!