Com sysvinit
, uma sudoers
entrada como essa seria suficiente:
%webteam cms051=/sbin/service httpd *
Isso permitiria comandos como:
sudo service httpd status
sudo service httpd restart
Agora, com systemd
, o nome do serviço é o argumento final. Ou seja, a reinicialização do serviço seria feita com:
systemctl restart httpd.service
Naturalmente, pensei em definir o comando como systemctl * httpd.service
funcionaria, mas isso permitiria algo como o systemctl restart puppet.service httpd.service
que não é o efeito desejado.
Considerando isso, qual seria a melhor maneira de permitir que usuários não raiz controlem um system.d
serviço? Isso não precisa ser sudoers
; talvez uma alteração na permissão do arquivo seja suficiente?
sudo
configuração há algum tempo, mas você não poderia simplesmente fazer algo assimcms051=systemctl * httpd.service
?Respostas:
Basta adicionar todos os comandos necessários
sudoers
separadamente:fonte
cms051
?*
ou padrões semelhantes.A resposta de @ jofel foi exatamente o que eu precisava para ter uma configuração funcional. Poste isso para qualquer um que tropeçar nessa questão. Eu precisava de uma maneira de
capistrano
reiniciar meu aplicativo Ruby depois de implantá-lo na minha máquina local. Isso significa que eu precisava de acesso sem senha para reiniciar ossystemd
serviços. É isso que eu tenho e funciona maravilhosamente!Nota : meu usuário e grupo é chamado
deployer
Colocar código em um arquivo personalizado aqui:
/etc/sudoers.d/deployer
Código:
fonte
deployer
, você deve executar osystemctl
comando com o sudo.Crie um alias de comando com os comandos aos quais deseja que eles tenham acesso. Em seguida, atribua o grupo ao apelido de comando:
Também é uma boa prática colocar edições no seu /etc/sudoers.d/filename em vez de editar diretamente o arquivo sudoers. Certifique-se de apontar para o seu .d / nome do arquivo nos sudoers, o que a maioria das novas distribuições faz de qualquer maneira. Colocar essas 2 linhas nos sudoers deve fazer o truque:
Nota: Esse # na frente do includedir não é um comentário. Deve permanecer.
fonte
É mais seguro discriminá- los como sugere Jofel .
Se eu quisesse permitir que alguém usasse um subconjunto limitado das habilidades de um comando, não confiaria em caracteres curinga em uma linha de sudoers para fazê-lo. Mesmo se a linguagem fosse mais expressiva do que os shell globs, existem muitos casos de canto para acompanhar.
A
service httpd *
linha " " é relativamente segura porque (verifique isso :)service
possui apenas um sinalizador útil (--status-all
) que não faz nada particularmente sensível e (verifique isso também :))/etc/init.d/httpd
aceitará apenas as linhas de comando que você deseja permitir.Se houver tantas combinações que listá-las se tornem estranhas, você provavelmente deve questionar o que está fazendo. Mas você pode dar a eles acesso a um script auxiliar cuidadosamente escrito que executa o comando para eles (muito parecido
/etc/init.d/http
). Mesmo nesse caso, você deve ser o mais preciso e explícito possível para listar exatamente quais comandos e opções são permitidos e não passar nenhuma entrada do usuário diretamente para o comando target.fonte