Estou administrando um ambiente de rede e tive uma situação interessante ontem. Quando um host é solicitado a desligar por um usuário comum, ele se recusa a fazer isso se outros usuários estiverem conectados localmente. Entretanto, esse não é o caso quando outros usuários estão conectados via SSH. Se um usuário estiver conectado localmente e um usuário estiver conectado via SSH e o usuário conectado localmente tentar desligar, ele será bem-sucedido sem nenhum aviso e a conexão SSH do outro usuário será encerrada abruptamente. Minha pergunta é: existe uma maneira de evitar isso, como a política faz para os usuários locais? Eu já procurei na página de manual sshd_config
e não consegui encontrar nada que parecesse relacionado.
EDIT (Informações adicionais):
Existem 4 sistemas operacionais na rede: Mandriva 2009, Mandriva 2010.2, Mandriva 2011 e Ubuntu 11.04. O caso específico ao qual estou me referindo tinha o usuário SSH em um host do Mandriva 2009 e o usuário local em um host do Mandriva 2011.
Os hosts do Mandriva 2009 usam o ambiente GNOME 2.28, os hosts 2010.2 usam os hosts GNOME 2.32, 2011 usam o KDE Plasma e os hosts Ubuntu 11.04 usam o Unity.
Atualizar
Como observei nesta pergunta , examinei as polkit
ações abaixo /usr/share/polkit-1/actions/
e encontrei (no arquivo org.freedesktop.consolekit.policy
) uma ação chamada org.freedesktop.consolekit.system.stop-multiple-users
que lança a mensagem
System policy prevents stopping the system when other users are logged in
Estou pensando (devido à org.freedesktop.*
convenção de nomenclatura) que este é algum tipo de sinal enviado ao DM via D-BUS. Penso que, se descobrir qual sinal desencadeia essa polkit
ação, devo poder modificar seu comportamento. Alguma ideia?
Atualização 2
Eu tentei um pequeno experimento hoje e isso me deu resultados muito estranhos. Tentei efetuar login via SSH em uma caixa e verifiquei que nenhum outro usuário estava conectado em nenhum VT. Se eu optar Shutdown
pelo menu "Ações" do GDM, a mensagem de política aguardada me informa que é impossível fazer isso sem autenticação, pois outros usuários estão conectados. No entanto , se eu usar o GDM para fazer login localmente e escolher Para fechar a caixa no menu do GNOME, a sessão SSH é bloqueada como antes. Como isso é possível? O comportamento é diferente quando eu inicio uma shutdown
solicitação do GDM e quando eu a inicio de dentro de um gnome-session
? Isso diz a alguém algo que pode me ajudar a resolver o problema?
Respostas:
Eu escreveria um pequeno programa que verificava todas as conexões SSH ativas via
netstat
e / oups
. Solte-o no lugar doshutdown
comando.Se ninguém mais estiver usando a máquina, ligue
shutdown
quando o usuário tentar. Se alguém estiver usando a máquina, simplesmente avise o usuário que emitiu oshutdown
comando.O Netstat fornecerá uma saída como essa e é muito fácil procurar
.ssh
na saída.ps
fornecerá uma saída como essa, mas é um pouco mais difícil, pois você precisa se preocupar com as conexões de saída.Netstat
provavelmente é o caminho certo a seguir.fonte
session
cadeia SSH PAM com um programa que toca em um arquivo quando um usuário efetua login via SSH e o remove quando o usuário efetua logout e, em seguida, solicita que o programa sugerido simplesmente verifique a existência de esses arquivos. Se isso funcionar, estou aceitando sua resposta.who
. Mostra quais usuários estão / estão conectados e de qual host.who
, não dá muito resultado, mas a maioria dos outros shells. (Sistema bobo incorporado ...) De qualquer forma, se você quiser usarnetstat
, é muito simples obter a coluna que você precisaawk
. Algo ao longo das linhas denetstat -a | awk '{print $4}'
(pelo menos no meu shell.)Você realmente encontrou as informações corretas. Pelo menos funcionou no Ubuntu até 13.04.
A seguinte entrada de política, quando configurada com "auth_admin_keep" como abaixo, prefere que o desligamento ocorra:
Mas de alguma forma, desde 13.10, essa política é totalmente ignorada. Até agora, ninguém foi capaz de me dizer o que o substituiria (se houver).
Observe que você também possui uma entrada para reinicialização (org.freedesktop.consolekit.system.restart-multiple-users) que também deve ser definida como
auth_admin_keep
.Veja esta pergunta / resposta também no AskUbuntu: /ubuntu/1190/how-can-i-make-shutdown-not-require-admin-password
fonte
Conte as conexões SSH e, se forem mais que as suas, desligue:
Algo assim?
Provavelmente eu inseriria algumas variáveis de leitura para que isso me levasse a perguntar: "Deseja desligar mesmo assim?" e "Deseja desligar?".
Então você pode usá-lo como um alias ou similar.
fonte