¿Cómo determinar la dirección IP de quién inició sesión en Root?
15
Hay varias personas con acceso de root a una VM particular de la que estoy a cargo. Me gustaría saber qué dirección IP se utilizó para iniciar sesión en la raíz.
Se puede acceder a los registros para ver qué órdenes han sido ejecutadas con anterioridad: sudo less /root/.bash_history, todavía estoy tratando de investigar esto, parece una muy buena pregunta :)
Si alguien inicia sesión como root, puede hacer lo que quiera para eliminar cualquier registro que necesite también ...
Comintern
44
Como nota al margen, no debe permitir el inicio de sesión directo de root. Es un gran problema de seguridad.
fedorqui
Respuestas:
15
Puedes usar el lastcomando para obtener esta información
# last|head
phemmer ssh 192.168.0.24 Wed Aug 20 21:08 - 21:08 (00:00)
phemmer pts/13 192.168.0.2 Wed Aug 20 14:00 - 18:43 (04:43)
phemmer ssh 192.168.0.2 Wed Aug 20 14:00 - 18:43 (04:43)
phemmer ssh ::1 Wed Aug 13 23:08 - 23:08 (00:00)
phemmer ssh ::1 Wed Aug 13 23:08 - 23:08 (00:00)
phemmer ssh ::1 Wed Aug 13 23:07 - 23:07 (00:00)
phemmer pts/15 192.168.0.20 Thu Aug 7 19:00 - 19:00 (00:00)
phemmer ssh 192.168.0.20 Thu Aug 7 19:00 - 19:00 (00:00)
phemmer :0 Wed Jul 30 20:06 still logged in
reboot system boot 3.13.2-gentoo Wed Jul 30 20:05 still running
Como sin duda puede ver, la tercera columna mostrará la dirección IP remota en caso de un inicio de sesión SSH.
lastusa el /var/log/wtmparchivo, por lo que este método es similar a la respuesta de G-Man (solo un poco más simple ya que no tiene que especificar la ruta al archivo).
Esto depende de su distribución o sistema operativo. sshdregistrará cada inicio de sesión en algún lugar e incluirá la dirección IP relevante en el inicio de sesión en un formato como este:
Aug 20 15:56:53 machine sshd[2728]: Accepted publickey for root from 192.168.1.2 port 49297
Esa parte es consistente, pero la forma de llegar allí puede variar. En sistemas basados en systemd, use journalctl:
journalctl /usr/bin/sshd
para enumerar todos los mensajes de registro del sshdejecutable. Puede seleccionar eso para los inicios de sesión de raíz u otros criterios, y limitarlo por fecha con --sincey --until(ver man journalctl).
Alternativa e históricamente, los mensajes se iniciarán sesión (generalmente) en algún lugar /var/log. Comúnmente sshdentran mensajes /var/log/auth.log, pero el archivo exacto puede variar sustancialmente. Cualquiera que sea:
grep sshd /var/log/auth.log
le dará un resultado ampliamente equivalente a la journalctlversión.
Buen truco, pero en mi opinión, es mejor que solo estés usandolast
Creek
7
No debe permitir que las personas lo utilicen sshiniciando sesión directamente como root (utilizando la contraseña de root o un certificado /root/.ssh/authorized_keys) si desea auditar quién inició sesión como root. En su lugar, use una cuenta para cada persona y déjelos usar sudopara obtener permisos de root. De esta manera, encontrará en el registro apropiado (la posición del archivo de registro depende de la distribución que tenga, incluso puede configurar el demonio de registro para enviar los mensajes a otra máquina) el mensaje user john ran the command 'sudo rm -rf /'. Bueno, quizás no encuentres fácilmente ese comando en los registros.
Primero, esto no responde la pregunta. En segundo lugar, siempre debe tener una forma de rescatar el sistema. ¿Qué sucede cuando usa la autenticación LDAP y su servidor LDAP muere? ¿Cómo vas a iniciar sesión en la caja?
Patrick
44
@Patrick Primero, la pregunta comienza con "hay varias personas con acceso raíz a una VM en particular", por lo que tiene sentido sugerir que el enfoque correcto no es auditar IP sino auditar a los usuarios. En segundo lugar, el problema que plantea no está relacionado: si se supone que una persona tiene acceso a una máquina en una emergencia de LDAP que no funciona, debe tener su propia cuenta local, y si se supone que debe hacer el trabajo de administración en tal emergencia, la cuenta local tendrá sudopoder. Nunca hay una razón real para compartir una cuenta entre dos personas, pero una persona podría tener dos cuentas si es necesario.
pqnet
La pregunta no es cómo cambiar su diseño, sino cómo obtener una dirección IP. En cuanto a su otra solución, ahora tiene una cuenta local (posiblemente varias), con una contraseña que nunca caduca. No lo consideraría una mejora.
Patrick
@Patrick lo que sea. Tú administras tu propio servidor, yo administro el mío. Usted hizo su punto, la gente leerá su comentario y decidirá.
pqnet
1
@Patrick mejora sobre qué? Tener cuentas de usuario separadas para personas separadas es casi seguro que sea una mejora respecto a tener varias personas compartiendo una sola rootcuenta.
jw013
0
Según la breve descripción que ha proporcionado, parece que sería mejor si configurara un sistema de monitoreo de registros. Le ayudaría a monitorear los inicios de sesión, crear alertas, comparar los datos de varios días y, por supuesto, Gráficos para todo eso.
Pero si necesita monitorearlo temporalmente , puede usar el lastcomando.
last | grep root | grep -v tty | awk '{print $3}'
Esto le dará la lista de IPso Hostnamesdesde dónde, el usuario root ha iniciado sesión.
sudo less /root/.bash_history
, todavía estoy tratando de investigar esto, parece una muy buena pregunta :)Respuestas:
Puedes usar el
last
comando para obtener esta informaciónComo sin duda puede ver, la tercera columna mostrará la dirección IP remota en caso de un inicio de sesión SSH.
last
usa el/var/log/wtmp
archivo, por lo que este método es similar a la respuesta de G-Man (solo un poco más simple ya que no tiene que especificar la ruta al archivo).fuente
Esto depende de su distribución o sistema operativo.
sshd
registrará cada inicio de sesión en algún lugar e incluirá la dirección IP relevante en el inicio de sesión en un formato como este:Esa parte es consistente, pero la forma de llegar allí puede variar. En sistemas basados en
systemd
, usejournalctl
:para enumerar todos los mensajes de registro del
sshd
ejecutable. Puede seleccionar eso para los inicios de sesión de raíz u otros criterios, y limitarlo por fecha con--since
y--until
(verman journalctl
).Alternativa e históricamente, los mensajes se iniciarán sesión (generalmente) en algún lugar
/var/log
. Comúnmentesshd
entran mensajes/var/log/auth.log
, pero el archivo exacto puede variar sustancialmente. Cualquiera que sea:le dará un resultado ampliamente equivalente a la
journalctl
versión.fuente
El comando
debería mostrar información como la que se
who
muestra, pero retroceder en el tiempo.fuente
last
No debe permitir que las personas lo utilicen
ssh
iniciando sesión directamente como root (utilizando la contraseña de root o un certificado/root/.ssh/authorized_keys
) si desea auditar quién inició sesión como root. En su lugar, use una cuenta para cada persona y déjelos usarsudo
para obtener permisos de root. De esta manera, encontrará en el registro apropiado (la posición del archivo de registro depende de la distribución que tenga, incluso puede configurar el demonio de registro para enviar los mensajes a otra máquina) el mensajeuser john ran the command 'sudo rm -rf /'
. Bueno, quizás no encuentres fácilmente ese comando en los registros.fuente
sudo
poder. Nunca hay una razón real para compartir una cuenta entre dos personas, pero una persona podría tener dos cuentas si es necesario.root
cuenta.Según la breve descripción que ha proporcionado, parece que sería mejor si configurara un sistema de monitoreo de registros. Le ayudaría a monitorear los inicios de sesión, crear alertas, comparar los datos de varios días y, por supuesto, Gráficos para todo eso.
Pero si necesita monitorearlo temporalmente , puede usar el
last
comando.Esto le dará la lista de
IPs
oHostnames
desde dónde, el usuario root ha iniciado sesión.fuente