特定ユーザーをsftp接続に限定する

複数のユーザーで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 を指定します。