やりたいこと
・外部のエンジニアさんと連携したい
・でもドキュメントルートは見せたくない
・でもソースの再配置とかめんどくさい
実現方法
・sshd_configでsftp専用のユーザーを作成
(bashにはログインさせない)
・sshd_configでchrootでSFTPログイン時のルートディレクトリの変更
(その配下しか見せない)
・chrootのディレクトリ配下に作成したディレクトリをドキュメントルート配下にシンボリックリンクを張る
(chrootの制限としてディレクトリの所有者がroot且つ権限は755で固定=直下にファイルを配置できない)
やる
兎にも角にもユーザーを作成する
groupadd sftp
useradd -g sftp sftp-user1
chroot先のディレクトリを作成する
この時ディレクトリの所有者と権限に注意。
間違った設定をするとログインできないことになる
mkdir /var/www/sftp
chown root /var/www/sftp
chmod 755 /var/www/sftp
次にsshd_configを編集をする
デフォルトならパスはここ→/etc/ssh/sshd_config
最終行にこんな感じで追記する。
Match group sftp
ChrootDirectory /var/www/sftp
ForceCommand internal-sftp
意味合いとしては、sftpグループのユーザーがアクセスしてきたら
ルートディレクトリを/var/www/sftp
とすること
sftpアクセスのみでsshでのシェルへのログインは許可しない
sshd -t #コンフィグファイルのチェック
service sshd reload
※必ず、sshd -t
を実行すること。
sshdが死んだら大変。。。
ここまででSFTP専用ユーザーに対象ディレクトリ配下しか見せない設定は完了
しかし、このままではsftp-userは新たにファイルの配置ができない。
アパッチのドキュメントルートにファイルが無いので、httpで配置したソースも見れない。
なので、/var/www/sftpに新たにディレクトリを切ってそこにシンボリックリンクを張る
#/var/www/sftpで実行
mkdir web_source
chmod 777 web_souce
#ドキュメントルートで実行
ln -s /var/www/sftp/web_souce ./web_souce
これでドキュメントルートの配下に"/var/www/sftp/web_souce"へのシンボリックリンク
"web_souce"が作成される。
最後にhttpd.confのFollowSymlink?みたいなやつが設定されていれば
アパッチからweb_sourceが見れるはず。
以上。