Estaba buscando en Google hace un tiempo y noté un par de formas, pero supongo que Google no lo sabe todo. Entonces, ¿cómo te expulsar a los usuarios fuera de su máquina Linux? ¿también cómo haces para ver que están conectados en primer lugar? y relacionado ... ¿funciona su método si el usuario ha iniciado sesión en un X11 DE (no es un requisito, solo tengo curiosidad)?
users
administration
xenoterracida
fuente
fuente
who(1)
ow(1)
. La única forma infalible de deshacerse de los posibles rootkits que puedan instalarse es limpiar y reinstalar completamente el sistema.Respuestas:
Probablemente haya una manera más fácil, pero hago esto:
Vea quién ha iniciado sesión en su máquina: use
who
ow
:Busque el ID de proceso del shell al que está conectado su TTY:
Ríete de su inminente desconexión (este paso es opcional, pero se recomienda)
Mata el proceso correspondiente:
Acabo de descubrir que puedes combinar los pasos 1 y 2 dando
who
la-u
bandera; el PID es el número a la derecha:fuente
kill -9
¿eh? Realmente estás en modo BOFH en este caso.kill -9
, y comience con señales más suaves , pero supongo que en este contexto no importa tanto. Solo estoy dejando un comentario en caso de que la gente se pierda el chiste.Como Micheal ya señaló, puede usar
who
para averiguar quién ha iniciado sesión. Sin embargo, si tienen múltiples procesos, hay una forma más conveniente que matar cada proceso individualmente: puede usarkillall -u username
para matar todos los procesos de ese usuario.fuente
killall
también será un poco más apropiado en entornos gráficos, ya que hay algo más que un caparazón para matar.¡Nigromancia!
Aprecio el humor de la respuesta aceptada, pero profesionalmente no puedo defenderla.
El método más elegante que conozco es enviar un -HUP al shell para simular el bloqueo de un usuario. Puede enviar esto al sshd inactivo del usuario para simular que se pierde su conexión, lo que desencadena una limpieza de todo el entorno del shell (incluidos los shells secundarios), o enviarlo a shells anidados específicos (por ejemplo, los que se configuran dentro de un multiplexor de terminal desconectado que te impiden desmontar un sistema de archivos) si quieres ser realmente preciso.
Sin
write
embargo, usar para enviar mensajes a terminales inactivos antes de arrancarlos es un pasatiempo divertido.fuente
echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP
(la suspensión le da al usuario la oportunidad de guardar y cerrar sesión, pero probablemente solo esté usando esto en un usuario que olvidó cerrar sesión de todos modos)Cierre la sesión del usuario 'nombre de usuario':
Ver
man skill
fuente
Otro comando útil está
pkill
aquípkill -u username && pkill -9 -u username
.killall
Tiene la desventaja de que en Solaris IIRC significa algo completamente diferente: tambiénpkill
tiene opciones ligeramente más avanzadas.fuente
En primer lugar, esto indica un problema mayor. Si tiene usuarios en los que no confía en su sistema, probablemente debería nivelarlo y volver a crear una imagen.
Con eso en mente, puede hacer algo o todo lo siguiente:
fuente
you have users that you don't trust on your system
... O podría ser que estás matando a uno como mensaje para los demás. Después de todo, ¿no es el credo del administrador de sistemas "Es mejor ser temido que ser amado"? Bromas aparte, Maquiavelo debería escribir un libro de O'Reilly.Miré a mi alrededor y no pude encontrar un solo script para automatizar esta tarea.
Entonces, en base a las soluciones propuestas aquí, mezclé todo en un script Bash interactivo que enumera los usuarios y las sesiones
who -u
para que el usuario elija qué hacer.Entonces puedes:
killall -u <username> -HUP
kill <PID>
Toda la información requerida proviene
who -u
y luego se analiza usandomapfile
yawk
.Agregaré la posibilidad de enviar un mensaje usando
write
más tarde (bifurcando el proceso con retraso).Probablemente también agregaré la opción para matar una sesión específica
kill -9
. Pero no tuve problemas con los justoskill
y como lo señalaron otros,kill -9
debería evitarse si es posible.Puede verificar el código en github si desea probarlo u obtener más información sobre cómo lo estoy haciendo de manera automatizada:
fuente
Al final, todo se reduce a identificar y finalizar los procesos que son propiedad, asociados o generados a partir de una identificación de usuario. Los comandos que use para alcanzar ese objetivo final no necesariamente importan mientras llegue allí.
Básicamente dos respuestas ...
Opción A: provocar el cierre de sesión de dicho usuario, para lo que sea y sin importar cuántos inicios de sesión tengan. Entonces, esto significaría identificar aquellos procesos que son propiedad de un usuario, rastreables por uid y clasificados como parte de algún proceso de inicio de sesión para la distribución de Linux dada que está ejecutando. Tenga en cuenta que hay procesos primarios como SSH o VNC antes del "inicio de sesión" y procesos secundarios como GDM después del "inicio de sesión". Por lo general, eliminar un proceso primario eliminará el proceso secundario, pero no siempre. Por lo tanto, desearía eliminar estos otros procesos que obviamente ya no son necesarios después del cierre de sesión. Al hacer todo esto, esto mantendría los trabajos en segundo plano en ejecución ... porque es un usuario benigno y tal vez solo desee cerrar la sesión. Por lo que yo sé,
/usr/bin/w
y/usr/bin/who
a informar que ha pasado a través del registro en el proceso.opción B: finalizar por completo todos los procesos que pertenecen a un uid específico, lo que simplemente significaría eliminar todos y cada uno de los procesos que posee dicho usuario, esto también los desconectaría si están conectados. Esto satisfaría la expulsión del sistema . Eso solo tiene que ser simple
ps -ef | grep <uid>
y luego finalizar todos esos procesos de cualquier manera que sea aceptable.fwiw en SLES 11 informa
kill -9
FTW!fuente
En mi opinión, no es realmente útil de usar
killall -u username
porque si se trata del mismo usuario que tú, comenzarás. Entonceskill
el proceso será una mejor solución.fuente
Este comando funcionó muy bien para la GUI, mi "significativo" se niega a cerrar sesión en ...
Algunas diversiones en caso de que las necesites.
fuente