Ao especificar comandos permitidos via sudo
, existem basicamente duas opções fáceis:
- permite um comando específico com qualquer parâmetros ou
- permite um comando específico com um conjunto de parâmetros exatamente especificado .
Como resultado, permitir sudo su - superman
e sudo su superman
requer duas entradas no arquivo sudoers
. Parece que o seu administrador apenas lhe forneceu uma delas.
A sintaxe do arquivo sudoers
realmente não permite que o administrador especifique um comando específico com opções limitadas por curinga ou regexp, porque essas especificações seriam muito fáceis de serem usadas. Como Andrew disse, melhor prevenir do que remediar é a abordagem aqui.
No entanto, observe que sudo su superman
requer sudo
para permitir que o usuário original execute su superman
como raiz . Efetivamente, haverá duas transições de identidade em vez de apenas uma: primeiro do usuário original para a raiz por sudo
e depois da raiz para superman
por su
. A especificação ficaria assim no arquivo sudoers
:
original_user ALL=(root) su superman
Por outro lado, a sintaxe sudoers
tem uma maneira muito mais fácil de permitir que o usuário execute qualquer comando como um usuário específico, se o usuário não estiver muito obcecado com o uso do comando su
.
Se a especificação dos sudoers for escrita assim:
original_user ALL=(superman) ALL
o usuário pode usar sudo -u superman -s
para alcançar um equivalente próximo (mas possivelmente não exato) de sudo su superman
e sudo -u superman -i
para alcançar um exato equivalente de sudo su - superman
.
Por que as pessoas não usam isso, mas insistem em usar sudo su -
constructos? Porque a opção -i
não existia nas versões anteriores de sudo
!
Ele apareceu apenas após o ano 2000, portanto há muita literatura antiga que ainda recomenda a construção sudo su -
, agora obsoleta. E, é claro, antigos usuários e administradores do Unix podem ter isso na memória muscular, então eles vão usá-lo sem pensar.