ジェイルキットとジェイルシェル
制限付きシェルは、実際のシェルと非常によく似た外観に制限されたシェルのクラスですが、実際のファイルシステムのいかなる部分も閲覧・変更することは許可されていません。シェル内のファイルシステムは、基盤となるファイルシステムとは異なります。この機能は chroot や他の様々なプログラムによって実現されます。例えば、ユーザが「遊び回る」ための Linux シェルを作成したり、あるプログラムの全機能を制限された環境で実行したりすることができます。
この記事では、jailkitを使ってUbuntuで制限されたシェルを構築する方法を見ていきます。jailkitは、制限されたシェルを素早く構築し、制限されたユーザーをその中に入れ、制限された環境で実行されるプログラムを設定できるツールです。
Ubuntu/Debian上のjailkitのインストール
1.jaikitはシステム上でコンパイルする必要があるため、まずコンパイル用のツールが必要です。そこで、以下のパッケージをインストールします:
$ sudo apt-get install build-essential autoconf automake libtool flex bison debhelper binutils-gold 
2.以下のURLからJailkitをダウンロードするか、Jailkitのウェブサイトにアクセスして最新版をダウンロードしてください。
$ wget http://..nl/jailkit/jailkit-...gz 
3.減圧
$ tar -vxzf jailkit-2.16.tar.gz 
4.コンパイルとdebパッケージの作成
Jailkitには、DebianベースのLinuxに直接インストールできるdebパッケージにコンパイルするためのコードと設定がすでに含まれています。以下のコマンドを実行してください。
$ cd jailkit-2.16/ 
$ sudo ./debian/rules binary 
5.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 
Jailed Shellの設定
1.制限環境の設定
制限された環境のすべての設定を保持するディレクトリを作成する必要があります。ディレクトリはどこに置いてもかまいません。例えば、/opt/jailというディレクトリを作ることができます。
$ sudo mkdir /opt/jail 
このディレクトリはRootが所有する必要があります。所有者を変更するには chown を使用してください。
$ sudo chown root:root /opt/jail 
2.制限された環境で利用可能な手順の設定
制限された環境で実行したいプログラムは、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 
プログラム設定の完全なリストは /etc/jailkit/jk_init.ini にあります。
| jk_lsh - これは制限環境に追加しなければならない重要なパーツです。 | 
3.収監されるユーザーの作成
ユーザは、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の最後の部分は、このユーザーがログインしていれば、システム上で通常のシェルアクセスができることを示しています。
4.利用者の制限
ユーザーを制限する時が来ました
$ sudo jk_jailuser -m -j /opt/jail/ robber 
上記のコマンドを実行すると、ユーザー強盗が制限されます。
ここでもう一度/etc/passwdファイルを見ると、以下のような最終エントリーがあります。
robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh 
注意: 最後の2つの部分は、ユーザのホームディレクトリとシェルの種類が変更されたことを示しています。ユーザのホームディレクトリは /opt/jail (制限された環境) になりました。ユーザのシェルは jk_chrootsh という特別なプログラムで、 Jailed Shell を提供します。
jk_chrootsh これは特別なシェルで、システムにログオンするたびにユーザーを制限された環境にします。
今のところ、制限された設定はほぼ完了しています。しかし、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://..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. 
$ 
接続はすぐに閉じられるので、ユーザーはすでに制限されたシェルでアクティブになっていることになります。
5.刑務所のユーザーのためのBashシェル
次に重要なのは、制限された環境でユーザーに適切なbashシェルを与えることです。
以下のファイルを開いてください。
/opt/jail/etc/passwd 
これは、ジェイル内のパスワードファイルです。それは、以下と似ています
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 
ファイルを保存して終了します。
6.制限された環境へのログイン
では、再び制限された環境にログインしてみましょう。
$ ssh robber@localhost 
robber@localhost's password:  
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) 
 * Documentation:  https://..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:~$ 
制限された環境では、『私は名前がない!』と言われます。これで制限された環境でも完全に機能するbashシェルができました。
次に実際の環境を見てください。制限された環境のルートディレクトリは、実際のファイルシステムでは/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://..com/ 
同様のエラーメッセージが表示された場合
$ wget http://..com/ 
--2012-06-23 12:56:43--  http://..com/ 
Resolving www.google.com (www.google.com)... failed: Name or service not known. 
wget: unable to resolve host address `www.google.com' 
次の2つのコマンドを実行することで修正できます:
$ 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コマンドの詳細については、読むことができます。
via:
via:





