我想将 SFTP 命令记录到单独的文件中,但是它仅适用于root
chrooted 用户,而不适用于 chrooted 用户:
# 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
这将执行以下操作:-
- 强制所有通过 ssh 连接端口 22 的用户仅使用 sftp
- 在目录中的 chroot jail 中运行 sftp 会话
/sftp/$USER
- 阻止 X11 转发连接的 TCP
- 运行内部 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'ed 用户生成详细的 sftp 日志记录/var/logmessages
,默认情况下,这些日志记录应转到daemon.log
。 原因是 chroot'ed sftp 进程无法打开,/dev/log
因为它不在 chrooted 文件系统内。
有两种方法可以修复此问题,具体取决于文件系统配置。
如果用户 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
--引言结束--