Suspender SUDO em Bash Script? [duplicado]

-1

Eu tenho o bash-script que usa comandos sudo, mas no meio eu preciso parar a influência do sudo e depois restabelecê-lo.

Versão muito simples usando o Pseudo-código

sudo apt-get install -y synaptic
sudo ...
// I need to suspend sudo here, otherwise the folder 
// is created with root as the owner.
mkdir ~/mystuff
// then reinstate it here
sudo apt-get install -y ssllib

O sudo solicita a frase secreta assim que ela começa a executar um script bash - ou - ela só pergunta quando encontra a primeira linha "sudo"?

Se sim, então eu acho que posso mover todas as coisas não-sudo para o topo. Mas, o problema é que eu terei que esperar até que a primeira linha "sudo" seja encontrada para depois inserir a frase secreta.

    
por X10WannaBe 06.10.2017 / 23:28

2 respostas

2

sudo oferece a opção -u para isso, consulte man sudo :

-u user, --user=user
 Run the command as a user other than the default target user (usually root).
 The user may be either a user name or a numeric user ID(UID) prefixed
 with the ‘#’ character (e.g.  #0 for UID 0).  When running commands as a UID,
 many shells require that the ‘#’ beescaped with a backslash (‘\’).
 Some security policies may restrict UIDs to those listed in the password
 database. The sudoers policyallows UIDs that are not in the password database
 as long as the targetpw option is not set. Other security policies may
 not support  this.

Para o seu exemplo, isso seria:

sudo -u USERNAME mkdir /home/USERNAME/mystuff
    
por dessert 06.10.2017 / 23:33
2

Dado seu script atual, não, o comando mkdir não será executado com sudo . sudo não começa a afetar magicamente comandos que não são iniciados. Também não pede magicamente senha antes de ser executada.

O que pode estar acontecendo é que você pode ter executado todo o seu script com sudo . Se for esse o caso, você pode verificar se isso é verdade e pedir ao usuário para executá-lo sem sudo :

if [ -n "$SUDO_COMMAND" ]
then
    echo "Please don't run this script with sudo."
    exit
fi

Ou alterne para o usuário real para esses comandos:

if [ -n "$SUDO_USER" ]
then
    sudo -iu "$SUDO_USER" sh -c 'mkdir ~/mystuff'
fi

Você pode precisar do sh -c porque ~ é expandido pelo shell que está executando o script e, dependendo do sudo settings, esse shell pode achar que o diretório inicial é o root.

    
por muru 06.10.2017 / 23:41