2013-02-18 19:36:35 +0000 2013-02-18 19:36:35 +0000
108
108
Advertisement

Como verificar se tenho acesso ao sudo?

Advertisement

Recentemente tive problemas por causa disto.

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file. This incident will be reported.

Existe alguma forma de verificar se tenho acesso ao sudo ou não?

Advertisement
Advertisement

Respostas (9)

123
123
123
2013-02-18 19:51:06 +0000

Run sudo -v. É normalmente usado para estender o tempo limite da sua palavra-passe sudo, mas pode ser usado para determinar se tem algum privilégio sudo.

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].

Excerto da página Man:

Se for dada a opção -v (validar), o sudo irá actualizar o carimbo de tempo do utilizador, solicitando a palavra-passe do utilizador, se necessário. Isto prolonga o tempo limite do sudo por mais 5 minutos (ou qualquer que seja o tempo limite definido nos sudoers) mas não executa um comando.

Se o seu utilizador só pode executar comandos específicos, este comando irá funcionar, indicando que tem permissão para executar qualquer coisa com privilégios diferentes. Embora a mensagem pareça diferente quando tenta executar um comando que não lhe é permitido neste caso (e ** nenhum e-mail é enviado para o root** ), ainda assim é possível que tenha problemas se os administradores lerem /var/log/secure.

$ sudo ls
[sudo] password for [username]: 
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].

Para descobrir _ o que_ lhe é permitido executar com diferentes privilégios, pode usar sudo -l. Note que este comando requer que introduza a sua palavra-passe.

43
43
43
2014-12-17 22:55:06 +0000

Isto é muito simples. Run sudo -l. Isto irá listar os privilégios do sudo que você tem.

12
Advertisement
12
12
2016-06-14 00:49:56 +0000
Advertisement

Aqui está a versão amigável ao script:

timeout 2 sudo id && echo Access granted || echo Access denied

, uma vez que não ficará colado na entrada da senha se não tiver o acesso sudo.

Também pode configurá-lo numa variável como:

timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"

Nota: No macOS, precisa de instalar o coreutils, por exemplo, o brew install coreutils.

9
9
9
2017-12-30 18:57:38 +0000

Resposta de Gerald Schade aqui , ainda pode ser melhorado!

Utilização

prompt=$(sudo -nv 2>&1)
if [$? -eq 0]; then
  # exit code of sudo-command is 0
  echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
  echo "has_sudo__needs_pass"
else
  echo "no_sudo"
fi

Aqui está um exemplo completo de utilização num script :

#!/usr/bin/env bash

is_root () {
    return $(id -u)
}

has_sudo() {
    local prompt

    prompt=$(sudo -nv 2>&1)
    if [$? -eq 0]; then
    echo "has_sudo__pass_set"
    elif echo $prompt | grep -q '^sudo:'; then
    echo "has_sudo__needs_pass"
    else
    echo "no_sudo"
    fi
}

elevate_cmd () {
    local cmd=$@

    HAS_SUDO=$(has_sudo)

    case "$HAS_SUDO" in
    has_sudo__pass_set)
        sudo $cmd
        ;;
    has_sudo__needs_pass)
        echo "Please supply sudo password for the following command: sudo $cmd"
        sudo $cmd
        ;;
    *)
        echo "Please supply root password for the following command: su -c \"$cmd\""
        su -c "$cmd"
        ;;
    esac
}

if is_root; then
    echo "Error: need to call this script as a normal user, not as root!"
    exit 1
fi

elevate_cmd which adduser
3
Advertisement
3
3
2017-02-28 02:27:06 +0000
Advertisement

Para mim, “sudo -v” e “sudo -l” não funcionam num guião porque por vezes são interactivos (pedindo-me uma palavra-passe, como mencionado acima). O ‘sudo -n -l’ também não funcionou, ele deu o código de saída ‘1’ embora eu tenha permissões sudo, devido à senha que faltava. Mas estender o comando para:

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

foi um sucesso para mim para o script. Esta expressão dá 0 se o utilizador actual puder chamar ‘sudo’ e 1 se não puder.

Explicação: O parâmetro adicional -n a sudo impede a interactividade.
A saída $A do comando ‘sudo -n -v 2>&1’ pode ser: - vazio (neste caso, o sudo pode ser chamado pelo utilizador actual), ou: - uma nota que o utilizador actual não está autorizado para o sudo, ou: - um texto de pergunta para a password (neste caso, o utilizador está autorizado). (“asswor” caberá para uma “password” inglesa, bem como para uma “Passwort” alemã).

2
2
2
2017-10-01 22:31:29 +0000

tenho uma baixa patente para votar e comentar, mas queria elevar a resposta de Gerald Schade, pois descobri que a única maneira anteriormente, e pensei que ninguém mais o sabe - até agora :D

btw minha solução:

[["$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'*]]

(a partir do final de 2015 mwhaaaa)

1
Advertisement
1
1
2020-02-11 09:15:13 +0000
Advertisement

Isto deve ser suficiente para lhe dizer se tem ou não raiz:

sudo whoami

Se sudo pede a palavra-passe de raiz, ou não funciona, significa também que não tem privilégios de raiz (pelo menos não através de sudo).

1
1
1
2016-08-30 17:58:05 +0000

O “Sudo access” vem em sabores. Dois sabores primários: Primeiro você, ou um membro do seu grupo, precisa de ser configurado para acesso sudo no ficheiro /etc/sudoers.

Segundo você precisa de saber a sua senha, ou você precisa de ter feito um comando sudo recentemente. Recentemente o tempo limite ainda não expirou. (Facto engraçado: pode fazer o tempo esgotado no ficheiro do seu sudoer)

Muitas vezes quero testar para o segundo tipo de acesso no prolongamento de um script que precisará de sudoer alguns passos. Quando esta verificação falha, posso aconselhar o utilizador a activar o segundo tipo de acesso antes de executar o script.

bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled

O -S diz ao sudoer para ler a password do stdin. O -p define um prompt vazio. O -K limpa a segunda vez de acesso.

Uma vez que envia stderr para /dev/null, irá também verificar se o utilizador tem o primeiro tipo de acesso sudo.

-5
Advertisement
-5
-5
2013-02-18 19:41:36 +0000
Advertisement
-->

Siga estes passos para ver o ficheiro dos infractores. Se você está lá dentro, você tem o sudo. Se não, pode adicionar você mesmo.

  1. su
  2. visudo
  3. No fundo do ficheiro, introduza your_username_here ALL=(ALL) ALL
  4. Clique em ESC e digite :wq
  5. Digite exit
  6. Volte a executar o comando que necessitava dos sudo
  7. Introduza a sua palavra-passe (não a palavra-passe da raiz)
Advertisement

Questões relacionadas

6
10
5
37
6
Advertisement