Existe alguma maneira de desativar o desligamento da máquina remota?

1

Às vezes, por engano, encerro a máquina remota usando sudo init 0 , então escrevi algo como em um dos meus arquivos rc:

alias sudo='sudo '
if [ $SSH_CLIENT ]; then
  alias init 'echo Never use init when ssh'
fi

No entanto, embora os arquivos rc sejam executados, init ainda executa /sbin/init em vez do alias. E eu não gosto de adicionar um script de wrapper global em /usr/local/bin . É possível desabilitar sudo init 0 então? Ou eu tenho que pedir ajuda ao administrador?

    
por Hongxu Chen 13.08.2013 / 17:46

3 respostas

4

Redefina sudo como uma função:

sudo() if [ "$1" = init ] && [ -n "$SSH_CLIENT" ]; then
  echo >&2 "Never use init when ssh"
  return 1
else
  command sudo "$@"
fi

Se você quiser que seus aliases sejam expandidos após sudo , ainda será possível adicionar um

alias sudo='sudo '

ele ainda chamará nossa função sudo .

    
por 13.08.2013 / 19:11
3

Para o debian e derivados, existe um software chamado molly-guard que faz exatamente o que você quer - - Ele intercepta um comando de desligamento se detectar um login remoto e pede que você confirme se está desligando o sistema correto inserindo o nome do sistema.

    
por 14.08.2013 / 11:50
0

A partir da descrição do seu problema, você não está usando sudo com muita frequência quando conectado via SSH. Você deve apenas dizer isso para si mesmo:

if [ -n "$SSH_CLIENT" ]; then
  alias sudo='echo "Reconsider your wish, you must!   "'
fi

Isso fará com que todas as chamadas para sudo resultem em um aviso. Se você ainda quiser sudo init 0 , deverá digitar \sudo init 0 . O \ fará com que o shell use o comando real, não o seu alias.

No entanto, meu conselho atual para você é parar de usar o sudo nos próximos 5 anos. De verdade.

    
por 13.08.2013 / 20:25