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?

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

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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.