#SFTPを用いて特定ユーザをchrootする方法
FTPの変わりにセキュアなSFTPを運用したいが、そのまま運用してしまうとどんなユーザでも「/」以下が丸見えになってしまう。また本来とは違ったディレクトリに対して誤操作してしまう可能性がある。そのため、例えば「hogehoge.xxx」ドメインの運用ユーザは「/var/www/hogehoge.xxx」が「/」となるようにシステム側でしたい。そのためにsshのchrootという仕組みを使用する。
#運用の前提
- 「hogehoge.xxx」ドメインの運用ユーザ名は「hogehoge.xxx」とする。
- hogehoge.xxxユーザはSFTPのみ使用でき、ssh自体のログインできない物とする。
- 鍵形式でのログインとする。
#ディレクトリの作成
WEBからのドキュメントルートは「/var/www/hogehoge.xxx/doc_root」にしておき、.sshファイルはWEBからは見えないようにしておきます。
mkdir -p /var/www/hogehoge.xxx/doc_root
mkdir -p /var/www/hogehoge.xxx/.ssh
#ユーザ・グループの作成
「chroot_sftp」グループに属しているとホームディレクトリにchrootすると後でsshに設定しますのでユーザを「chroot_sftp」に属させます。
groupadd -g 2002 hogehoge.xxx
useradd -u 2002 -g 2002 -N -s /sbin/nologin -M -d /var/www/hogehoge.xxx hogehoge.xxx
usermod -aG chroot_sftp hogehoge.xxx
#鍵の作成
セキュアなSSHサーバの作成の手順でhogehoge.xxxユーザの鍵を作成
その中の公開鍵を次の「authorized_keys」の内容に貼り付けます。
#authorized_keysの作成
先ほど作成した鍵の内容でファイルを作成します。
vi /var/www/hogehoge.xxx/.ssh/authorized_keys
#ファイル、ディレクトリ属性の変更
chrootするためには「/var/www/hogehoge.xxx/」自体はrootの持ち物にしておく必要があります。
chown -R hogehoge.xxx:hogehoge.xxx /var/www/hogehoge.xxx
chmod 700 /var/www/hogehoge.xxx/.ssh/
chmod 600 /var/www/hogehoge.xxx/.ssh/authorized_keys
chown root:root /var/www/hogehoge.xxx
#sshd_configの修正
下記を最下部に追加します。
Match group chroot_sftp
ChrootDirectory ~
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
反映
/etc/init.d/sshd restart
よく
Subsystem sftp /usr/libexec/openssh/sftp-server
自体をコメントアウトするなどありますが不要だと思います。
マッチで上書きしているので。お任せします。
以上でwinscpなどで入ると「/var/www/hogehoge.xxx/」が最上位となり、またputtyではログインできないようになります。
以上。