Nome de usuário antes do sudo

8

Eu recebi um script que requer sudo, mas o script deve definir parâmetros de acordo com o usuário original, como:

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

Se eu colocá-lo no sudo, acabo com o chmod root:rootque não ajuda.

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

e-satis
fonte

Respostas:

11

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

Como você está configurando a propriedade como USER: USER, presumo que sempre exista um grupo com o mesmo nome que o usuário? Caso contrário, uma solução mais rigorosa seria 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
andol
fonte
Resposta agradável, com a solução E algumas informações adicionais.
e-satis
Usar o UID / GID é a melhor solução, pois é possível ter vários UIDs com o mesmo nome de usuário.
duffbeer703
4

Você pode usar a SUDO_USERvariável:

sudo bash -c 'echo $SUDO_USER'

Na página do manual do sudo :

O sudo utiliza as seguintes variáveis ​​de ambiente. A política de segurança tem controle sobre o conteúdo real do ambiente do comando. [...]

SUDO_UID Configure como o ID do usuário que chamou o sudo.

SUDO_USER Defina como o nome de login do usuário que chamou o sudo.

Kyle Brandt
fonte
Mas por que sudo echo $SUDO_USERnada produz?
Robert
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 'quem sou eu' 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 /programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands

cladmi
fonte
Depois de executar 'sudo su -' o ambiente variáveis não estão disponíveis, mas lognamee who am itrabalho.
RickMeasham
Você está certo, não é possível confiar na variável de ambiente.
Cladmi 5/03/2015
Encontrado em algum host que SUDO_USER não pode ser substituído: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER portanto, ainda pode ser seguro, ainda deve verificar isso.
Cladmi
É porque meu comando está definido como "NOPASSWD", portanto depende da configuração dos sudoers via "NOSETENV".
Cladmi