'sudo -u usuário' na linha shebang

3

Gostaria de poder executar um script como outro usuário e apenas como esse usuário.

A maneira que eu tenho atualmente esta configuração é ter

alice   ALL = (bob) NOPASSWD: /home/alice/script.sh

no arquivo sudoers e

alice@foo:~$ ls script.sh
-rwxr-xr-x  1 root  root ..... script.sh

alice@foo:~$ lsattr script.sh
----i----------- script.sh

alice@foo:~$ head -1 script.sh
#!/bin/bash

alice@foo:~$ sudo -u bob ./script.sh
ok

Existe uma maneira de fazer com que a linha shebang seja algo como

#!/usr/bin/sudo -u bob -- /bin/bash

para que o Alice pudesse rodar

alice@foo:~$ ./script.sh
ok

?

Se eu tentar isso, simplesmente recebo a mensagem de erro

sudo: unknown user:  blog -- /bin/bash
sudo: unable to initialize policy plugin  
    
por Samizdis 09.03.2016 / 00:04

2 respostas

4

O Linux (como muitas outras variantes do Unix) suporta apenas passar um único argumento para o interpretador de um script. (O interpretador é o programa na linha shebang.) Um script começando com #!/usr/bin/sudo -u bob -- /bin/bash é executado chamando /usr/bin/sudo com os argumentos -u bob -- /bin/bash e /home/alice/script.sh .

Uma solução é usar um script de wrapper: fazer /home/alice/script.sh contain

#!/bin/sh
exec sudo -u bob /home/alice/script.real

e coloque o código em /home/alice.script.real começando com #!/bin/bash e faça a regra sudo se referir a /home/alice.script.real .

Outra solução é fazer com que o script se reexecute. Você precisa ter cuidado para detectar a condição desejável corretamente, caso contrário você corre o risco de criar um loop infinito.

#!/bin/bash
if ((EUID != 123)); then
  exec sudo -u \#123 /home/alice/script.sh
fi

(onde 123 é o ID do usuário de bob )

Uma solução simples é dizer às pessoas para executar sudo -u bob /home/alice/script.sh em vez de executar o script diretamente. Você pode fornecer aliases de shell, .desktop files, etc.

    
por 09.03.2016 / 01:13
1

Tente usar o alias:

alias bobscript="sudo -u bob ./script.sh"

e execute:

bobscript
    
por 09.03.2016 / 00:41

Tags