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.