Como o sudo deve ser usado?

24

Eu tentei configurar sudoantes, mas não tive muita sorte com isso. Qual é a diferença su -l -c "x"? Parece que através do arquivo de configuração, é possível fazer com que um usuário possa ter acesso apenas a determinados comandos e mais. Eu sempre pensei sudocomo uma maneira de alinhar um comando como outro usuário ou grupo. Como distros como o Ubuntu e o Mint facilitam o processo, essencialmente fornecendo ao usuário principal acesso fácil ao root através de uma senha, não tenho muita certeza de qual é o uso pretendido.

Como adiciono um usuário ao arquivo sudo, concedendo a ele direitos para executar apenas certos comandos no root? Também não quero abrir brechas na segurança.

Naftuli Kay
fonte

Respostas:

16

Para operação básica - executando comandos como root - a diferença mais visível entre sudo e su é que sudo requer a senha do usuário que está chamando (por exemplo, sua senha), enquanto su requer a senha do usuário de destino (por exemplo, a senha root). As implicações de segurança foram discutidas extensivamente em uma pergunta anterior: Qual é a maneira mais segura de obter privilégios de root: sudo, su ou login? .

O Sudo possui recursos adicionais além dos su's. Em particular, depois de ter a senha de um usuário, você pode executar qualquer comando como esse usuário. Por outro lado, o sudo pode ser configurado para que o usuário que o invoca possa executar apenas comandos específicos como outro usuário. Isso é possível porque o sudo não requer autenticação (além de confirmar que você está digitando sua senha - mas isso é sutilmente diferente de autenticar o usuário para uma tarefa).

Você altera a configuração do sudo executando o visudocomando como root (nunca edite a configuração diretamente). Verifique se a variável de ambiente EDITORou VISUALestá definida como seu editor favorito ou você pode obter um editor desconhecido. A sudoerspágina de manual é um pouco concisa, mas tem exemplos. Para permitir que o usuário bobexecute /bin/foo(com qualquer número de argumentos) e /bin/bar --safe(mas não com qualquer outro argumento) como root, use as seguintes linhas:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
Gilles 'SO- parar de ser mau'
fonte
2
sudoé uma invenção impressionante
tshepang
11
Se o sudo requer a senha root ou a senha root depende da configuração. Pode ser configurado de qualquer maneira.
Jonathan M Davis
3
@Tshepang Amen, irmão. Se eu tivesse que liberar a senha root e explicar aos técnicos de suporte sobre como fazer SU e não fazer nada além de apache2ctl gracefuleu acho que preferiria cortar meus pulsos e acabar logo com isso.
Shadur
6

A maior diferença é que sudovocê não precisa da senha de root para executar um comando como root, como faria su. Você precisa da senha root para adicionar alguém ao sudoersarquivo, mas, posteriormente, essa pessoa poderá executar todos ou alguns (se você o tiver restringido) como root sem precisar de uma senha adicional.

A outra diferença é, como você observou, sudopermite um controle muito mais preciso sobre exatamente quais comandos podem ser executados.

Para detalhes do formato do sudoersarquivo, execute man sudoers. Você encontrará exemplos de permitir que apenas determinados comandos sejam executados como root. A estrutura básica de cada linha é:

user_list host_list = cmd_list

O cmd_list pode incluir detalhes de qual usuário o usuário real tem permissão para alternar. Por exemplo, você pode permitir que um webmaster mude para wwwroot para reiniciar o apache, mas não para fazer o root. Também pode incluir outras opções, como se a senha do usuário é necessária antes da mudança (esse é o padrão).

Uma linha de exemplo pode ser:

joe  ALL=(ALL) ALL

o que significa: deixe joe executar qualquer comando em qualquer host como qualquer usuário. Uma linha mais apertada pode ser:

joe  ALL=(operator) /usr/local/ops/

o que significa: deixe joe executar qualquer comando no diretório / usr / local / ops como o usuário "operador".

Existem muitos exemplos no final da página do manual sudoers.

Você deve editar /etc/sudoerscom o comando visudo. Isso verifica se o arquivo é legal e ajuda a impedi-lo de quebrá-lo acidentalmente.

Dave Jennings
fonte
A necessidade ou não de uma senha ao usar o sudo depende inteiramente de como o sudoersarquivo está configurado. Pode ser configurado para exigir uma senha ou para não exigir uma senha.
Jonathan M Davis
Práticas comuns adicionais para evitar alterar o arquivo principal / etc / sudoers porque o IDS o observa e porque sua formatação pode arruinar o seu dia: Use snippets do sudo como arquivos separados em /etc/sudoers.d. Usar o grupo de roda para pessoas permitia qualquer comando.
bbaassssiiee 31/07
2

Além das outras respostas, o sudo fornece recursos de registro para que você possa acompanhar quais comandos foram executados e quem. Isso não é para fins de segurança, pois um usuário mal-intencionado que obtém acesso ao sudo pode acabar com o log. É muito útil, porém, descobrir exatamente o que você ou algum outro administrador fez com os olhos turvos às 2h da semana passada.

JRW
fonte
3
É para fins de segurança, porque o sudo suporta o log no syslog que, em qualquer instalação importante relacionada à segurança, será configurado para efetuar logon em uma máquina remota separada, de modo que, se um sistema for comprometido, os logs não possam ser efetuados.
Arrowmaster
Atributo de arquivo somente de acréscimo pode ajudar um pouco chattr + a / var / log / secure
bbaassssiiee