Linux中國

在Ubuntu下用jailkit建立一個受限Shell

在這個教程里我們將會探討在Ubuntu下用jailkit建立一個受限shell。Jailkit是一個讓你快速建立一個受限shell的工具,將受限用戶放到裡面,並配置那些要在受限制環境里運行的程序。

Jailkit 從這裡下載:http://olivier.sessink.nl/jailkit/

Ubuntu/Debian 上安裝 jailkit

  1. 因為jaikit需要在系統上編譯,首先,我們需要有用於編譯的那些工具。所以,安裝如下包:
$ sudo apt-get install build-essential autoconf automake libtool flex bison debhelper binutils-gold
  1. 從下述URL下載Jailkit,或者訪問它的網站以下載最新版本的,如果有了更新版本的話。http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz
$ wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz
  1. 解壓
$ tar -vxzf jailkit-2.16.tar.gz
  1. 編譯並創建deb軟體包

Jailkit已經包含了用於編譯成deb軟體包的代碼和配置,可以直接安裝在Debian系的Linux上。運行下列命令來完成它。

$ cd jailkit-2.16/
$ sudo ./debian/rules binary
  1. 安裝deb軟體包

上述命令創建的deb軟體包叫做: jailkit2.16-1amd64.deb.

$ cd ..
$ sudo dpkg -i jailkit_2.16-1_amd64.deb

就是這樣,現在Jailkit已經安裝完成了。Jailkit有許多命令可以用來設置一個基於chroot的受限環境,如下是這些命令:

$ jk_
jk_addjailuser   jk_chrootlaunch  jk_cp            jk_jailuser      jk_lsh           jk_uchroot       
jk_check         jk_chrootsh      jk_init          jk_list          jk_socketd       jk_update

上述命令都有man幫助信息,如果你使用它們時,可以參考。

配置Jailed Shell

  1. 配置受限環境

我們需要建立一個目錄來存放所有受限環境的配置。目錄隨便放在什麼地方,比如我們可以創建個/opt/jail的目錄。

$ sudo mkdir /opt/jail

這個目錄應為Root所有。用chown改變屬主。

$ sudo chown root:root /opt/jail
  1. 設置在受限環境中可用的程序

任何程序想要在受限環境中執行則必須用jk_init命令拷貝到目錄中。

例如:

$ sudo jk_init -v /jail basicshell 
$ sudo jk_init -v /jail editors 
$ sudo jk_init -v /jail extendedshell 
$ sudo jk_init -v /jail netutils 
$ sudo jk_init -v /jail ssh 
$ sudo jk_init -v /jail sftp
$ sudo jk_init -v /jail jk_lsh

或一次性解決:

$ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp

像basicshell, editors, netutils是一些組名,其中包含多個程序。複製到jail shell中的每個組都是可執行文件、庫文件等的集合。比如basicshell就在jail提供有bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep等程序。

完整的程序列表設置,你可以在/etc/jailkit/jk_init.ini中查看。

jk_lsh (Jailkit limited shell) - 這是一個重要的部分,必須添加到受限環境中。

  1. 創建將被監禁的用戶

需要將一個用戶放入jail里。可以先創建一個

$ sudo adduser robber
Adding user `robber' ...
Adding new group `robber' (1005) ...
Adding new user `robber' (1006) with group `robber' ...
Creating home directory `/home/robber' ...
Copying files from `/etc/skel' ...  
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for robber
Enter the new value, or press ENTER for the default
    Full Name []: 
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] y

注意:目前創建的是一個在實際文件系統中的普通用戶,並沒有添加到受限環境中。

在下一步這個用戶會被放到受限環境里。

這時候如果你查看/etc/passwd文件,你會在文件最後看到跟下面差不多的一個條目。

robber:x:1006:1005:,,,:/home/robber:/bin/bash

這是我們新創建的用戶,最後部分的/bin/bash指示了這個用戶如果登入了那麼它可以在系統上正常的Shell訪問

  1. 限制用戶

現在是時候將用戶限制

$ sudo jk_jailuser -m -j /opt/jail/ robber

