うまいぼうぶろぐ

linuxとhttpdとperlのメモ

opensshのsftp serverでログを取る - Chroot user編

see also.

普通のユーザはinternal-sftp -f authpriv のようにしてsyslogのfacilityを指定するだけで良い。けどchroot しているuserの場合にはログが出ない。理由はchroot ディレクトリの下にsyslogd のsocketがないから(/dev/log)。

追記

chroot 環境の/etc/localtime がないとログの時刻がずれるのでコピーしておく。

# cp /etc/localtime /path/to/chroot/etc/localtime

解決策1 - chrootディレクトリが"/" と同じパーティションにある場合

/dev/log のhardlink を作る。

# mkdir /path/to/chroot/dev
# ln /dev/log /path/to/chroot/dev/log

解決策2 - chrootディレクトリが"/" と同じパーティションにない場合

同一パーティションにないとhardlink は作れないので、syslogd のオプションでsocketを追加する。"-a /path/to/chroot/dev/log"

-a socket
Using this argument you can specify additional sockets from that syslogd has to listen to. This is needed if you're going to let some daemon run within a chroot() environment.

/etc/sysconfig/syslog や /etc/init.d/syslogd あたりのSYSLOGD_OPTIONSに追加。

SYSLOGD_OPTIONS="-m 0 -a /path/to/chroot/dev/log"
追記 rsyslogの場合

新しいrsyslogだと-a オプションが廃止されている。
imuxsock.so module を使う。

$AddUnixListenSocket /path/to/chroot/dev/log

解決策3

syslogd の設定触るのめんどくせー、とかの場合は/dev をがっつりbind オプションでmountさせてしまう。

  • /etc/fstab
/dev         /path/to/chroot/dev    ext3    bind            0 0

そしてmount -aとか。