Tech Racho エンジニアの「?」を「!」に。
  • インフラ

Ubuntuでjailkitを設定して、特定フォルダのSFTPだけを実行できるユーザを作る

Webサイトの更新を自分で行いたいお客様や、重いファイルをやりとりしたい時など、FTPを使いたいことはよくあります。

しかし、FTPは生パスワード・生データなので、さすがにインターネットに公開するのは気が引けます。
SCPやSFTPはセキュアですが、SSHアカウントを発行する必要があるので、そのままでは任意のディレクトリに移動して、ファイルを読んだりコマンドを実行したりできてしまいます。
→ たとえば、/var/www/hogeproject/config/database.yml には、DBのパスワードが書いてあるかもしれません!?

そこで、SSHのログインを禁止し、アクセスできるディレクトリも指定した場所のみにする方法が欲しいものです。

そこで登場するのがJailkit。
これは、chroot(特定ディレクトリを/として、それより上位にいけなくするシステムコール)の設定や、許可したプロセスのみ実行するような設定を、まとめて管理できるツールです。
(単純にchrootしただけでは、rootを取られた際に再度chrootして抜け出すことができてしまいます)

Ubuntu Server 10.04にて、jailkitをインストールし、WinSCPによるファイル転送のみ(SSHログイン禁止)のユーザを作るまでの手順をご紹介します。

インストール
Ubuntuのaptでは、jailkitのパッケージが見つかりませんでしたので、ソースから入れることにします。checkinstallを入れておくとより良いかもしれません。
[bash]
# rootで実行してください
aptitude install gcc
wget http://olivier.sessink.nl/jailkit/jailkit-2.14.tar.gz
tar xzvf jailkit-2.14.tar.gz
cd jailkit-2.14
./configure
make
make install
[/bash]

初期設定
[bash]
# jailごとにディレクトリを作ります。
# 例:
# /home/jail → SCP/SFTPのみ
# /home/jailssh → SCP/SFTPに加えてSSHもできる
mkdir /home/jail

# jailディレクトリを初期化します
# これはSCP/SFTPはできるけど、SSHログインはできない設定です
jk_init -v /home/jail basicshell ssh scp sftp jk_lsh
[/bash]
ここまでで、/home/jail以下にetcやvarなどのディレクトリができているはずです。

ユーザ作成
[bash]
# 対象ユーザを先に作ります
adduser peter

# 対象ユーザをjailに閉じ込めます
# -mでHOMEディレクトリを移動し、-jでjail先を指定します。
# jk_lshをjk_initで入れていないと、
# 「invalid shell. (...) enter jail directory」と怒られてしまいます。
jk_jailuser -m -j /home/jail peter
[/bash]
ここまでで、以下のようになっているはずです。
・/etc/passwdで、peterのshellが/usr/sbin/jk_chrootshになっている
・/home/jail/etc/passwdで、peterのshellがjk_lshになっている
・ssh peter@localhost すると、ログインしてもすぐにconnection closedになる
・scp peter@localhostすると、SCPできる

SFTPを許可
1つ前まででも事足りるのですが、これではWinSCPだとログインできません。
WinSCPでjk_lshを使ったSCPをしようとすると、shellが対応していないというエラーになります。そのため、SFTPの設定をします。

/home/jail/etc/jailkit/jk_lsh.iniに、以下の記述を追加します。
[text]
[peter]
paths = /usr/bin, /usr/lib/
executables = /usr/bin/scp, /usr/lib/sftp-server, /usr/lib/openssh/sftp-server, /usr/libexec/sftp-server
[/text]

WinSCPで接続
これで、WinSCPでも接続できるようになりました。
注意点として、接続方法で「SFTP」を選び、「SCP代替を許可」チェックボックスを外しておきましょう。

SFTPで接続する

WinSCPで見える/が、/home/jailになっているかどうか確認してみてください。

参考:
http://ubuntuforums.org/showthread.php?t=248724
http://olivier.sessink.nl/jailkit/howtos_sftp_scp_only.html
http://realtechtalk.com/jailkit_for_chroot_ssh_account_security_tutorial_and_fix_for_error-1017-articles


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。