【前提】
1台のWebサーバにドキュメントルートを複数作成し、それぞれ個別のお客様にご利用いただくことになった。
他のお客様のドキュメントルートが見えないようにするために、
・sftp+chroot
でレンタルサーバ的な運用を行ってみる。
【方法メモ】
・sftpdグループにマッチしたら、sftpのみを許可してhome以上の階層に遷移させない(chroot)設定
chrootとは:
chrootとは、UNIXオペレーティングシステムにおいて、現在のプロセスとその子プロセス群に対してルートディレクトリを変更する操作である。 ルートディレクトリを別のディレクトリに変更されたプロセスは、その範囲外のファイルにはアクセスできなくなるため、この操作をchroot監獄などとも呼ぶ。"
chroot - Wikipedia
https://ja.wikipedia.org/wiki/Chroot
mkdir /opt/hogehoge # hogehoge用グループの作成(apacheも所属させておく) groupadd hogehoge gpasswd -a apache hogehoge # シェルへログイン不可ユーザを作成(-sオプションでログインシェルを/sbin/nologinにする) useradd -g hogehoge -d /opt/hogehoge/ -s /sbin/nologin user-hogehoge # 作成したユーザをapacheグループにも所属 gpasswd -a user-hogehoge apache # ユーザにパスワードを設定 passwd user-hogehoge
Match条件とChroot先を以下の様にしてsshd_configに追記
# Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match Group hogehoge User *hogehoge ChrootDirectory /opt/hogehoge X11Forwarding no AllowTCPForwarding no ForceCommand internal-sftp -f AUTHPRIV -l VERBOSE -u 0002
オプションについて確認
Subsystem sftp internal-sftp →SFTP の接続を処理するサブシステムを、標準の sftp-server から sshd 内部の internal-sftp に変更 X11Forwarding no :X11転送させない(GUIを外部から使わない) AllowTCPForwarding no :ポートフォワーディングさせない ForceCommand internal-sftp -f AUTHPRIV -l VERBOSE -u 0002 -f AUTHPRIV :syslogのfacilityを認証(AUTHPRIV)に指定する -l VERBOSE :ログレベル -u 0002 :umask
sftpユーザのため、chrootしたディレクトリ直下にディレクトリ(ここではdata)を配置し、sftpして編集できるようにする
cd /opt/hogehoge chown -R apache:hogehoge data find data -type d -exec chmod 2775 {} \; find data -type f -exec chmod g+w {} \;
あとは上記 /opt/hogehoge/data をドキュメントルートにしてサイト構築
ログについて
ファシリティはAUTHPRIVとなっている。AUTHPRIVは認証周りなので、
/etc/rsyslog.conf
# The authpriv file has restricted access. authpriv.* /var/log/secure
/var/log/secure
に出力されることになる。
Apr 21 12:14:27 hogehoge sshd[1428]: opendir "/htdocs/wp-content" [postauth] Apr 21 12:14:27 hogehoge sshd[1428]: closedir "/htdocs/wp-content" [postauth]
こんな感じ