開発環境サーバを構築した
ソースファイル更新をSFTPでアップロードして行う開発環境サーバを構築しました。
「SFTPのアカウントを渡す=SSHアカウントを渡す」なので、渡すのがsudoerユーザじゃないにしろ、
適当にuseraddして使わせるのはセキュアじゃないなと思いました。
よりセキュアに、できる事を絞ったユーザを作る方法を調べました。
目標
ファイルのアップデートしかできないSSHユーザを作成する
実装
SSHログインと操作可能ディレクトリを絞る
そもそも、SSHログイン自体ができなくなれば大体の事ができなくなるので絞ります。
# Subsystem sftp /usr/libexec/openssh/sftp-server #コメントアウト Subsystem sftp internal-sftp # 追加 Match User contents ChrootDirectory /home/%u ForceCommand internal-sftp
今回の対象となるユーザ contents に対して制限をかける記述です。
ChrootDirectory /home/%u
- ホームディレクトリ
/home/contents
以下に閉じ込める
- ホームディレクトリ
ForceCommand internal-sftp
- SSHを禁止しSFTPのログインのみを受け付ける
で、 service sshd reload
でSSHの再起動
権限系の設定
これを
drwx------ 3 contents contents 4096 8月 19 15:57 2015 contents
こうじゃ
# chown root: /home/contents # chmod 755 /home/contents # ls -la /home/ 合計 20 drwxr-xr-x. 5 root root 4096 8月 18 12:15 2015 . dr-xr-xr-x. 23 root root 4096 8月 14 14:57 2015 .. drwxr-xr-x 3 root root 4096 8月 19 15:57 2015 contents
( ^ω^)
⊃ .. ⊂
‘∵
‘:’;
シンボリックリンク貼ろうとしたら失敗した
経緯
/var/www/html がドキュメントルートなのに、
/home/contents 以下に出られないよう設定したユーザなので、
ドキュメントルートをいじれない。
そこでシンボリックリンクだ!
という事でやってみたが、失敗しました。
調査
シンボリックリンクは、chrootの上位ディレクトリを参照する事ができません。
シンボリックリンクの正体はショートカットであって、
内部処理的には普通に /var/www/html を見に行くようです。
解決策
↑のリンクで比較されている通り、マウントはネットワークドライブみたいなものなので、
/home/contents 配下にマウントすればOKです。
# mount -B /var/www/html /home/contents/project
結果
色々やったけど、結局はソース管理だけなんだからgit入れればいいだけだったんじゃないかなー
って今思いました。