“bash:! / bin / su”: evento não encontrado "[duplicado]

0

Eu tenho uma linha no script que está funcionando, mas não está funcionando na linha de comando.

echo "User ALL = NOPASSWD: ALL, !/bin/su" | sudo tee -a /etc/sudoers



[user@localhost ~]$ echo "test ALL = NOPASSWD: ALL, !/bin/su" | sudo tee -a /etc/sudoers
bash: !/bin/su": event not found
[user@localhost ~]$

Editar: Estou tentando adicionar um usuário sudo sem permissão ao comando su e o usuário sudo tem acesso sem senha ao root usando sudo -i . Eu estava apenas verificando cada comando desse script e ver como eles funcionam na linha de comando.

Eu encontrei uma solução para isso na linha de comando que eu tenho que usar "'!'"/bin/su . Então, alguém pode me ajudar a explicar por que isso não funcionou na linha de comando?

    
por Food Panda 15.01.2017 / 08:06

3 respostas

5

[Por favor, leia atentamente os comentários que acompanham a sua pergunta, pois parece que você não está fazendo as coisas da maneira correta com sudo ]

Em bash , existe um mecanismo chamado "substituição de histórico" que é ativado na linha de comando. Ele permite inserir todo ou parte de um comando anterior (daí o "histórico") no comando que você está editando.

O caractere que aciona a substituição do histórico é ! . Por exemplo, !WORD é substituído pelo último comando que começa com WORD . Se você não tiver tal comando, bash irá reclamar com a mensagem de erro que você recebeu: bash: !WORD: event not found .

Se você tiver que digitar um ! sem ativar o mecanismo de substituição do histórico, você terá que escapar dele \! ou colocar entre aspas simples '!' .

Por exemplo: echo 'User ALL = NOPASSWD: ALL, !/bin/su' | ...

Se a expansão do histórico for problemática para você, você também poderá desativá-la com set +H , digitar seus comandos sem citar o ! e reativá-la mais tarde com set -H .

    
por 15.01.2017 / 12:54
1

Acredito que isso não ajudará você a impedir que o usuário com privilégio sudo execute o comando su , porque qualquer usuário com sudo privilege pode copiar o su do diretório padrão e executá-lo, como sempre você não pode dar a um usuário um privilégio sudo completo, então evite que ele faça coisas específicas, porque ele sempre encontrará uma maneira de contornar a restrição, você tem que fazer isso ao contrário, dar a ele algum privilégio.

    
por 15.01.2017 / 09:39
1
  1. su não dá poderes especiais para root. Portanto, evitar que alguém com recursos de root o use é inútil.
  2. Edite apenas sudo arquivos com visudo : crie um novo arquivo sudo para aumentar o original e coloque-o em /etc/sudoers.d/ .
  3. Você precisa escapar do ! : "bla bla bla \! bla bla" ou 'bla bla bla ! bla bla' . A cotação única interromperá todas as avaliações da sequência.
por 15.01.2017 / 15:56