Chroot 構成

Chroot 構成

SFTP コマンドを別のファイルに記録したいのですが、これは chroot されたユーザーに対してのみ機能し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です。マニュアルページ

# 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

システム: 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

答え1

によるとこのリンクchroot された sftp ユーザーの詳細なログを取得するための 3 つの基準のいずれかを満たしていると思われます。

  • 詳細なログはsftpdの設定で設定する必要があります。「ForceCommand 内部-sftp -l INFO」指令。
  • chroot されたユーザーには /var/log ディレクトリへの書き込み権限がないため、ログ ファイルは chroot されたディレクトリ内に指定する必要があります。
  • 新しいログ ファイルへのログ記録を容易にするには、rsyslogd にログ ソケットを追加する必要があります。

他のリンクと比較すると、この一般的な指示そしてこのCentOSの指示ログ パスの推奨カスタム ディレクトリ名、ログ ソケット構成を配置する正確なファイル、およびログ ソケット構成の表現に関しては、正確な構成はディストリビューション間で若干異なるようです。

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

現時点ではCentOSにアクセスできませんが、上記のCentOSページのリンクに優れたガイドと思われるものを見つけました。リンクは壊れていますが、ウェイバックマシンしかし、ガイドが消えてしまう危険性があるため、あなたの質問に関連する部分を以下に引用して堂々とコピーします。お役に立てれば幸いですが、先に述べたように、現時点ではあなたが使用しているディストリビューションでテストする手段がありません。

どうやらあなたはいくつかのことを違ったやり方でやったようですので、下記のように大成功を収められることを祈っています。

--引用開始waybackmachine の bigmite.com--


Chroot 構成

この例では、SFTP アクセスのみ (SSH なし) を必要とするユーザー グループを設定し、SFTP サーバー上のファイル システムにファイルをコピーします。ファイル システムの場所は で/sftp、ユーザーはここの下の個別のフォルダーに存在します。

最初に、 という新しいグループを作成する必要があります“sftpuser”。SFTP アクセスを必要とする各ユーザーは、このグループに配置されます。

( sshd_configon debian in /etc/ssh) を編集し、最後に次の内容を追加する必要があります:-

Match group sftpuser
 ChrootDirectory /sftp/%u
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp -l VERBOSE -f LOCAL6

これにより、次のことが行われます:-

  1. ポート22でssh経由で接続するすべてのユーザーにsftpのみを強制する
  2. ディレクトリ内のchroot jailでsftpセッションを実行します/sftp/$USER
  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 が に chroot するためです/sftp/testuser1。次に、ユーザーのホーム ディレクトリを作成する必要があります:-

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 で送信できるはずですが、ユーザーとしてサーバーに ssh で接続することはできませんtestuser1

ログ記録

chroot された各ユーザーに対して、詳細な sftp ログが に生成されていることがわかります/var/logmessages。デフォルトでは、これは に送信されます。これは、chroot されたファイルシステム内にないため、daemon.logchroot された 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

--引用終了--

関連情報