jailkitで制限ユーザーを作る(?)


勉強の一環として父親のホームページをさくらVPS上にphpでリプレイスした。
コンピューター関係のことをほとんど分からない人なので、
下手なところをいじられないように触れるディレクトリなどを制限する。

jailkit

インストールする

なんとなくtmpフォルダで実行しています。

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 
# yum install jailkit

jail用の安全な親ディレクトリを用意

# mkdir /jail
# jk_init -v /home/jail basicshell ssh scp sftp jk_lsh

ユーザー作成

# useradd username
# passwd username

鍵認証の設定

鍵の生成

作業用ユーザーでログイン後、公開鍵を保管するディレクトリを作成し、移動。

$ cd /home/username
$ mkdir .ssh/
$ cd .ssh/

キーを生成する。

$ ssh-keygen -t rsa

Enter file in which to save the key (/home/username/.ssh/id_rsa): (何も入力しないでENTER押下)
Enter passphrase (empty for no passphrase): (何も入力しないでENTER押下)
Enter same passphrase again: (何も入力しないでENTER押下)

公開鍵id_rsa.pubのファイル名をauthorized_keysへ変更する。

$ mv id_rsa.pub authorized_keys 

.sshディレクトリとauthorized_keysの権限を変更する。

$ cd /home/username/
$ chmod 700 .ssh/
$ chmod 600 .ssh/authorized_keys

秘密鍵をダウンロード

WinSCPなどを使いVPS上からid_rsaをダウンロード。

Puttyで変換してログイン

ダウンロードしたid_rsaはそのままではPuttyでは使用できないため、
PuTTYごった煮版で同梱されているPuTTYgenを使用し、Putty用の鍵に変更する。

  1. PuTTYgenで既存の秘密鍵の読込
  2. 鍵のパスフレーズ及びその確認を入力
  3. 秘密鍵の保存
  4. 接続 > SSH > 認証 > 認証のためのプライベートキーファイルを読み込み
  5. 保存し接続
  6. 2.で入力した鍵のパスフレーズを使用し認証、ログインできることを確認する

再びjailkit

sftp接続のみ出来るようにjailにユーザーを閉じ込める。

# jk_jailuser -j /jail/only_sftp/ username

sftp できるように設定

# vim /turbo/jail/only_sftp/etc/jailkit/jk_lsh.ini

上記ファイルを開き、以下の様に追記する。

jk_lsh.ini
[username]
paths= /usr/bin, /usr/libexec/
executables=/usr/bin/scp, /usr/libexec/openssh/sftp-server

WinSCPなどで秘密鍵を用い接続できることを確認したら成功。

特定のフォルダにリンクを貼りアクセスする

シンボリックリンクとは少し違うらしい?
仕組みはまだ理解していませんが、希望の機能の実現は出来ました。

リンクしたいディレクトリ:/var/www/html
jailの中でアクセスするリンク:/jail/only_sftp/home/username/html

# chmod -R 777 /var/www/html
# mkdir /jail/only_sftp/home/username/html
# chown username /jail/only_sftp/home/username/html
# mount --bind /var/www/html /jail/only_sftp/home/username/html

引っかかった箇所

  1. jk_lsh.inipathsにおいて、/usr/bin, /usr/lib/と書いていたが、動作せず。
    • 意味を理解はしていないが/usr/bin, /usr/libexec/とすることで解消。