我想将 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
Run Code Online (Sandbox Code Playgroud)
——
根据手册页,默认工具是 AUTH
# cat /etc/rsyslog.d/sshd.conf
auth.* /var/log/sftp.log
Run Code Online (Sandbox Code Playgroud)
——
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 "/"
Run Code Online (Sandbox Code Playgroud)
编辑:格林威治标准时间 2013 年 12 月 30 日星期一 11:40:18
系统: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
Run Code Online (Sandbox Code Playgroud)
根据此链接,我相信您符合详细记录 chroot sftp 用户的三个标准之一:
比较其他链接(例如此通用指令和此 CentOS 指令),在日志路径的首选自定义目录名称、放置日志套接字配置的确切文件和日志表达式方面,发行版之间的确切配置似乎略有不同套接字配置。
[编辑] Mon Dec 30 21:50:00 GMT 2013
我目前无法访问 CentOS,但在上面 CentOS 页面的链接中发现了一个很好的指南。该链接已损坏,但我可以通过Waybackmachine访问该页面。但是,由于指南似乎有消失的危险,我现在将在下面的精彩引文中公然复制与您的问题相关的部分。希望它会对您有所帮助,但正如目前所说,我无法对您使用的发行版进行测试。
看起来你做了一些不同的事情,所以手指交叉你会在下面挖到金子。
--在Waybackmachine中从bigmite.com开始引用-
在此示例中,我将设置一组仅需要 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
Run Code Online (Sandbox Code Playgroud)
这将执行以下操作:-
/sftp/$USERLOCAL6现在应该创建一个用户,而不创建主目录和默认组sftpuser。在 ubuntu 上,您可以输入:-
(为了可读性,我添加了换行符!/E)
adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--shell /bin/false testuser1
Run Code Online (Sandbox Code Playgroud)
主目录设置为的原因/是 sftp 将 chroot 到/sftp/testuser1. 接下来需要创建用户主目录:-
mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in
Run Code Online (Sandbox Code Playgroud)
请注意,您设置的目录结构和权限可能因您的要求而异。应该设置用户密码,并重新启动 sshd(在 debian 上service ssh restart)。
现在应该可以使用命令行 sftp 工具将文件 sftp 传输到主机,但不应该以 user 身份通过 ssh 连接到服务器testuser1。
您将看到/var/logmessages为每个 chroot 用户生成详细的 sftp 日志记录,默认情况下,这应该转到daemon.log. 原因是 chroot 的 sftp 进程无法打开,/dev/log因为它不在 chroot 的文件系统内。
此问题有两个修复程序,具体取决于文件系统配置。
您可以创建一个硬链接来模仿设备:-
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log
Run Code Online (Sandbox Code Playgroud)
首先 syslog 或 rsyslog 将需要在用户文件系统中使用附加的日志记录套接字。对于我的示例/sftp是一个单独的 sftp 文件系统。
对于红帽
在 redhat syslog 上使用,所以我改变/etc/sysconfif/syslog了这一行:-
SYSLOGD_OPTIONS="-m 0"
Run Code Online (Sandbox Code Playgroud)
读:-
SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket
Run Code Online (Sandbox Code Playgroud)
最后,需要告知 syslog 守护进程将消息记录LOCAL6到/var/log/sftp.log文件中,因此将以下内容添加到/etc/syslog.conf:-
# For SFTP logging
local6.* /var/log/sftp.log
Run Code Online (Sandbox Code Playgroud)
并且系统日志已重新启动。
对于 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" ~
Run Code Online (Sandbox Code Playgroud)
...并重新启动 rsyslogd。
为用户创建日志设备
现在对于每个用户都/dev/log device需要创建:-
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log
Run Code Online (Sandbox Code Playgroud)
——结束语——