例えば誰かにサーバにアクセス権を与えて、そこにファイルをアップロードしてもらったり、そこからファイルをダウンロードしてもらったりしたい場合がある。この場合、アクセス制限を行わないと、ルートディレクトリ / にアクセスされてしまうことがある。このサーバに公開したくないファイルが存在する場合、公開をためらってしまう。
このようなときは単純には FTP を利用し、設定ファイルにて DocumentRoot をユーザのホームディレクトリに設定すれば、ホームディレクトリ以上にアクセスされることはなく、ファイルの共有が可能になるが、FTP では暗号化が行われないため、不安が残る。
SFTP や SCP の運用を検討するが、これらは SSH 上で実行される。しかし、下手に SSH によるログインを許してしまうと、先に述べたとおり全てのファイルへのアクセス権が発生してしまう。そこでグループによる管理を検討するが、それでは誰がどのファイルを実行できるのかの見通しが悪くなってしまう。
そこで、必要外のファイルにアクセスできない環境を作る考えとして jail という概念がある。この意味は監獄であり、例えば iPhone において jailed break (脱獄)という言葉が記憶に新しい。jail 環境を実現する方法として openssh にパッチを当てる方法とログインシェルを独自のものにすることで実現する jailkit というものがある。
今回は jailkit を利用して Ubunut 上に jailed な ssh 環境を実現した。How to chroot ssh users using Jailkitのフォーラム記事を参考にした。
この記事中に sudo make install する箇所があるが作法としては checkinstall をインストールしておき sudo checkinstall とした方が後々に更新がしやすい。
jailed な環境下にどれだけの操作を許すのか設定することが可能だ。今回の自分の目的では、sftp, scp が利用できれば十分だったので、
sudo jk_init -v /jail basicshell
sudo jk_init -v /jail ssh
sudo jk_init -v /jail sftp
sudo jk_init -v /jail scp
とした。
さらに samba で [homes] の設定を行うことにより、samba (LANネットワーク内)と sftp (インターネットから)による両輪のアクセス制御を行うことができる。これによってファイル管理の運用が楽になった。