SFTPコマンドを別のファイルに記録したいのですが、root
でのみ機能し、chrootされたユーザーでは機能しません。
# cat /etc/ssh/sshd_config
...
Subsystem sftp internal-sftp -l INFO
Match Group user1
ChrootDirectory /chroot
ForceCommand internal-sftp -l INFO
AllowTcpForwarding no
X11Forwarding no
-
デフォルトのファシリティはAUTHです man page
# cat /etc/rsyslog.d/sshd.conf
auth.* /var/log/sftp.log
-
tail -F /var/log/secure /var/log/sftp.log
==> /var/log/secure <==
Dec 27 12:35:09 lab sshd[43014]: Accepted publickey for root from 192.168.1.100 port 44706 ssh2
Dec 27 12:35:09 lab sshd[43014]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 27 12:35:09 lab sshd[43014]: subsystem request for sftp
==> /var/log/sftp.log <==
Dec 27 12:35:09 lab internal-sftp[43016]: session opened for local user root from [192.168.1.100]
Dec 27 12:35:10 lab internal-sftp[43016]: opendir "/root/"
Dec 27 12:35:10 lab internal-sftp[43016]: closedir "/root/"
Dec 27 12:35:27 lab internal-sftp[43016]: session closed for local user root from [192.168.1.100]
==> /var/log/secure <==
Dec 27 12:35:27 lab sshd[43014]: Received disconnect from 192.168.1.100: 11: disconnected by user
Dec 27 12:35:27 lab sshd[43014]: pam_unix(sshd:session): session closed for user root
Dec 27 12:35:31 lab sshd[43017]: Accepted password for user1 from 192.168.1.100 port 44708 ssh2
Dec 27 12:35:31 lab sshd[43017]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
Dec 27 12:35:31 lab sshd[43019]: subsystem request for sftp
Dec 27 12:35:31 lab sshd[43020]: session opened for local user user1 from [192.168.1.100]
Dec 27 12:35:31 lab sshd[43020]: opendir "/"
Dec 27 12:35:31 lab sshd[43020]: closedir "/"
編集:2013年12月30日11:40:18 GMT 2013
システム:CentOS 6.5
次のオプションを追加しましたが、イベントは引き続き/ var/log/secureログファイルに記録されます。
# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
# mkdir /chroot/dev
# cat /etc/rsyslog.d/sshd.conf
$AddUnixListenSocket /chroot/dev/log
auth.* /chroot/dev/sftp.log
# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
# ll /chroot/dev/
total 0
srw-rw-rw- 1 root root 0 Dec 30 11:44 log
-rw------- 1 nobody nobody 0 Dec 30 11:39 sftp.log
このリンク によると、chrootされたsftpユーザーの詳細なロギングを行うための3つの基準の1つを満たしていると思います。
この一般的な命令 や このCentOS命令 などの他のリンクを比較すると、ログパスの優先カスタムディレクトリ名に関して、ディストリビューション間で正確な構成がわずかに異なるようです。ロギングソケットコンフィグを配置するファイルとロギングソケットコンフィグの式。
[編集]Mon Dec 30 21:50:00 GMT 2013
現時点ではCentOSにアクセスできませんが、上のCentOSページのリンクで優れたガイドのように見えるものが見つかりました。リンクは壊れていますが、 Waybackmachine を使用してページにアクセスできました。しかし、ガイドが消える危険性があるように思われるので、以下のすばらしい引用であなたの質問に関連する部分を露骨にコピーします。うまくいけばそれはあなたを助けるでしょうが、現時点で言ったように私はあなたが使用するディストリビューションでテストする手段がありません。
いくつか異なることをしたようですので、指を交差させて下の金をたたきます。
- bigback.com in Waybackmachine -から見積もりを開始
この例では、SFTPアクセスのみ(SSHではない)を必要とするユーザーのグループをセットアップし、SFTPサーバー上のファイルシステムにファイルをコピーします。ファイルシステムの場所は/sftp
になり、ユーザーはこの下の別のフォルダーに存在します。
最初に、ここでは“sftpuser”
と呼ばれる新しいグループを作成する必要があります。 SFTPアクセスを必要とする各ユーザーは、このグループに配置されます。
sshd_config
(debianでは/etc/ssh
)を編集し、最後に以下を追加する必要があります:-
Match group sftpuser
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l VERBOSE -f LOCAL6
これは次のことを行います:-
/sftp/$USER
のchroot jailでsftpセッションを実行しますLOCAL6
を取得します。これで、ホームディレクトリを作成せずに、デフォルトグループsftpuser
にユーザーを作成する必要があります。 ubuntuでは次のように入力できます:-
(読みやすくするために改行が追加されました!/ E)
adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--Shell /bin/false testuser1
ホームディレクトリが/
に設定されている理由は、sftpが/sftp/testuser1
にchrootするためです。次に、ユーザーのホームディレクトリを作成する必要があります。
mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in
設定するディレクトリ構造と権限は、要件によって異なる場合があることに注意してください。ユーザーのパスワードを設定し、sshdを再起動する必要があります(debian service ssh restart
上)。
これで、コマンドラインのsftpツールを使用してホストにファイルをsftpできるようになりますが、ユーザーtestuser1
としてサーバーにsshすることはできません。
Chrootされた各ユーザーの/var/logmessages
で生成される詳細なsftpロギングが表示されます。デフォルトでは、これはdaemon.log
に送信されます。これは、chrootされたファイルシステム内にないため、chrootされたsftpプロセスが/dev/log
を開けないためです。
ファイルシステムの構成に応じて、この問題には2つの修正があります。
デバイスを模倣するハードリンクを作成できます。
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log
最初のsyslogまたはrsyslogは、ユーザーのファイルシステム内の追加のロギングソケットを使用する必要があります。私の例では、/sftp
は別のsftpファイルシステムです。
Redhatの場合
Redhatではsyslogが使用されているので、/etc/sysconfif/syslog
を次のように変更しました:-
SYSLOGD_OPTIONS="-m 0"
読み取り:-
SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket
最後に、syslogデーモンはLOCAL6
のメッセージを/var/log/sftp.log
ファイルに記録するように指示する必要があるため、以下が/etc/syslog.conf
に追加されました。
# For SFTP logging
local6.* /var/log/sftp.log
そしてsyslogが再起動されました。
Ubuntu Lucidの場合
Ubuntu lucidで/etc/rsyslog.d/sshd.conf
を作成:
# Create an additional socket for some of the sshd chrooted users.
$AddUnixListenSocket /sftp/sftp.log.socket
# Log internal-sftp in a separate file
:programname, isequal, "internal-sftp" -/var/log/sftp.log
:programname, isequal, "internal-sftp" ~
…そしてrsyslogdを再起動しました。
ユーザー用のログデバイスの作成
次に、各ユーザーに対して/dev/log device
を作成する必要があります:-
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log
-引用を終了-