Limitações do '!' operador
Geralmente não é eficaz “subtrair” comandos de ALL usando o '!' operador. Um usuário pode contornar isso trivialmente copiando o comando desejado para um nome diferente e executando-o. Por exemplo:
conta TODOS = TODOS, !SU, !SHELLS
Na verdade, não impede que Bill execute os comandos listados em SU ou SHELLS, pois ele pode simplesmente copiar esses comandos para um nome diferente ou usar um escape de shell de um editor ou outro programa. Portanto, este tipo de restrições deve ser considerado, na melhor das hipóteses, consultivo (e reforçado por políticas).
Em geral, se um usuário tiver sudo ALL, não há nada que o impeça de criar seu próprio programa que forneça um shell root (ou de fazer sua própria cópia de um shell), independentemente de qualquer '!' elementos na especificação do usuário.
O que faz o
ele pode simplesmente copiar esses comandos para um nome diferente
significar? É alias de comando ou algo mais?
Os comandos geralmente são arquivos (*) e os arquivos podem ser copiados com nomes diferentes.
por exemplo
Agora, se
sudo
eu pudesse executar qualquer coisa que nãols
fosse root, eu ainda teria permissão para executarlslsls
, que agora tem exatamente o mesmo conteúdo. Mesmo tornar o arquivo original somente de execução (ilegível) não ajudaria muito, já que muitas vezes é possível encontrar outro binário que faça a coisa equivalente. (Certa vez, tive que usar um sistemasudo
configurado para não permitir a execução de/bin/sh
or/bin/bash
. Mas qualquer outra coisa estava ok, incluindo a execução deapt-get
, então considerei apenas instalar o zsh.)(* funções e funções internas do shell seriam uma exceção.)
A página de manual também menciona o uso de "um escape de shell de um editor ou outro programa", que se refere ao uso de comandos como
:shell
ou:!bash
no vi, ou simplesmentesudo perl -e 'exec "sh"'
ousudo awk 'BEGIN { system("sh") }'
(pelo menos no GNU AWK). Nenhum deles seria pego pelas restrições que o sudo implementa.