以前構築した、OpenSSHを使って、chroot環境下でSFTPを動かす方法のカスタマイズを行った。
今回設定したのは、ログ出力と、bash権限を持つアカウントだけ鍵認証を行う設定。
理想の状態はこんな感じ。
- chroot後の環境で、データのやりとりをsyslogで管理したい
- sftpのログ専用のファシリティを設ける
- rsshユーザーはパスワード認証、bashユーザーは鍵認証をさせる
【 chroot環境下のログの採取方法 & sftpファシリティの追加】
通常、chroot環境では、/dev/logを参照することが出来ないので、ログ出力は行えない。
そこで、syslogのオプションに、chroot後のディレクトリのdev/に、ソケットを作成する記述を行う。
[/etc/sysconfig/syslog]
変更前:SYSLOGD_OPTIONS=”-m 0″
変更後:SYSLOGD_OPTIONS=”-m 0 -a chrootディレクトリ/dev/log”
通常では-aオプションは19個までしか設定出来ないっぽい。
オプションの変更後、syslogを再起動すると、設定したchrootディレクトリ/varにlogファイルが作成されている。
次に、sshd_configのSubSystemの箇所に、internal-sftpにログを出力するように編集し、編集後sshdの再起動を行う。
[/etc/ssh/sshd_config]
変更前:Subsystem sftp internal-sftp
変更後:Subsystem sftp internal-sftp -f local1 -l info
※-fはsyslogのファシリティ、-lでログレベルを指定する。
参考にしたサイトとかだと、ファシリティをauthprivに設定しているとこが多かったけど、/var/log/secureにsftpのログを追記したくなかったので変更する。
新規にlocal1というファシリティを作成して、そのログを/var/log/sftp.logに出力するように設定。
作成後、syslogの再起動が必要。
echo “local1.* /var/log/sftp.log” >> /etc/syslog.conf
【 SSHの認証方法の変更 】
最後にbashも持つアカウントは鍵認証をさせて、sftp専用のユーザーはパスワード認証をさせる。
[/etc/ssh/sshd_config]
全ユーザー共通の設定(鍵認証させる)
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
sftpユーザーはMatchのこんな感じになる。
Match Group chrootgroup
PasswordAuthentication yes
AllowAgentForwarding no
AllowTcpForwarding no
ChrootDirectory /usr/local/chroot/
PubkeyAuthentication no
ここまで設定したら、sshdを再起動。
試しに、teratermからsftpユーザーで接続してみると、ユーザー名とパスワードの入力プロンプトは表示されるが、正常なパスワードであっても、一瞬rsshのエラーが出てきて接続が終了する。