Me gustaría registrar comandos SFTP en un archivo separado; sin embargo, funciona solo para root
usuarios chroot, pero no para ellos:
# 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
-
La instalación predeterminada es AUTH segúnpágina de manual
# 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 "/"
EDITAR: lunes 30 de diciembre a las 11:40:18 GMT de 2013
Sistema: CentOS 6.5
Agregué las siguientes opciones, sin embargo, los eventos aún se registran en el archivo de registro /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
Respuesta1
De acuerdo aeste enlaceCreo que cumple uno de los tres criterios para tener un registro detallado de los usuarios de sftp con chroot:
- El registro detallado debe configurarse en la configuración de sftpd. Parece que lo has hecho usando el"ForceCommand interno-sftp -l INFORMACIÓN"directiva.
- Se debe especificar un archivo de registro dentro del directorio chroot, ya que un usuario chroot no tiene permiso para escribir en el directorio /var/log.
- Se debe agregar un socket de registro a rsyslogd para facilitar el registro en el nuevo archivo de registro.
Comparando otros enlaces comoesta instrucción genéricayesta instrucción de CentOSParece que la configuración exacta varía ligeramente entre distribuciones con respecto a los nombres de directorio personalizados preferidos para la ruta de registro, el archivo exacto donde colocar la configuración del socket de registro y la expresión de la configuración del socket de registro.
[EDITAR] Mon Dec 30 21:50:00 GMT 2013
No tengo acceso a CentOS en este momento, pero encontré lo que parece ser una guía excelente en un enlace en la página de CentOS anterior. El enlace está roto pero pude acceder a la página a través delmáquina de wayback. Pero como la guía parece correr el riesgo de desaparecer, ahora voy a copiar descaradamente las partes relevantes a sus preguntas en una magnífica cita a continuación. Espero que te ayude, pero como dije en este momento no tengo medios para realizar pruebas en la distribución que usas.
Parece que has hecho algunas cosas de manera diferente, así que cruza los dedos para encontrar oro debajo.
--Comenzar cita desdebigmite.com en Waybackmachine--
Configuración de raíz
En este ejemplo, voy a configurar un grupo de usuarios que requieren acceso SFTP únicamente (no SSH) y voy a copiar archivos a un sistema de archivos en un servidor SFTP. La ubicación del sistema de archivos será /sftp
y los usuarios residirán en carpetas separadas aquí.
Inicialmente se debe crear un nuevo grupo, aquí llamado “sftpuser”
. Cada usuario que requiera acceso SFTP se colocará en este grupo.
sshd_config
(en Debian en ) /etc/ssh
debe editarse y agregarse lo siguiente al final:-
Match group sftpuser
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l VERBOSE -f LOCAL6
Esto hace lo siguiente: -
- Obliga a todos los usuarios que se conectan a través de ssh en el puerto 22 a tener solo sftp
- Ejecuta su sesión sftp en una cárcel chroot en el directorio
/sftp/$USER
- Les impide reenviar conexiones TCP de X11
- Ejecuta el servidor sftp interno para que registre detalladamente y registre el nombre del canal syslog.
LOCAL6
Ahora se debe crear un usuario, sin crear un directorio de inicio y en el grupo predeterminado sftpuser
. En ubuntu puedes ingresar: -
(¡Salto de línea agregado por mí para facilitar la lectura! /E)
adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--shell /bin/false testuser1
La razón por la que el directorio de inicio está configurado /
es que el sftp hará chroot en /sftp/testuser1
. A continuación, será necesario crear el directorio de inicio de los usuarios: –
mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in
Tenga en cuenta que la estructura del directorio y los permisos que establezca pueden diferir según sus requisitos. Se debe configurar la contraseña del usuario y reiniciar sshd (en Debian service ssh restart
).
Ahora debería ser posible enviar archivos sftp al host usando la herramienta sftp de línea de comando, pero no debería ser posible enviar ssh al servidor como usuario testuser1
.
Inicio sesión
Verá que se genera un registro sftp detallado para /var/logmessages
cada usuario con chroot, donde de forma predeterminada debería ir al archivo daemon.log
. La razón de esto es que el proceso sftp chroot no se puede abrir /dev/log
ya que no está dentro del sistema de archivos chroot.
Hay dos soluciones para este problema, según la configuración del sistema de archivos.
Si el directorio sftp del usuario /sftp/user está en el sistema de archivos raíz
Puede crear un enlace físico para imitar el dispositivo: -
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log
Si el directorio sftp del usuario NO está en el sistema de archivos raíz
Primero, syslog o rsyslog necesitarán usar un socket de registro adicional dentro del sistema de archivos del usuario. Para mi ejemplo, /sftp
hay un sistema de archivos sftp separado.
Para sombrero rojo
En redhat se usa syslog, así que lo modifiqué /etc/sysconfif/syslog
para que la línea: -
SYSLOGD_OPTIONS="-m 0"
dice:-
SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket
Finalmente, es necesario indicarle al demonio syslog que registre los mensajes en LOCAL6
el /var/log/sftp.log
archivo, por lo que se agregó lo siguiente /etc/syslog.conf
: -
# For SFTP logging
local6.* /var/log/sftp.log
y se reinició syslog.
Para Ubuntu lúcido
En Ubuntu lucid creé que /etc/rsyslog.d/sshd.conf
contiene: -
# 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" ~
... y reinicié rsyslogd.
Crear dispositivos de registro para usuarios
Ahora, para cada usuario es /dev/log device
necesario crear: -
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log
--Fin de la cita--