Configuración de raíz

Configuración de raíz

Me gustaría registrar comandos SFTP en un archivo separado; sin embargo, funciona solo para rootusuarios 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á /sftpy 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/sshdebe 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: -

  1. Obliga a todos los usuarios que se conectan a través de ssh en el puerto 22 a tener solo sftp
  2. Ejecuta su sesión sftp en una cárcel chroot en el directorio/sftp/$USER
  3. Les impide reenviar conexiones TCP de X11
  4. 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/logmessagescada 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/logya 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, /sftphay un sistema de archivos sftp separado.

Para sombrero rojo

En redhat se usa syslog, así que lo modifiqué /etc/sysconfif/syslogpara 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 LOCAL6el /var/log/sftp.logarchivo, 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.confcontiene: -

# 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 devicenecesario crear: -

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

--Fin de la cita--

información relacionada