執行上列命令後,用戶robber將會被限制。

如果你現在再觀察/etc/passwd文件,會發現類似下面的最後條目。

robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh

注意:最後兩部分表明用戶主目錄和shell類型已經被改變了。現在用戶的主目錄在/opt/jail(受限環境)中。用戶的Shell是一個名叫jk_chrootsh的特殊程序,會提供Jailed Shell

jk_chrootsh這是個特殊的shell,每當用戶登入系統時,它都會將用戶放入受限環境中。

到目前為止受限配置已經幾乎完成了。但是如果你試圖用ssh連接,那麼註定會失敗,像這樣:

$ ssh robber@localhost
robber@localhost's password: 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64)
* Documentation:  https://help.ubuntu.com/
13 packages can be updated.
0 updates are security updates.
*** /dev/sda7 will be checked for errors at next reboot ***
*** /dev/sda8 will be checked for errors at next reboot ***
Last login: Sat Jun 23 12:45:13 2012 from localhost
Connection to localhost closed.
$

連接會立馬關閉,這意味著用戶已經活動在一個受限制的shell中。

  1. 給在jail中的用戶Bash Shell

下個重要的事情是給用戶在限制環境中的一個正確的bash shell。

打開下面的文件

/opt/jail/etc/passwd

這是個jail中的password文件。類似如下

root:x:0:0:root:/root:/bin/bash
robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh

將/usr/sbin/jk_lsh改為/bin/bash

root:x:0:0:root:/root:/bin/bash
robber:x:1006:1005:,,,:/home/robber:/bin/bash

保存文件並退出。

  1. 登入限制環境

現在讓我們再次登入受限環境

$ ssh robber@localhost
robber@localhost's password: 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64)
 * Documentation:  https://help.ubuntu.com/
13 packages can be updated.
0 updates are security updates.
*** /dev/sda7 will be checked for errors at next reboot ***
*** /dev/sda8 will be checked for errors at next reboot ***
Last login: Sat Jun 23 12:46:01 2012 from localhost
bash: groups: command not found
I have no name!@desktop:~$

受限環境說'I have no name!',哈哈。現在我們在受限環境中有了個完整功能的bash shell。

現在看看實際的環境。受限環境中的根目錄實際就是真實文件系統中的/opt/jail。但這隻有我們自己知道,受限用戶並不知情。

I have no name!@desktop:~$ cd /
I have no name!@desktop:/$ ls
bin  dev  etc  home  lib  lib64  run  usr  var
I have no name!@desktop:/$

也只有我們通過jk_cp拷貝到jail中的命令能使用。

如果登入失敗,請檢查一下/var/log/auth.log的錯誤信息。

現在嘗試運行一些網路命令,類似wget的命令。

$ wget http://www.google.com/

如果你獲得類似的錯誤提示:

$ wget http://www.google.com/
--2012-06-23 12:56:43--  http://www.google.com/
Resolving www.google.com (www.google.com)... failed: Name or service not known.
wget: unable to resolve host address `www.google.com'

你可以通過運行下列兩條命令來解決這個問題:

$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_files.so.2
$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_dns.so.2

這樣才能正確的定位到libnssfiles.so和libnssdns.so

在限制環境中運行程序或服務

現在配置已經完成了。可以在限制/安全的環境里運行程序或服務。要在限制環境中啟動一個程序或守護進程可以用jk_chrootlaunch命令。

$ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail

jk_chrootlaunch工具可以在限制環境中啟動一個特殊的進程同時指定用戶特權。如果守護進程啟動失敗,請檢查/var/log/syslog/錯誤信息。

在限制環境中運行程序之前,該程序必須已經用jk_cp命令複製到jail中。

jk_cp - 將文件包括許可權信息和庫文件複製到jail的工具 

進一步閱讀有關其他jailkit命令信息,可以閱讀文檔,http://olivier.sessink.nl/jailkit/

via: http://www.binarytides.com/install-jailkit-ubuntu-debian/

via: http://www.binarytides.com/setup-jailed-shell-jailkit-ubuntu/

譯者:Luoxcat 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國