sftpでchrootする

 2014-05-05
複数の人とデータをやりとりする際の置き場所としてsftpを使うことがあるのですが
そのままでは行動範囲が広すぎてしまうのでchrootして余計な場所に出ないようにします。
 

chroot環境ってなあに

たとえは、hogeユーザでsftpするとデフォルトでは/home/hogeに行きますが任意にさらに上の階層(たとえば/etcとか)にも行けます。ディレクトリやファイルにどういう権限がついているかにもよりますが。
細かく制御するのはaclを使えば出来なくもないのですが、面倒。なのでchrootをします。

chroot環境では、hogeユーザでsftpすると、見かけ上 / に行きます。ここより上は当然行けません。
そこは実際には /home/hoge なのです。こうすることで、hogeユーザは、/home/hogeから抜け出ることは出来ません。 それがおおざっぱなchroot環境。

sshdの設定


以前はいろいろディレクトリをコピーしたり云々面倒でしたが、最近のsshdは賢いので簡単にchrootの環境を作れます。
まず/etc/ssh/sshd_configに下記のような設定を追加します。
Subsystem   sftp        internal-sftp

Match Group sftponly
PasswordAuthentication yes
AllowAgentForwarding no
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp
これはだいたい下記のような感じです。
  • sftpにはsshdの内部モジュールを使用する
  • sftponlyグループに属する場合は下記の設定とする
    • パスワード認証を行う
    • フォワーディングは無効
    • homeディレクトリにchrootする
    • sftpにはsshdの内部モジュールを使用する(念のためのおまじない)

sftponlyグループというのは任意のグループ名で良いです。また、homeディレクトリではなく特定のpathに固定することも出来ます。ほかは、適当に調べてください。

アカウントの準備とディレクトリの設定


sftponlyグループに所属するユーザを作成する。既存のユーザがあるならば、sftponlyグループに所属させる。
useradd -s /sbin/nologin hoge
usermod -g sftponly hoge

次に、hogeユーザのhomeディレクトリのオーナーと権限を変更する。これはchrootする際に必須となる。
chown root:root /home/hoge
chmod 755 /home/hoge


これで、chrootされたユーザはhomeディレクトリより上には行けなくなり、homeディレクトリは書き込み権限がついていないため何も書けない。という状態になる。
必要なディレクトリやファイルをあらかじめ作成し、適宜chownとchmodで読み書き権限を付与する。

一部のディレクトリツリーをchroot環境内に組み込む


chroot環境で、homeディレクトリ以外の共用領域を読み書きさせたい場合は、bind-mountを使うと楽。
bind-mountはすでにマウントされているディレクトリを、任意のツリーに再マウントさせることができる。ディレクトリのハードリンクのようなもの。
(chroot環境でsymlinkはおそらく期待する動作はしないです。)

/etc/fstabに下記のように記述すると起動時にマウントされる。
/mnt/DATA/samba/public/hoge_data       /home/hoge/data   none bind 0 0
/mnt/DATA/samba/public/foovar/section3 /home/hoge/bumon3 none bind 0 0
/mnt/DATA/samba/public/backup /home/hoge/copy none bind 0 0

 
 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/162-07b87206
≪ トップページへこのページの先頭へ  ≫