Então, eu tenho uma entrada que se parece com isso no meu arquivo sudoers:
user1 ALL=(user2) NOPASSWD: /scripts/dir/
Isso permite ao usuário1 executar todos os executáveis em /scripts/dir/
como usuário2 sem digitar suas senhas usando um comando como sudo -u user2 /scripts/dir/script
. No entanto, me deparei com problemas em que os executáveis esperam ser executados com o ambiente do usuário2 ( $PATH, $DISPLAY
, etc). user1 pode realizar isso executando algo como sudo -iu user2 /scripts/dir/script
, que simula um shell de login, mas com a entrada sudoers acima, isso não funciona e eles são solicitados a digitar sua senha. Existe uma entrada sudoers que permitirá que o user1 execute este comando ou, pelo menos, consiga originar o .bashrc, .cshrc, etc. do user2 ao executar comandos?
Encontrei a opção SETENV
, mas isso permite ao usuário1 preservar seu ambiente existente, não assumir o ambiente do usuário2. Eu poderia fazer source /home/user2/.bashrc
seguido por sudo -Eu user2 /scripts/dir/script
; isso daria ao ambiente user1 user2 que será preservado pela opção -E
, mas isso pressupõe que o usuário1 tenha acesso de leitura ao arquivo .bashrc
e que o script não tente executar nenhum comando que o usuário1 não tenha permissão para executar .
A página do manual sudoers indica o seguinte sobre a opção -i
para sudo
:
As a special case, if sudo's -i option (initial login) is specified, sudoers will initialize the environment regardless of the value of env_reset. The DISPLAY, PATH and TERM variables remain unchanged; HOME, MAIL, SHELL, USER, and LOGNAME are set based on the target user. On AIX (and Linux systems without PAM), the contents of /etc/environment are also included. On BSD systems, if the use_loginclass flag is enabled, the path and setenv variables in /etc/login.conf are also applied. All other environment variables are removed.
que parece indicar que é possível fornecer a opção -i
com alguma configuração de sudoers, talvez dando permissão ao usuário1 para executar comandos ALL
ou permitindo especificamente a opção -i
em sudoers, mas espero que haja é uma maneira mais refinada de conseguir isso. Além disso, parece indicar que PATH
e DISPLAY
virão do ambiente do usuário1, que não é o que eu quero.
É claro que eu poderia dar ao usuário1 mais permissões do que o necessário para conseguir isso, mas isso apresenta riscos de segurança.