Você deve usar sudo
para isso, não su
. Com o sudo, você pode especificar NOPASSWD
em /etc/sudoers
:
username ALL=/path/to/command NOPASSWD: ALL
Como é possível configurá-lo de forma que su
para o mesmo usuário atualmente conectado, ou seja,
foo$ su -c 'something' foo
não requer uma senha? Isso não adicionaria nem removeria nenhuma segurança, como deveria ser noop.
O motivo para querer isso é que eu gostaria de ter uma classe de usuários "abaixo" de raiz que possa administrar alguns serviços específicos na máquina que é executada sob esse usuário, por exemplo, news
ou mysql
dados, altere a configuração, reinicie, etc.). Esses usuários receberão sudo
direitos para essa conta, e isso geralmente funciona bem, exceto que os scripts de inicialização, em alguns casos, chamam
su -c 'start_daemon ...' daemonuser
e isso reduz esse esquema. É claro que posso alterar os scripts de inicialização ou adicionar permissões sudo
adicionais, mas gostaria de evitar esse tipo de exceção, porque elas são uma bagunça para manter a longo prazo.
A configuração para su
está no PAM, então a magia certa possivelmente está lá.
Você deve usar sudo
para isso, não su
. Com o sudo, você pode especificar NOPASSWD
em /etc/sudoers
:
username ALL=/path/to/command NOPASSWD: ALL
Acho que há um mal-entendido básico aqui.
Those users would get sudo rights to that account, and that usually works well, except that the init scripts in some cases call su -c 'start_daemon ...' daemonuser and that brings down this scheme.
Quando um script de inicialização faz su -c <start_daemon> <daemon_user>
, o que ele está fazendo é mudar o contexto no qual o daemon está sendo executado.
por exemplo, nossos scripts tomcat fazem exatamente isso para que o daemon possa ser executado com as permissões de usuário "tomcat".
Agora, se você for alterar os scripts de inicialização para fazer su -c <start_daemon> <your_user>
, VAI DESAFIAR o daemon como ele espera que seja executado em um determinado ambiente.
Dar permissão de usuários para esses scripts, como todos já disseram, é a maneira correta de dar a eles a capacidade de gerenciar esses daemons.
Você pode fazer isso editando o arquivo PAM do su em /etc/pam.d e usando o módulo pam_succeed_if. O arquivo já tem uma entrada para root, então copie essa linha e adicione outra depois dela.
conta suficiente pam_succeed_if.so uid = 0 use_uid quiet
conta suficiente pam_succeed_if.so uid = [seu UID aqui] use_uid quiet
Execute visudo e adicione esta linha:
yourusername ALL = (TODOS) NOPASSWD: / bin / su - seu nome de usuário
e adicione isso ao início do script de inicialização:
alias su = 'sudo su'
"Dar aos seus usuários sudo permissão para esses scripts, como todos os outros já disseram é a maneira correta de dar a eles a capacidade de gerenciar esses daemons." - Zypher
Isso é o que eu faria. Ele está dizendo que você deve permitir que os usuários executem os scripts (e somente os scripts) como root editando o arquivo sudoers. Desde root pode su em qualquer lugar sem senha, os scripts devem rodar bem. Eu estou fazendo exatamente isso agora, na verdade.
Tenha em mente que os initscripts são executados como root, é por isso que o su está lá (para descartar privilégios de root).