É possível conceder ao sudo acesso apenas a um comando específico?

24

Antecedentes: Eu tenho uma máquina de desenvolvimento com configuração LAMP. Vários desenvolvedores acessavam a máquina de tempos em tempos. Toda vez que eles fazem alguma alteração em um arquivo de configuração, eles precisam reiniciar o servidor apache usando sudo service apache restartousudo /etc/init.d/apache2 restart

A questão:

O que eu quero agora é que todo desenvolvedor que acesse a máquina não tenha acesso sudo a tudo. Em vez disso, ele só deve poder executar o servicecomando usando sudo e nada mais. É possível fazer isso?

Ankit
fonte

Respostas:

35

Sim.

Faça um novo grupo, web (chame como quiser)

sudo addgroup web

Adicione seus desenvolvedores ao grupo da web (use o nome de login deles).

sudo adduser your_developer_user web

Em seguida, execute sudo visudo -f /etc/sudoers.d/somefile(use um nome significativo em vez de somefile).

Adicione uma linha (use o caminho completo do comando):

%web ALL=(ALL) /usr/bin/service apache2 *

Os desenvolvedores podem executar

sudo service apache

usando sua senha de login.

NÃO adicione seu usuário administrador ao grupo da web.

Consulte man sudoers para obter informações adicionais

Pantera
fonte
1
@ Ankit: dessa forma, os usuários do webgrupo podem iniciar / parar qualquer serviço, e não é isso que você deseja, eu acho. A solução deve ser colocar o comando exato (também com parâmetros) /etc/sudoers.
enzotib
@enzotib posso fazer isso com o que quero dizer, então o novo comando seria, não /usr/bin/service apache2é?
Ankit
3
@Ankit:/usr/bin/service apache2 *
enzotib
Isso também deve ser provavelmente/usr/sbin/service
Erfan