「ウチとA社、ウチとB社、A社とB社は干渉させないでSFTPでファイルのやり取りをしたい」と言った用件が来た。
単純に所有グループ分けで、パーミッション770とかにしても、WinSCPとかで接続されると「どんなデータが存在するか?」が見えてしまう。
今回はそれすらさせたくないらしい。
んで、いろいろぐぐってみると、chrootを使用するのがあった。
openssh4.8まではパッチを当ててchrootを行なう必要があったらしいが、openssh4.9からは標準で組み込まれたみたい。
使っているCentOS5.2はopensshのバージョンは5.1なので、いけそう♪
以下、やり方。
1.yumでrsshをインストールする。
# yum -y install rssh
2.rsshのソースファイルの中にある、chroot作成の際のスクリプトを使うので、wgetなりでrsshをダウンロードする。
※chroot作成用のスクリプト以外は使用しないので、以下にrssh-2.3.0のスクリプトだけを置いておきます。
3.上記のmkchroot.shの引数に、chrootで作成したいディレクトリを指定して実行する。
# ./mkchroot.sh /var/chroot/home1
4.chroot作成用のスクリプトは、homeディレクトリが作成されないので、手動で作成する。
# mkdir /var/chroot/home1/home
5.chrootを使用するユーザを作成する。ホームディレクトリと合わせて、シェルをrsshに指定する。
# useradd -d /var/chroot/home1/home/user -s /usr/bin/rssh user
# passwd user
6./etc/passwdファイルに追加されたchrootユーザーの情報を、chrootディレクトリ内のetc/passwdファイルにコピーする。
7./etc/rssh.confを修正し、「allowsftp」の行のみコメントを外す。 ※scpやrsyncはコメントアウトのまま。
8.sshd_configを修正し、chroot用のディレクトリを作成する。
Subsystem sftp internal-sftp
Match Group home1
PasswordAuthentication yes
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /var/chroot/home1
9.sshdを再起動して終了
これで、SFTPのみしか利用できない、不要なファイルを閲覧できないユーザーが作成された。
そもそもの要件である、「受け渡し」は、同様の手順で同じグループに所属するchrootユーザーを追加すれば良い。