Nome de usuário antes do sudo

7

Eu tenho um script que exige sudo, mas o script precisa definir parâmetros de acordo com o usuário original, como:

chown "${USER}:${USER}" dir

Se eu configurá-lo com o sudo, acabo com chmod root:root , o que não ajuda.

Então, como posso obter o nome de usuário antes do sudo?

    
por e-satis 30.11.2009 / 14:34

3 respostas

10

A variável de ambiente SUDO_USER deve funcionar como um substituto para USER.

Como você está definindo a propriedade como USER: USER, presumo que sempre haja um grupo com o mesmo nome do usuário. Uma solução mais estrita poderia ser usar SUDO_UID e SUDO_GID.

Duas soluções possíveis seriam então:

chown "${SUDO_USER}:${SUDO_USER}" dir

ou

chown "${SUDO_UID}:${SUDO_GID}" dir
    
por 30.11.2009 / 14:42
3

Você pode usar a variável SUDO_USER :

sudo bash -c 'echo $SUDO_USER'

Na página do manual sudo :

sudo utilizes the following environment variables. The security policy has control over the actual content of the command's environment. [...]

SUDO_UID Set to the user ID of the user who invoked sudo.

SUDO_USER Set to the login name of the user who invoked sudo.

    
por 30.11.2009 / 14:41
1

SUDO_USER pode ser substituído pelo usuário.

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

Você deve usar 'who am i' ou 'logname' para obter o nome de usuário original

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

Vindo de link

    
por 23.01.2013 / 15:16