FreeBSD - メンテナンス・トラブルシュート - sshd・sftp - sftp

クラウディア 
1. sftp 設定
2. 特定のユーザを鍵なし・chroot で接続する
3. ログを出力する

1. sftp 設定

 少なくとも「FreeBSD 11.1 RELEASE」では、「sshd」を起動すれば、「sftp」は有効になっています。

/etc/ssh/sshd_config
 内の

Subsystem sftp /usr/libexec/sftp-server
 の記述が「sftp」を起動する設定です。  もし違うバージョン等でコメントアウトされていたら、コメントをはずすようにします。  編集したら

service sshd restart
 で sshd デーモンを再起動します。  sftp のクライアントとして FFFTP を使用できます。使用方法については「FFFTP Bitvise SSH Client との連動」のページを参照してください。

2. 特定のユーザを鍵なし・chroot で接続する

 特定のユーザを鍵なし・chroot で接続させるには、まず、chroot で接続するディレクトリの設定をします。  接続するディレクトリは所有者が root でかつ 755(drwxr-xr-x)より多い権限を与えてはならないようです。  所有者や権限に問題があると
/var/log/auth.log
 に

fatal: bad ownership or modes for chroot directory component "ディレクトリ名"
 というメッセージが出て接続エラーとなります。  今んとこ chroot したディレクトリの配下にサブディレクトリを作成して、そのサブディレクトリの所有者を接続するユーザにしています。  次に
/etc/ssh/sshd_config
 の最下行に以下を記述します。

Match User ユーザ名
	PasswordAuthentication yes
	ChrootDirectory /chroot用ディレクトリ
	ForceCommand internal-sftp
 これで、sshd を再起動すると「ユーザ名」に記述したユーザは、鍵認証なしで sftp 接続でき、chroot された状態になっています。  さらにつっこんだ設定もできるようなので参考になりそうなサイトをメモしておきます。
chrootされたsftp専用ユーザを作るメモ

3. ログを出力する

 sftp は基本的にログを出力しません。  ログを出力させるには
/etc/ssh/sshd_config
 の

Subsystem sftp /usr/libexec/sftp-server
 を編集します。

Subsystem       sftp    /usr/libexec/sftp-server -f LOCAL7 -l VERBOSE
 -f LOCAL7 で、ログの facility を 7 にしています。  -l VERBOSE で、いささか冗長気味のログを出力します。  記述したら、スペルチェック。

sshd -t
 syslogd が /var/log/sftp/sftp.log へ出力するように

/etc/syslog.conf
 の末尾に以下を追加します。

#
local7.*                                        /var/log/sftp/sftp.log
 (/etc/syslog.d/sftp.conf を作成して記述すればよいかと思いましたがうまく動作しませんでした。)  (newsyslog.conf の方は include がうまく機能しているのですが・・・ )  設定を反映させるために、ディレクトリ・ファイルの作成とデーモンプログラムの再起動を行います。

mkdir -pv /var/log/sftp/
touch /var/log/sftp/sftp.log
service syslogd restart
service sshd    restart
 ログローテーションを定義します。

/etc/newsyslog.conf.d/sftp.conf
 を作成して、下記のように記述します。

# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/sftp/sftp.log                  600  30    *    @T00        B
 数・サイズ・タイミング・形式はログの状況によって調整します。