sudoers só funciona ao usar o sudo, como restringir o uso regular?

1

Eu tenho o seguinte no meu arquivo sudoers.d/nginx :

deployer ALL=NOPASSWD: /etc/init.d/nginx reload

Isso funciona se eu executar o comando como sudo:

$ sudo /etc/init.d/nginx start
[sudo] password for deployer: 
Sorry, user deployer is not allowed to execute '/etc/init.d/nginx start' as root on graduation.

No entanto, quando executo o comando como não-sudo , parece que os sudoers são passados. O comando ainda não funciona, mas isso é devido a outros erros de propriedade, não à restrição em sudoers:

$ /etc/init.d/nginx start
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2012/12/30 20:59:49 [warn] 30054#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:12
2012/12/30 20:59:49 [emerg] 30054#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)

Esse comportamento é esperado? E se sim, por que isso está acontecendo? Eu esperaria que a verificação sudoers acontecesse antes de executar um comando. As regras do sudoers aplicam-se apenas aos comandos executados como sudo ? (faz sentido, dado o seu nome).

E se este for o caso, existem outras maneiras de restringir o acesso regular aos comandos sem usar sudo ?

Basicamente, gostaria que meu usuário implementador fizesse apenas duas coisas:

  • possui seu diretório inicial /var/www
  • conseguir executar /etc/init.d/nginx reload

Todas as outras coisas devem estar fora dos limites (idealmente, mesmo cd'ing fora do diretório inicial)

    
por JeanMertz 30.12.2012 / 21:11

1 resposta

9

Esse é o comportamento esperado, o arquivo sudoers é consultado somente quando você executa o sudo, de modo que ele nega o acesso do usuário ao comando e fornece a mensagem de erro relevante.

Quando o usuário tenta executar o comando diretamente, o sudo não está envolvido, portanto, você obtém as mensagens de erro produzidas pelos comandos individuais com falha porque o usuário não tem privilégios.

Se você quiser restringir o usuário a apenas uma atividade, poderá permitir o login via ssh e amarre suas chaves ao comando único usando

command="/usr/bin/sudo /etc/init.d/nginx reload" ssh-rsa AAAAB3NzaC1...

Com essa configuração quando o usuário faz o login, o recarregamento é executado e eles são desconectados.

Se, em uma data posterior, você decidir que precisa que o usuário realize outras operações, poderá estenda esta ideia .

    
por 30.12.2012 / 21:28

Tags