Solicita que o usuário efetue login como root ao executar um script de shell

16

O problema que estou tendo é quando eu insiro o comando

su - root

no início do meu arquivo de script de shell, ele solicita que o usuário insira a senha e, em seguida, NÃO continua com o restante do script de shell. Eu então tenho que manualmente localizar e executar o script de shell via terminal. Eu quero o script para se certificar de que o usuário faça login como root e continue com o resto do script de shell.

Em outras palavras, quero executar o script como qualquer usuário, mas assim que o script começar a ser executado, o usuário deverá mudar para root e continuar com o restante do script como root até que seja concluído. Isso pode ser feito?

    
por Alias 28.05.2014 / 20:13

4 respostas

33

Isso é muito fácil de realizar:

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

Quando o usuário atual não é root, execute novamente o script em sudo .

Observe que estou usando sudo aqui em vez de su . Isso porque permite preservar argumentos. Se você usa su , seu comando teria que ser su -c "$0 $@" , o que iria mangle seus argumentos se eles tivessem espaços ou caracteres de shell especiais.

Se o seu shell é bash, você pode evitar a chamada externa para whoami :

(( EUID != 0 )) && exec sudo -- "$0" "$@"
    
por 28.05.2014 / 20:21
7

Você também pode verificar o UID:

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi
    
por 28.05.2014 / 21:00
5

Você pode chamar o script e verificar:

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...
    
por 28.05.2014 / 20:21
0

No ponto em que você deseja fazer login, basta adicionar o seguinte comando

sudo su

Isso está funcionando perfeitamente com meu código

    
por 07.08.2017 / 09:20