SFTP用ユーザーを、chrootでアクセス可能範囲を限定する(さくらのVPS)
昨年立ち上げたサーバーは、一つのアカウントを使いまわしてSFTPユーザー管理する方法をとったが(SFTP用ユーザーの追加と管理方法)、今回建てたサーバーでは関わる人数が多くなりそうだったので、個別にアカウントを発行し chroot でアクセス範囲を限定することにした。
ポイントになるのはファイルの所有者とグループの設定で、今回は以下のようにした。
- ユーザー : 1人に1つずつユーザーアカウントを作成
- プライマリグループ : apache
- サブグループ : sftp_users
- アクセス方法 : 鍵アクセスのみ
また、デフォルトのパーミッションを、umask 002 として、グループに書き込み権限を与える設定とする。
SFTPユーザーの作成
まず最初に、SFTPでアクセスするユーザーのグループを作成。
[root@hoge ~]# groupadd sftp_users
SFTPユーザーの追加(ユーザーごとに繰り返し)
設定例:ユーザー名 = sftp-example
su - で 作業用アカウントから root に昇格して作業を行う。 ユーザーを作成(プライマリグループ:apache、サブグループ:sftp_users) [root@hoge ~]# useradd -g apache -G sftp_users sftp-example 作成したユーザーに切り替え [root@hoge ~]# su sftp-example 鍵の作成 [sftp-example@hoge root]$ ssh-keygen -t rsa 公開鍵のファイル名変更など [sftp-example@hoge root]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys [sftp-example@hoge root]$ chmod 600 ~/.ssh/authorized_keys [sftp-example@hoge root]$ exit 鍵のダウンロード(作業用アカウントに所有者を変更しないとDLできない) [root@hoge ~]# mv /home/sftp-example/.ssh/id_rsa /home/ [root@hoge ~]# chown 作業用アカウント /home/id_rsa → /home/id_rsa をダウンロード(TeraTerm SCPコマンドなど) 鍵をサーバー上から削除 [root@hoge ~]# rm /home/id_rsa
chroot設定
サブグループに対しても chroot は有効にかかるので、先ほど作成した sftp_users グループを対象に chroot する。
sshd_config を修正 [root@hoge ~]# vim /etc/ssh/sshd_config Subsystem sftp /usr/libexec/openssh/sftp-server ↓ コメントアウトして無効化 #Subsystem sftp /usr/libexec/openssh/sftp-server 追加 Subsystem sftp internal-sftp -u 002 最終行に追加 Match Group sftp_users X11Forwarding no AllowTcpForwarding no ChrootDirectory /var/www ForceCommand internal-sftp -u 002
sftp_users をプライマリグループに設定してしまうと、SFTPでアップロードしたファイルの「所有者:グループ」が、「個別アカウント:sftp_users」となってしまい、そのままでは apache上で動かす php や perl などと喧嘩してしまう。
というわけで、プライマリグループを apache とし、グループの書き込みを許す権限とすることで回避した。
上記の設定では、/var/www ディレクトリ以下にジェイルしたが、下層ディレクトリ毎にそれぞれ別々のユーザーをジェイルしたければ、グループを複数作り、グループ毎にそれぞれディレクトリを設定すれば良い。
複数のユニットが共用する場合は、ホームディレクトリからシンボリックリンクをユーザーごとに設定するよりも管理が楽だと思う。