Permitir que o usuário execute o comando como outro usuário com seu ambiente em sudoers

2

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.

    
por dramzy 21.01.2017 / 18:06

1 resposta

0

Então, não consegui encontrar uma maneira segura de fazer isso, então acabei usando a opção SETENV: na entrada sudoers e antes de emitir comandos como user1, eu forneço .bashrc do user2 e forneço a -E opção ao invocar o sudo. Esta não é uma maneira segura de realizar o que eu queria fazer porque o user1 pode configurar sua variável de ambiente PATH de uma maneira que permita executar executáveis arbitrariamente como usuário2.

    
por 28.01.2017 / 21:48