Eu estava pesquisando isso no Google um pouco atrás e notei algumas maneiras, mas acho que o Google não sabe tudo. Então, como você expulsa os usuários da sua caixa Linux? Além disso, como você vê que eles estão conectados em primeiro lugar? e relacionados ... o seu método funciona se o usuário estiver conectado a um X11 DE (não é um requisito que estou curioso)?
users
administration
xenoterracida
fonte
fonte
who(1)
ouw(1)
. A única maneira infalível de se livrar de possíveis rootkits que possam estar instalados é limpar e reinstalar o sistema completamente.Respostas:
Provavelmente existe uma maneira mais fácil, mas eu faço o seguinte:
Veja quem está conectado à sua máquina - use
who
ouw
:Procure o ID do processo do shell ao qual o TTY está conectado:
Rir da desconexão iminente (esta etapa é opcional, mas incentivada)
Mate o processo correspondente:
Acabei de descobrir que você pode combinar as etapas 1 e 2 dando
who
a-u
bandeira; o PID é o número à direita:fonte
kill -9
, Hã? Você realmente está no modo BOFH neste.kill -9
e , em vez disso, comece com sinais mais gentis , mas suponho que, nesse contexto, não importe tanto. Estou apenas deixando um comentário, caso as pessoas percam a piada.Como Micheal já apontou, você pode
who
descobrir quem está conectado. No entanto, se eles tiverem vários processos, há uma maneira mais conveniente do que matar cada processo individualmente: você pode usarkillall -u username
para matar todos os processos por esse usuário.fonte
killall
também será um pouco mais apropriado em ambientes gráficos, pois há mais do que apenas um shell para matar.Necromancia!
Aprecio o humor da resposta aceita, mas profissionalmente não posso defendê-la.
O método mais elegante que conheço é enviar um -HUP para o shell para simular um desligamento do usuário. Você pode enviar isso ao sshd inativo do usuário para simular a perda de conexão, o que aciona uma limpeza de todo o ambiente do shell (incluindo shells filhos) ou enviá-lo para shells aninhados específicos (por exemplo, aqueles configurados dentro de um multiplexador de terminal desconectado que impedem que você desmonte um sistema de arquivos) se você quiser ser realmente preciso.
Usar
write
para enviar mensagens para ptys terminais antes de inicializá-los é um hobby divertido.fonte
echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP
(a sono dá ao usuário a chance de salvar e log off, mas você provavelmente só usar isso em um usuário que se esqueceu de fazer logoff de qualquer maneira)Efetue logout do usuário 'nome de usuário':
Vejo
man skill
fonte
Outro comando útil está
pkill
aquipkill -u username && pkill -9 -u username
.killall
A desvantagem é que, no Solaris IIRC, isso significa algo completamente diferente - tambémpkill
possui opções um pouco mais avançadas.fonte
Primeiro de tudo, isso indica um problema maior. Se você possui usuários em quem não confia no seu sistema, provavelmente deve nivelá-lo e criar uma nova imagem.
Com isso em mente, você pode executar algumas ou todas as seguintes ações:
fonte
you have users that you don't trust on your system
... Ou pode ser que você esteja matando um como uma mensagem para os outros. Afinal, o credo do administrador de sistemas não é "É melhor ter medo do que ser amado"? Tirando todas as piadas, Maquiavel deveria escrever um livro de O'Reilly.Eu olhei ao redor e não consegui encontrar um único script para automatizar esta tarefa.
Portanto, com base nas soluções propostas aqui, misturei tudo em um script interativo do Bash que lista os usuários e as sessões
who -u
para o usuário escolher o que fazer.Você pode:
killall -u <username> -HUP
kill <PID>
Toda a informação necessária vem
who -u
e é analisada usandomapfile
eawk
.Adicionarei a possibilidade de enviar uma mensagem usando
write
mais tarde (bifurcando o processo com um atraso).Provavelmente vou adicionar a opção de matar uma sessão específica
kill -9
também. Mas não tive problemas com o justokill
e, como apontado por outros,kill -9
deve ser evitado, se possível.Você pode verificar o código no github se quiser experimentá-lo ou saber mais sobre como estou fazendo isso de maneira automatizada:
fonte
No final, tudo se resume a identificar e finalizar os processos pertencentes, associados ou gerados a partir de um ID do usuário. Quaisquer comandos que você use para atingir esse objetivo final não importam necessariamente desde que você chegue lá.
Basicamente duas respostas ...
Opção A: causando um logout do referido usuário, para o qual sempre e no entanto muitos logons eles possuam. Portanto, isso significaria identificar os processos que pertencem a um usuário, rastreáveis pelo uid e classificados como parte de algum processo de login para a distribuição Linux que você está executando. Perceba que existem processos pai como SSH ou VNC antes do "login" e processos filhos como GDM após o "login" Normalmente, matar um processo pai mata o processo filho, mas nem sempre. Portanto, você deseja eliminar esses outros processos que obviamente não são mais necessários após o logout. Ao fazer tudo isso, isso manteria os trabalhos em segundo plano em execução ... porque é um usuário benigno e talvez você queira apenas desconectá-los. Tanto quanto eu sei,
/usr/bin/w
e/usr/bin/who
irá relatar quem passou pelo processo de logon.opção B: finalize todos os processos pertencentes a um uid específico completamente, o que significaria simplesmente matar todo e qualquer processo pertencente ao referido usuário, isso também os desconectaria se eles estivessem logados. Isso satisfaria o pontapé inicial do sistema . Isso só precisa ser simples
ps -ef | grep <uid>
e, em seguida, finalizar todos esses processos da maneira que for aceitável.fwiw no SLES 11 informa
kill -9
FTW!fonte
Na minha opinião, não é realmente útil usá-
killall -u username
lo porque, se for o mesmo usuário que você, você se dará bem. Portanto,kill
o processo será uma solução melhor.fonte
Este comando funcionou muito bem para a GUI que meu "significativo" se recusa a sair de ...
Algumas diversões, caso você precise delas.
fonte