¿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.

Matthew Moisen
fuente
1
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 :)
ryekayo
66
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).

Patricio
fuente
14

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.

Michael Homer
fuente
7

El comando

who /var/log/wtmp

debería mostrar información como la que se whomuestra, pero retroceder en el tiempo.

G-Man dice 'restablecer a Mónica'
fuente
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.

pqnet
fuente
2
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.

principiante
fuente