SFTP:为chroot用户login到一个单独的文件

我想loggingSFTP命令到一个单独的文件,但它只适用于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 "/" 

编辑:周一12月30日11:40:18 GMT 2013

系统:CentOS 6.5

我添加了以下选项,但事件仍logging在/ 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 

根据这个链接,我相信你满足了三个标准之一,详细logging了chroot sftp用户:

  • 详细日志logging必须在sftpdconfiguration中进行configuration。 你似乎已经这样做了,使用“ForceCommand internal-sftp -l INFO”指令。
  • 必须在chrooted目录内指定一个日志文件,因为chroot用户没有权限写入/ var / log目录。
  • 必须将日志logging套接字添加到rsyslogd以便于logging到新的日志文件。

比较通用指令和CentOS指令等其他链接,看起来确切的configuration在发行版path的首选自定义目录名称,确切的文件放置日志套接字configuration的位置和日志loggingexpression式套接字configuration。

[编辑] Mon Dec 30 21:50:00 GMT 2013

目前我还没有访问CentOS,但发现在上面的CentOS页面中,似乎是一个很好的指导链接。 链接被破坏,但我可以通过Waybackmachine访问页面。 但是随着指南似乎有可能消失,我现在要在下面的macros伟报价中公然地复制与你的问题相关的部分。 希望这会对你有所帮助,但正如我所说的,目前我无法在你使用的发行版上进行testing。

看来你已经做了一些不同的事情,所以你的手指越过你将在下面击中黄金。

在Waybackmachine开始引用bigmite.com –


Chrootconfiguration

在这个例子中,我将设置一组只需要SFTP访问的用户(无SSH),并将文件复制到SFTP服务器上的文件系统。 文件系统的位置将是/sftp ,用户将驻留在此处的单独文件夹中。

最初应该创build一个新的组,这里叫做“sftpuser” 。 每个需要SFTP访问的用户都将被放置在这个组中。

应该编辑sshd_config (在/etc/ssh debian上),并在结尾添加以下内容: –

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

这样做如下:

  1. 强制通过端口22上的ssh连接的所有用户只有sftp
  2. /sftp/$USER目录下的chroot jail中运行它们的sftp会话
  3. 阻止他们TCP的X11转发连接
  4. 运行内部sftp服务器使其logging详细信息,并将系统日志通道名称LOCAL6

现在应该创build一个用户,而不创build一个主目录,并且在默认组sftpuser 。 在Ubuntu上你可以input:

(为了便于阅读,我加了换行符!/ E)

 adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home --shell /bin/false testuser1 

主目录设置为/的原因是,sftp将被chroot到/sftp/testuser1 。 接下来,用户主目录将需要创build:

 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身份login到服务器。

logging

你会在每个chroot用户的/var/logmessages看到详细的sftp日志logging,默认情况下这应该转到daemon.log 。 原因是chroot'ed sftp进程无法打开/dev/log因为这不在chroot文件系统中。

有两个修复这个问题,取决于文件系统configuration。

如果用户的sftp目录/ sftp / user在根文件系统上

您可以创build一个硬链接来模仿设备:

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

如果用户的sftp目录不在根文件系统上

第一个syslog或者rsyslog需要在用户文件系统中使用一个额外的日志套接字。 对于我的例子/sftp是一个单独的sftp文件系统。

对于Redhat

在红帽系统日志被使用,所以我改变了/etc/sysconfif/syslog ,使行: –

 SYSLOGD_OPTIONS="-m 0" 

读: –

 SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket 

最后,系统日志守护进程需要被告知将LOCAL6消息LOCAL6/var/log/sftp.log文件,所以在/etc/syslog.conf中添加了以下内容: –

 # For SFTP logging local6.* /var/log/sftp.log 

系统日志重新启动。

对于Ubuntu Lucid

在Ubuntu lucid上,我创build了/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。

为用户创build日志设备

现在,每个用户需要创build一个/dev/log device

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

– 完引用 –