Cd Chen's Services

ba ba ba la~~

OpenSSH + chroot

今天找到一個好玩的東西:Jailkit

Jailkit 是一組 chroot-wrapper 的 toolkit,也就是可以讓一堆東西在 chroot 環境中執行,不錯用。

這篇文章發佈之後,陸續接到許多朋友詢問,如何使用 Jailkit。為了統一說明,所以特別上來更新一次,補上 Jailkit 使用方法。

SSH 真是一個很好用的技術/工具,它可以把傳輸的資料進行加密,提高資料傳輸的安全性。這幾年來資安工作頗受重視的情況下,SSH 很快的就成為 Linux/Unix 系統間的主流。然而目前大部份 Linux Distribution 搭載的都是 OpenSSH,而 OpenSSH 又欠缺 chroot 的功能,這使的許多愛上 SSH 的朋友難免有所遺憾。

經過爬文後發現,在 OpenSSH 補上 chroot 機制之前,目前若打算給 OpenSSH 加上 chroot 功能,方法通常有二:

  • 上補丁:取得 3rd-Party 開發者提供的 chroot 補丁,上了之後 OpenSSH 就彷彿加上神力,便可以提供 chroot 神技。這種方案比較著名的有:
  • 加外掛:修改使用者帳號之 Shell 設定,以便在使用者登入後,執行外掛提供的 Shell,強迫使用者登入後改走 chroot 模式。這領域中最有名的,便是 Jailkit 了。

這兩種方案中,各有其利弊,而我比較喜歡後者。長期以來,我不太喜歡也不鼓勵 patch 系統商提供的軟體,這是著眼於系統穩定性與軟體升級管理的考量。所以,最後我選擇使用 Jailkit 來補強 OpenSSH。選外掛還有個好處,假若未來 OpenSSH 官方補上了 chroot 機制後,還可以隨時將其移除,便可使用原廠提供的功能。

編譯與安裝

但由於 RHEL/Fedora 中並未內建 Jailkit,所以得自己安裝。Jailkit 安裝非常的方便,以最新的 2.5 版為例:

備妥源碼


[root@linux src]# wget 'http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.bz2'
[root@linux src]# tar xjf jailkit-2.5.tar.bz2
[root@linux src]# chown -R 0:0 jailkit-2.5
[root@linux src]# ls -l jailkit-2.5
total 300
-rwxr-xr-x 1 root root 165123 2007-12-07 20:53 configure
-rw-r--r-- 1 root root   4364 2007-12-07 20:53 configure.ac
-rw-r--r-- 1 root root  25627 2007-12-07 20:53 COPYRIGHT
drwxr-xr-x 2 root root   4096 2007-12-07 20:58 debian
drwxr-xr-x 2 root root   4096 2007-12-07 20:58 extra
drwxr-xr-x 2 root root   4096 2007-12-07 20:58 ini
-rwxr-xr-x 1 root root   5584 2003-12-09 21:17 install-sh
-rw-r--r-- 1 root root    421 2007-12-07 20:53 INSTALL.txt
-rw-r--r-- 1 root root   3125 2007-11-08 06:32 Makefile.in
drwxr-xr-x 2 root root   4096 2007-12-07 20:58 man
drwxr-xr-x 2 root root   4096 2007-12-07 20:58 py
-rw-r--r-- 1 root root   1762 2007-12-07 20:53 README.txt
drwxr-xr-x 2 root root   4096 2007-12-07 20:58 src
[root@linux src]#

設定與編譯


[root@linux src]# cd jailkit-2.5/
[root@linux src]# ./configure && make
...

這個步驟我全部採用預設值進行編譯,當然,如果你不滿意預設值,你也可以自己調整。

安裝

由於 Jailkit 2.5 提供的預設組態在 RHEL/Fedora 中會有水土不符的情況,所以請略做調整。調整後直接安裝即可。


[root@linux jailkit-2.5]# cat -n ini/jk_init.ini | grep 'ld.so.conf'
     6  #regularfiles = /etc/nsswitch.conf /etc/ld.so.conf # 錯誤的,下列的才正確
     7  regularfiles = /etc/nsswitch.conf, /etc/ld.so.conf, /etc/ld.so.conf.d
   134  #regularfiles = /usr/X11R6/lib/X11/rgb.txt /etc/ld.so.conf # 錯誤的,下列的才正確
   135  regularfiles = /usr/X11R6/lib/X11/rgb.txt, /etc/ld.so.conf, /etc/ld.so.conf.d
[root@linux jailkit-2.5]# make install

建置

至於建置 Jailkit 環境的步驟,會與你的需求有關,不同的需求會有不同的建置步驟。以下僅以 SFTP/SCP 為例,至於其他的應用範例,請參閱 Jailkit 官網。

建立狗籠

你得先建立一個目錄,以便作為 chroot 的環境 (狗籠??):


[root@linux jailkit-2.5]# cd /home
[root@linux home]# mkdir chrooted
[root@linux home]# chown 0:0 chrooted
[root@linux home]# chmod 755 chrooted/
[root@linux home]# jk_init -j chrooted/ sftp scp jk_lsh
[root@linux home]# ls chrooted/
dev/  etc/  lib/  usr/
[root@linux home]#

轉換使用者帳號

接著把要跑在上述狗籠環境的使用者帳號轉過來吧!!


[root@linux home]# jk_jailuser -j chrooted/ tester
home directory /users/tester is not within /root/home/chrooted/, move the directory contents?
[Y]/[n] y
[root@linux home]# ls chrooted/
dev  etc  lib  users  usr
[root@linux home]# ls chrooted/
[root@linux home]# getent passwd | grep tester
tester:x:507:508::/root/home/chrooted/./users/tester:/usr/sbin/jk_chrootsh
[root@linux home]# grep tester chrooted/etc/passwd
tester:x:507:508::/users/tester:/usr/sbin/jk_lsh
[root@linux home]#

授權

最後在 chrooted/etc/jk_lsh.ini 中,加入下列設定值:

[tester]
paths= /usr/libexec/openssh
executables= /usr/libexec/openssh/sftp-server
allow_word_expansion = 0
umask = 002

這樣就大功告成了!!

結論

這裡僅提供簡潔的說明與示範,至於詳細的組態步驟,還是請自己到 Jailkit 官方網站上去啃啃文章吧!!

聲明

上述的實作已在我的系統上測試過可行,如果您實作上面的動作而導致任何損失,與作者無關。

這篇內容的 Trackback 網址:

http://www.cdchen.idv.tw/trackback/435