複数のユーザーでWebサーバーを管理している環境では、sshは公開したくないしsftpで特定のディレクトリにだけアクセスさせたいという場合があります。
この時には、sftpアクセスのみを許可したいユーザーのchroot設定とsftpのみの接続許可設定をします。
ここでは次のユーザーを sftpアクセスのみに設定します。
アカウント名 | sftp-only |
ホームディレクトリ | /home/sftp-only |
Webサーバー コンテンツ | /var/www/html |
ユーザーディレクトリの設定
最初に sftpのみでアクセスを許可するアカウントのホームディレクトリ設定を変更します。
chrootの設定
Chrootを動作させるには、該当ディレクトリの所有者をrootに設定しておく必要があります。
# chown root:root /home/sftp-only
コンテンツディレクトリの設定
次ぎにchrootしたディレクトリからコンテンツディレクトリへのパスを作成します。
# mkdir /home/sftp-only/html # mount -B /var/www/html /home/sftp-only/html
起動時に自動的にマウントする場合には、次のように /etc/fstab に設定を記述します。
/var/www/html /home/sftp-only/html bind 0 0
これで sftp-only ユーザーは、ログインすると ホームディレクトリがルートとなり カレントディレクトリの html/ ディレクトリにアクセスすることで /var/www/html を操作できます。
sftpのみを許可する設定の変更
最後にユーザーが sftp だけで接続できるように設定します。
# vi /etc/ssh/sshd_config Match User sftp-only ChrootDirectory /home/sftp-only/ X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
設定が完了したら sshd を再起動します。
# systemctl restart sshd
これで sftp-only アカウントは sftp のみで接続できるようになります。
scpも使用できませんので、クライアントからの接続プロトコルには sftp を指定します。