Linuxで特定のコマンド以外実行できないようなユーザのためのchroot環境を作るメモです。
外部ユーザ等に対してサービスを提供する際にLinux等でログインを許すことはセキュリティ的にかなりなリスクを冒すことになります。実行できるコマンドによってはLAN内にも侵入でき、例え悪意が無くとも不用意に思いがけないファイルへのアクセスを許したりしてしまいます。
最近では仮想化で簡単に比較的安全な箱庭が作れますが、根本的にサーバを丸ごと使うことになるので制限としてはもうひとつですし、なによりリソースを食い管理の手間も単純に倍になることになります。
伝統的なchroot環境は以降のファイルアクセスを特定ディレクトリ以下に制限してしまうことで、コマンドやユーザのアクセス出来る範囲を制限するもので、これである程度ユーザのコマンドやアクセス出来る範囲を制限できます。
この方法だと動作も軽く、容量も食わず、sftpやsvnのみ実行可能なんていうかなりいい感じの環境を構築できる訳です。もちろんchrootも破れたりしますので100%安全というわけでもありませんが、少なくとも比較的ライトなサービス提供のためにユーザにシステム全体へのアクセスを許さないようには簡単にできます。
が、chroot環境っていうのがまず面倒。親環境のアップデートへの対応も面倒。コマンドの制限はそもそも入れないということで対処できるもののさらに細かい制御は不可能。
というお悩みを一気に解決してくれたのがこのJailKitです。
そんなに新しいソフトではないのですが、便利な割に日本で紹介がないみたいですね。
使い方は簡単でドキュメントをチラ見するだけでOKな感じで解説するまでもないのですが。。。
- 基本
Jail(上のような制限された環境)を作成。特定ユーザがログインするとそこにchrootして閉じ込めてしまう。
- 準備
fedoraなどで/sbin, /usr/sbinにパスが通っていないとエラーになるので通す
export PATH=/sbin:/usr/sbin:$PATH
- jailの作成(sftp/scp/svnだけの環境を作る例)
- グループなどからの書き込み権限のない安全な親ディレクトリを用意する
sudo mkdir /jail
sudo chown root.root /jail
sudo chmod 755 /jail - jailを作成
jk_init -v -j /jail/hoge sftp scp svn jk_lsh - 権限関係のエラーが出る場合 -- 適当になおす
- ld.so.confが無いとか言われる場合/etc/ld.so.confを<jail>/etc/にコピー
- グループなどからの書き込み権限のない安全な親ディレクトリを用意する
- 特定ユーザをjailに閉じ込める
- ユーザが既に存在していないと行けないので必要なら追加
sudo adduser testuser - その人をjailに入れる
sudo sudo jk_jailuser -m -j /home/hoge testuser
- ユーザが既に存在していないと行けないので必要なら追加
- ユーザにコマンドの実行権限を与えてあげる
/home/hoge/etc/jailkit/jk_lsh.iniファイルを開いて以下のような感じでコマンドの設定を追加する
[testuser]
paths= /usr/bin, /usr/lib/
executables= /usr/bin/scp, /usr/lib/sftp-server
- ログインしてみる
- 普通にログイン。直ぐに蹴られる -- OK
- sftpで入る -- OK
- svnしてみるetc
以上でsftp/scp/svnだけできるユーザのできあがり。svnの場合は管理作業は通常のユーザでchroot外で行えば楽。