Como você desativa os comandos assustadores do terminal?
Eu estava usando o SSH para acessar um servidor Ubuntu remoto sem acesso ao servidor físico. Eu pensei que estava digitando ' shutdown
' no servidor NoSQL em execução no Ubuntu OS, mas na verdade eu disse ao servidor Ubuntu para desligar. Então eu tive que dizer ao administrador do servidor o que fiz para que ele pudesse iniciar o servidor físico para mim. Isso foi embaraçoso!
Como posso impedir que isso aconteça novamente?
rm
quais tem piores efeitos colaterais do queshutdown
. Conclusão: não há como impedir que coisas ruins aconteçam se você continuar executando comandos aleatórios como root.Respostas:
A resposta padrão é "não faça login como root". Todos os comandos executados como root são assustadores. Se isso não for uma opção, você poderá colocar alguns comandos de alias no seu
.bashrc
para desativar os comandos que achar especialmente assustadores. Por exemplo:Em seguida, se você digitar shutdown, receberá a seguinte mensagem:
( Verifique se você
.bashrc
carregou primeiro, antes de tentar isso em um servidor de produção)Sair da
ssh
sessão atual e efetuar login novamente, ou usar. ~/.bashrc
deve carregar / executar .bashrc. Talvez tente executarrm
sem argumentos para garantir que seu servidor não desabilite o carregamento automático.bashrc
em logins ou similares.Observe que se você estiver preocupado principalmente com a parada e o desligamento, considere instalar o molly-guard , o que fará com que você digite o nome do host antes de desligar a máquina. Isso é mais útil se você desligar regularmente SOs inteiros na linha de comando, mas quiser ter certeza de que está desligando o sistema correto.
Você também pode testar a tentativa com um comando menos assustador, como logout ou exit.
fonte
source
é um alias para.
e não é suportado por todos os shells.~/.bash_profile
fonte padrão.bashrc
, que não é um comportamento padrão e na maioria dos sistemas,.bashrc
não é lida ao efetuar login via ssh, portanto, isso não fará diferença. É muito melhor para adicionar os aliases para~/.profile
ou~/.bash_profile
em seu lugar.sudo
existe por uma razão - use-o. Quando seu comando (neste caso, uma CLI interativa) é concluído, você volta ao seu shell no nível do usuário, não ao shell raiz. Existem muito poucas razões dignas para estar em um shell raiz. (Estou surpreso que isso ainda não seja uma resposta ...)Dito isto, não seja um muppet que usa
sudo
para tudo . Entenda o que você está fazendo e entenda por que ele requer / não requer privilégios de root.Além disso, você pode diferenciar sua solicitação de shell root / usuário. Isso também torna mais óbvio que você está de volta ao prompt do shell e não a " outra CLI ". O meu é muito colorido e possui muitas informações úteis (como o nome do host), o que torna muito simples saber em qual host o comando será executado, além de facilitar a visualização do histórico e a localização de prompts - uma raiz O shell usa o prompt padrão.
Isso é mais adequado para uso na conta " sua ", mas se você estiver levando a sério a segurança / administrador de sistema, não estará compartilhando senhas / contas e não estará sentado em um shell raiz sem estar totalmente ciente.
Como as pessoas disseram repetidas vezes, " comandos alternativos para criar um ambiente seguro são uma má idéia ". Você se sentirá confortável em seu ambiente seguro, digitando os comandos 'assustadores' onde não deveria. Então, um dia, você mudará de emprego ou acessará uma nova máquina e emitirá " whoopsy, eu não pretendia, me desculpe " ...
fonte
sudo
é a sua vez de pegar o café.sudo shutdown
? Se ele executá-lo na máquina errada, ainda será um desastre.sudo
é um comando shell, não tem nada a ver com o banco de dados.sudo shutdown
, pois presumo quesudo
não seja um comando NoSQL. Não estar em um shell raiz teria resolvido totalmente esse problema e seria uma idéia muito boa. O mesmo ocorreria com atenção ao prompt antes de executar comandos importantes.O pacote 'molly-guard' (pelo menos nos sistemas derivados do Debian) instalará um wrapper em torno do desligamento, parada, desligamento e reinicialização. Se detectar que o terminal é remoto, ele solicitará o nome do host. Se não corresponder, o comando será cancelado.
fonte
rm -rf /
?set -u
pode ajudar com isso em alguns casos, como ao escreverrm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT
.--no-preserve-root
que você dificilmente digite por acidente.Aceitei uma resposta de que gosto muito, no entanto, se alguém mais estiver lendo e quiser uma resposta mais simples, aqui está a minha.
Encontre o arquivo .bashrc e coloque como a última linha:
Então, quando você digita shutdown, obtém algo como
~bash: notforuse is not a command
Isso pode ser bobo, mas é simples e funciona. Eu aprecio respostas com melhores maneiras de fazer isso, no entanto!
fonte
rm
troll pessoas -alias rm='echo "You can't use rm!" #'
notforuse
no caminho.~/.SaveMyReputation
e adicionar a última linha da sua.bashrc
linha como[ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation
. Você pode adicionar eventualmente uma linha extraecho "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell"
dentro desse arquivo. Pelo menos você pode trazer esse arquivo de alias em outra máquina (deveria ser.bash_aliases
, mas nesse caso "obsoleto" é melhor usar outro nome).alias shutdown=shutdown-disabled-by-an-alias
. (Isso aborda apenas o terceiro e o menor problema apontado por @DavidRicherby.) Embora ainda seja provável que demore apenas 2 segundos para a próxima pessoa deixar de ver,notforuse is not a command
executartype -a shutdown
e localizar o alias, digitandosudo \shutdown
para desativar a expansão do alias. (Supondo que eles tenham umsudo
alias parasudo='sudo '
que ele expanda aliases em seu primeiro argumento).Para
shutdown
(reboot
,halt
e afins): Eu tenho uma cópia com me perguntam se eu sou realmente certo (e ele não faz nada de qualquer maneira). Eu guardo esses scripts em/usr/local/sbin
. No Debian, isso tem outra prioridade/sbin
(é o primeiro diretório do PATH).Os scripts do sistema usam o caminho completo; portanto, esse hack me impede de parar um servidor remoto em vez da máquina local (um mau comportamento do Awesome WM), mas não tem outro efeito indireto, e ainda posso usá-los como / sbin / shutdown quando realmente necessário .
fonte
shutdown
em um sistema crítico que não possui seu hack.O arquivo Sudoers permite um nível de granularidade muito mais fino do que apenas * 'pode usar o sudo' *; em particular, você pode usar aliases de comando para criar listas brancas de grupos de comandos aos quais um usuário ou grupo específico está restrito. Trabalhei com servidores remotos restritos ao acesso ssh e permitia o sudo sem senha (exigimos chaves ssh protegidas por senha). Existem algumas boas razões para fazer isso, mas ele tem perigos, então usamos aliases de comando para permitir acesso irrestrito às coisas que eles precisam fazer (reiniciar servidores etc.) sem conceder privilégios a eles por coisas que não eram.
Também existe uma sintaxe para dizer 'não é possível executar este comando' . Ele pode ser contornado, portanto não deve ser usado como uma medida de segurança real, mas funcionaria para o cenário que você descreveu.
Man sudoers tem alguns bons exemplos de como configurar tudo isso.
Claro que isso requer o uso do sudo, mas isso não é necessário dizer.
fonte
Você pode ter sido vítima de alguma nova estupidez do Ubuntu.
O Ubuntu costumava ter o
shutdown
comando clássico normal, que requer um argumento de tempo obrigatório.Aqui está o que acontece no Ubuntu 12 se eu digitar
shutdown
, mesmo como um usuário comum:Então
Agora, aqui está o Ubuntu 16.10. Eu não sou root:
Sem argumentos, ele agenda o desligamento por 60 segundos depois, e mesmo se você não for root, apenas uma conta criada com privilégios de administrador.
Culpa canônica.
fonte
/sbin/shutdown
é fornecido porsystemd-sysv
pacote por padrão, então não é estupidez do Ubuntu, ésystemd
estupidez, e não vem do Ubuntu, mas pelo menos do Debian, o que, por sua vez, parece levar todo osystemd
movimento da Red Hat. Ao culpar, culpe a entidade correta - não apenas a que você não gosta.Para desligamento, há molly-guard. Você só precisa instalá-lo e quando você tenta desligar via ssh, ele solicita que você digite o nome do host.
Para excluir arquivos, existem soluções como a libtrash, que emula uma lixeira por meio de uma
LD_PRELOAD
biblioteca.E você pode testar quais arquivos você está alterando / excluindo / ... com o programa talvez . Isso é muito legal ao testar algo.
fonte
maybe
parece ter sido interrompido pelo design: remover alguns syscalls com no-ops travará qualquer programa não trivial que dependa desses syscalls para ter sucesso.Tente o seguinte: quando você estiver em um shell remoto, toda vez que estiver digitando a tecla "return", pare por 5 segundos, com o dedo pairando na tecla "return" e reler o comando que está prestes a enviar. Tudo bem? Você tem certeza?
Isso parece duro, mas, por outro lado, não devemos gastar muito tempo com projéteis remotos. Devemos encontrar todas as maneiras de automatizar nosso trabalho de manutenção, para que raramente, se é que alguma vez, precisamos efetuar login em um servidor remoto.
fonte
shutdown
, parei por 5 segundos, reli o comando (em voz alta!) E tenho certeza de que estava correto. Em seguida, pressione enter e o comando acabou de ser executado. Portanto, isso não desabilitou os comandos assustadores. Vou tentar com essa coisa pairando no dedo, talvez a distância fosse muito pequena / grande.