Aunque esta pregunta fue formulada por un individuo que deseaba grabar sus propias sesiones, un caso de uso alternativo podría ser un administrador del sistema que quisiera hacer un seguimiento de lo que están haciendo varios usuarios.
Me temo que correr script
dentro del sistema bashrc
podría no ser adecuado en el caso de que los usuarios de la máquina sean reacios a hacer grabaciones de sus sesiones.
Los usuarios que deseen permanecer de incógnito pueden omitir el registro al pedirle a sshd que abra un shell diferente (por ejemplo zsh
) o que se ejecute bash --rcfile ___
para evitar que /etc/bash.bashrc
se cargue.
Un enfoque alternativo
Esta guía de 2008 ( archivada ) utiliza un método diferente para forzar la script
ejecución cuando un usuario inicia sesión con ssh, lo que requiere que los usuarios inicien sesión con una clave pública / privada.
Esto se hace agregando un script al .ssh/authorized_keys
archivo del usuario , delante de la clave:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
El script log-session
( archivado ) decide si se ejecuta o no /usr/bin/script
para registrar la sesión de este usuario.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Para evitar que el usuario elimine el comando agregado, el administrador deberá asumir la propiedad del authorized_keys
archivo del usuario .
chown root:root ~user/.ssh/authorized_keys
Desafortunadamente, esto significa que el usuario no podrá agregar ninguna clave adicional por sí mismo o, lo que es más importante, revocar la clave existente si está comprometida, lo que dista mucho de ser ideal.
Advertencias
Es común que la configuración predeterminada de sshd permita a los usuarios realizar SFTP a través de su inicio de sesión ssh. Esto ofrece a los usuarios una forma de editar archivos sin que se registren los cambios. Si el administrador no quiere que los usuarios puedan hacer eso, entonces debe habilitar algún registro para SFTP o deshabilitar el servicio. Aunque incluso entonces, los usuarios aún podrían hacer cambios invisibles en los archivos ejecutando algo como esto en su terminal:
curl "http://users.own.server/server/new_data" > existing_file
Es posible monitorear cambios como ese mediante el uso de un sistema de archivos de copia en escritura que registra todo el historial de archivos.
Pero un truco similar permitiría a un usuario ejecutar comandos sin que se registren:
curl "http://users.own.server/server/secret_commands_824" | sh
No conozco ninguna solución fácil para eso. Las posibilidades pueden ser:
- Registro de todos los datos de la red (y desenredarlos más tarde).
- Registro de todas las llamadas del sistema.
Este tipo de cosas podría ser posible con auditado .
Pero de todos modos...
Es poco probable que el registro de sesiones de usuario proporcione seguridad real para los administradores. Por defecto, un usuario solo puede manipular sus propios archivos y no puede dañar el sistema. Si un usuario malintencionado logró escalar privilegios, podría deshabilitar el registro y eliminar los registros (a menos que el administrador haya configurado los registros para que se almacenen en una máquina separada, solo para agregar).
Los administradores que registran automáticamente las sesiones de los usuarios probablemente deberían informar a los usuarios que esto se está haciendo . En algunas jurisdicciones, esta forma de recopilación de datos puede violar las leyes de datos o privacidad . Y, al menos, sería respetuoso con los usuarios informarles.
Es más probable que un administrador esté interesado en registrar las sesiones de los sudo
usuarios. Tal vez podría abordarse en una respuesta diferente, o incluso en una pregunta diferente.
exec
al comienzo de la línea. debería comenzarscript -f
en el mismo PID de shell.