Linux安裝使用Jailkit來管理用戶shell操作的教程

受限shell(Jailed Shell)是一類被限制的shell,它看起來非常像真實的Shell,但是它不允許查看和修改真實的文件系統(tǒng)的任何部分。Shell內的文件系統(tǒng)不同于底層的文件系統(tǒng)。這種功能是通過chroot和其他多種程序實現的。舉例來說,給用戶建立一個linux shell去讓他“玩玩”,或者在一個限定的環(huán)境里運行一些程序的所有功能等等。
在這個教程里我們將會探討在Ubuntu下用jailkit建立一個受限shell。Jailkit是一個讓你快速建立一個受限shell的工具,將受限用戶放到里面,并配置那些要在受限制環(huán)境里運行的程序。
安裝jailkit
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz
tar xzf jailkit-2.16.tar.gz
cd jailkit-2.16
./configure
make
make install
cp extra/jailkit /etc/init.d/jailkit
chmod u+x /etc/init.d/jailkit
chkconfig jailkit on
初始化chroot環(huán)境
jk_init -v -j /home/chroot sftp scp jk_lsh netutils extendedshell
service jailkit start
配置Jailed Shell
配置受限環(huán)境:
我們需要建立一個目錄來存放所有受限環(huán)境的配置。目錄隨便放在什么地方,比如我們可以創(chuàng)建個/opt/jail的目錄。
$ sudo mkdir /opt/jail
這個目錄應為Root所有。用chown改變屬主。
$ sudo chown root:root /opt/jail
設置在受限環(huán)境中可用的程序
任何程序想要在受限環(huán)境中執(zhí)行則必須用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中的每個組都是可執(zhí)行文件、庫文件等的集合。比如basicshell就在jail提供有bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep等程序。
完整的程序列表設置,你可以在/etc/jailkit/jk_init.ini中查看。
jk_lsh (Jailkit limited shell) - 這是一個重要的部分,必須添加到受限環(huán)境中。
創(chuàng)建將被監(jiān)禁的用戶
需要將一個用戶放入jail里??梢韵葎?chuàng)建一個
$ 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
注意:目前創(chuàng)建的是一個在實際文件系統(tǒng)中的普通用戶,并沒有添加到受限環(huán)境中。
在下一步這個用戶會被放到受限環(huán)境里。
這時候如果你查看/etc/passwd文件,你會在文件最后看到跟下面差不多的一個條目。
robber:x:1006:1005:,,,:/home/robber:/bin/bash
這是我們新創(chuàng)建的用戶,最后部分的/bin/bash指示了這個用戶如果登入了那么它可以在系統(tǒng)上正常的Shell訪問
限制用戶
現在是時候將用戶限制
$ sudo jk_jailuser -m -j /opt/jail/ robber
執(zhí)行上列命令后,用戶robber將會被限制。
如果你現在再觀察/etc/passwd文件,會發(fā)現類似下面的最后條目。
robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh
注意:最后兩部分表明用戶主目錄和shell類型已經被改變了?,F在用戶的主目錄在/opt/jail(受限環(huán)境)中。用戶的Shell是一個名叫jk_chrootsh的特殊程序,會提供Jailed Shell。
jk_chrootsh這是個特殊的shell,每當用戶登入系統(tǒng)時,它都會將用戶放入受限環(huán)境中。
到目前為止受限配置已經幾乎完成了。但是如果你試圖用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中。
給在jail中的用戶Bash Shell
下個重要的事情是給用戶在限制環(huán)境中的一個正確的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
保存文件并退出。
登入限制環(huán)境
現在讓我們再次登入受限環(huán)境
$ 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:~$
受限環(huán)境說'I have no name!',哈哈?,F在我們在受限環(huán)境中有了個完整功能的bash shell。
現在看看實際的環(huán)境。受限環(huán)境中的根目錄實際就是真實文件系統(tǒng)中的/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
在限制環(huán)境中運行程序或服務
現在配置已經完成了??梢栽谙拗?安全的環(huán)境里運行程序或服務。要在限制環(huán)境中啟動一個程序或守護進程可以用jk_chrootlaunch命令。
$ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail
jk_chrootlaunch工具可以在限制環(huán)境中啟動一個特殊的進程同時指定用戶特權。如果守護進程啟動失敗,請檢查/var/log/syslog/錯誤信息。
在限制環(huán)境中運行程序之前,該程序必須已經用jk_cp命令復制到jail中。
相關文章
- 這篇文章主要介紹了Linux系統(tǒng)下jailkit的安裝與使用示例,包括用jailkit 建立受限的SSH帳戶的大概方法,需要的朋友可以參考下2015-08-10
- 這篇文章主要介紹了CentOS服務器端配置SSH遠程登陸的教程,通過運行OpenSSH server程序來使客戶端機器遠程登陸服務器,文中還講到了中文亂碼問題的解決方法,需要的朋友可以參2016-04-21
Linux中禁止root用戶SSH登錄及修改SSH端口的方法
這篇文章主要介紹了Linux中禁止root用戶SSH登錄及修改SSH端口的方法,在服務器安全維護過程中可以用到,需要的朋友可以參考下2016-03-15- 這篇文章主要介紹了安裝部署遠程連接軟件SSH的簡明教程,包括Linux系統(tǒng)的客戶端和服務器端的配置,簡明扼要,需要的朋友可以參考下2016-01-28
- 這篇文章主要介紹了Linux系統(tǒng)中SSH命令的使用教程,使用SSH軟件及SSH命令遠程連接服務器已經成為最普遍的運維連接方法之一,需要的朋友可以參考下2016-01-19
Linux下為不使用SSH的用戶提供SFTP服務環(huán)境
這篇文章主要介紹了Linux下為不使用SSH的用戶提供SFTP服務環(huán)境的方法,一般來說SFTP協(xié)議的使用大多在提供SSH的軟件內進行,而本文則介紹在非SSH環(huán)境下的方法,需要的朋友可以2016-01-14連接Linux的服務器時使用SSH密鑰認證及解決自動斷連問題
這篇文章主要介紹了連接Linux的服務器時使用SSH密鑰認證及解決自動斷連問題的方法,主要適用于利用putty等客戶端連接服務器的情況,需要的朋友可以參考下2015-11-21Linux系統(tǒng)下OpenSSH的安裝及基本配置文件詳解
這篇文章主要介紹了Linux系統(tǒng)下OpenSSH的安裝及基本配置文件詳解,這也是使用SSH協(xié)議連接服務器的最常用基礎配置,需要的朋友可以參考下2015-11-16Linux環(huán)境中遠程開啟ssh端口和更改ssh用戶根目錄
這篇文章主要介紹了Linux環(huán)境中遠程開啟ssh端口和更改ssh用戶根目錄的方法,其中更改ssh用戶根目錄使用到了jailkit chroot軟件,需要的朋友可以參考下2015-11-10- 這篇文章主要介紹了SSH登錄Linux服務器慢或者登陸錯誤的解決方法分享,作者同時也對比了Debian和CentOS上各自出現問題的情況,需要的朋友可以參考下2015-09-22