web-dev-qa-db-ja.com

SFTP:chrootユーザーの別のファイルにログを記録します

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
6
HTF

このリンク によると、chrootされたsftpユーザーの詳細なロギングを行うための3つの基準の1つを満たしていると思います。

  • 詳細なロギングは、sftpd構成で構成する必要があります。 "ForceCommand internal-sftp -l INFO"ディレクティブを使用してそうしたようです。
  • chrootされたユーザーには/ var/logディレクトリーへの書き込み権限がないため、ログファイルはchrootされたディレクトリー内で指定する必要があります。
  • 新しいログファイルへのロギングを容易にするために、ロギングソケットをrsyslogdに追加する必要があります。

この一般的な命令このCentOS命令 などの他のリンクを比較すると、ログパスの優先カスタムディレクトリ名に関して、ディストリビューション間で正確な構成がわずかに異なるようです。ロギングソケットコンフィグを配置するファイルとロギングソケットコンフィグの式。

[編集]Mon Dec 30 21:50:00 GMT 2013

現時点ではCentOSにアクセスできませんが、上のCentOSページのリンクで優れたガイドのように見えるものが見つかりました。リンクは壊れていますが、 Waybackmachine を使用してページにアクセスできました。しかし、ガイドが消える危険性があるように思われるので、以下のすばらしい引用であなたの質問に関連する部分を露骨にコピーします。うまくいけばそれはあなたを助けるでしょうが、現時点で言ったように私はあなたが使用するディストリビューションでテストする手段がありません。

いくつか異なることをしたようですので、指を交差させて下の金をたたきます。

- bigback.com in Waybackmachine -から見積もりを開始


Chroot設定

この例では、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

これは次のことを行います:-

  1. ポート22のssh経由で接続するすべてのユーザーにsftpのみを強制する
  2. ディレクトリ/sftp/$USERのc​​hroot jailでsftpセッションを実行します
  3. それらを防ぐTCP X11転送接続の
  4. 内部のsftpサーバーを実行し、詳細なログとsyslogチャネル名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つの修正があります。

ユーザーのsftpディレクトリ/ sftp/userがルートファイルシステムにある場合

デバイスを模倣するハードリンクを作成できます。

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log

ユーザーのsftpディレクトリがルートファイルシステム上にない場合

最初の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

-引用を終了-

6
ErikE