chroot 配置

chroot 配置

我想將 SFTP 命令記錄到單獨的檔案中,但它僅適用於rootchroot 用戶,但不適用於:

# 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

根據這個連結我相信您符合詳細記錄 chrooted sftp 用戶的三個標準之一:

  • 必須在 sftpd 設定中設定詳細日誌記錄。您似乎已經使用“ForceCommand 內部-sftp -l INFO”指示。
  • 必須在 chrooted 目錄內指定日誌文件,因為 chrooted 使用者沒有寫入 /var/log 目錄的權限。
  • 必須將日誌記錄套接字新增至 rsyslogd 以便於記錄到新的日誌檔案。

比較其他鏈接,例如這個通用指令這個 CentOS 指令看起來,不同發行版之間的確切配置在日誌記錄路徑的首選自訂目錄名稱、放置日誌記錄套接字配置的確切檔案以及日誌記錄套接字配置的表達式方面略有不同。

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

我目前無法訪問 CentOS,但在上面 CentOS 頁面的連結中找到了一個似乎非常好的指南。連結已損壞,但我可以透過以下方式訪問該頁面時光機。但由於指南似乎面臨消失的風險,我現在將在下面的精彩引用中公然複製與您的問題相關的部分。希望它會對您有所幫助,但正如目前所說,我無法在您使用的發行版上進行測試。

看來你做了一些不同的事情,所以祈禱你會在下面找到黃金。

--開始引用Waybackmachine 中的 bigmite.com--


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. 在目錄中的 chroot 監獄中執行 sftp 會話/sftp/$USER
  3. 阻止 X11 轉送連線的 TCP
  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 到主機,但不應該以 user 身分 ssh 到伺服器testuser1

記錄

您將看到為每個 chroot 使用者產生的詳細 sftp 日誌記錄/var/logmessages,預設情況下,該日誌應該轉到daemon.log.原因是 chroot 的 sftp 程序無法打開,/dev/log因為它不在 chroot 的檔案系統內。

此問題有兩個修復方法,具體取決於檔案系統配置。

如果使用者 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 上使用 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

且系統日誌已重新啟動。

對於 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

--引用結束--

相關內容