Ok, agora eu entendo o que isso está dizendo
Cmnd_Alias CMDS = /usr/sbin/userdel * sysadmin, ... %admin ALL=(ALL) ALL, !SHELLS, !SU, !CMDS, !PASS, !EDIT
infelizmente é uma ideia terrível.
Na segurança, um princípio geral é que você deve ser capaz de descrever o que está permitindo . É surpreendentemente raro poder fazer uma lista do que não é permitido, e ter certeza de que você não perdeu nada.
Especificamente
$ cp /usr/sbin/userdel ./letsbefriends
$ sudo ./letsbefriends sysadmin
(e o mesmo princípio se aplica a uma configuração que bloqueia especificamente sudo su
/ sudo sudo
).
Como um exemplo positivo, considere esta listagem de tarefas permitidas para o seu usuário "admin" [*]:
# admin can run 'reboot'. (They can't run e.g. 'reboot --force').
admin ALL=(ALL) reboot ""
Why [is] "user-3121" missing in /etc/sudoers?
Excelente pergunta! user-3121 é um membro do sudo group . Em /etc/sudoers
, esse grupo é correspondido pela linha %sudo
.
Você pode pensar "Esse é um hack fofo que você me mostrou. Certamente eu poderia pensar em uma maneira de bloquear isso também". E existem abordagens que você pode seguir. Mas você estaria argumentando por causa disso, e tentando não aceitar o princípio geral.
Alguém mais aparece, com uma ideia diferente. O que isso faz? [**]
$ sudo /proc/self/exe sh
São dois exemplos diferentes que você teria que configurar seu sistema para bloquear. Você pode confiar em eu saber mais. Você acaba escrevendo esta configuração personalizada complexa. Os sistemas complexos incluem inevitavelmente bugs. Você deseja criar um sistema personalizado, solucionar problemas e mantê-lo? Normalmente você quer tentar e trabalhar com o sistema operacional que você instalou, para que você possa se beneficiar de todo o trabalho que está sendo desenvolvido, documentando e dando suporte a ele.
[*] Na prática, limitar o sudo a certos propósitos tende a ser mais difícil do que se pode gostar. Eu espero que não seja comum confiar nas regras do sudo para fornecer uma barreira de segurança verdadeira. Em vez disso, é usado para delegar permissão para tarefas específicas, enquanto protege os usuários de si mesmos. Ele reduz as chances de cometer um erro e de escrever zeros em todo o disco rígido valioso ou no firmware da placa de rede.
[**] Spoiler:
sudo /proc/self/exe sh
executaria um shell como usuário root.
Ele ignora a lista de bloqueio definida como SU
, usando a mesma técnica de execução de um comando (sudo) usando um nome de arquivo alternativo que não esteja na lista de bloqueio. Portanto, essa segunda instância de sudo
é executada com êxito como o usuário root
. A configuração publicada permite que o usuário root
execute qualquer comando através de sudo
. A segunda sudo
instance é, portanto, permitida para executar um shell como usuário root.
O shell resultante pode ser usado para executar qualquer comando como root
. O shell não usa o sudo, portanto, ele não vê nenhuma lista de comandos bloqueados em sudoers
. Por exemplo. o shell pode executar su
para efetuar login em um shell executando como qualquer usuário, sem saber sua senha.