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

Hoe kan ik controleren of ik sudo toegang heb?

Ik ben hierdoor recentelijk in de problemen gekomen.

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

Is er een manier om te controleren of ik sudo toegang heb of niet?

Antwoorden (9)

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

Run sudo -v. Het wordt meestal gebruikt om de time-out van het sudo-wachtwoord te verlengen, maar kan gebruikt worden om te bepalen of u enige sudo-rechten heeft.

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

Man pagina uittreksel:

Indien de -v (valideren) optie wordt gegeven, zal sudo de tijdstempel van de gebruiker updaten, waarbij indien nodig wordt gevraagd om het wachtwoord van de gebruiker. Dit verlengt de time-out van sudo met nog eens 5 minuten (of wat de time-out ook is ingesteld in sudoers) maar voert geen commando uit.

Indien uw gebruiker alleen specifieke commando’s mag uitvoeren, zal dit commando werken, wat aangeeft dat u sommige commando’s mag uitvoeren met verschillende privileges. Hoewel het bericht er anders uitziet wanneer je probeert een commando uit te voeren dat je in dit geval niet mag uitvoeren (en er geen mail naar root wordt gestuurd ), is het toch mogelijk dat je in de problemen komt als de admins /var/log/secure lezen.

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

Om uit te vinden wat je mag uitvoeren met verschillende privileges, kun je sudo -l gebruiken. Merk op dat deze opdracht vereist dat je je wachtwoord invoert.

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

Dit is heel eenvoudig. Run sudo -l. Dit zal een lijst van alle sudo-privileges die je hebt.

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

Hier is de scriptvriendelijke versie:

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

omdat het niet op de wachtwoordinvoer blijft staan als u geen toegang heeft tot sudo.

U kunt het ook instellen in een variabele als:

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

Opmerking: Op macOS moet u coreutils installeren, bijv. brew install coreutils.

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

Gerald Schade’s antwoord hier , kan nog verbeterd worden!

Gebruik 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

Hier is een volledig voorbeeld van gebruik in een 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
3
3
2017-02-28 02:27:06 +0000

Voor mij werkten ‘sudo -v’ en ‘sudo -l’ niet in een script omdat het soms interactief is (mij om een wachtwoord vragen, zoals hierboven vermeld). Ook werkte ‘sudo -n -l’ niet, het gaf de exit code ‘1’ hoewel ik sudo rechten heb, vanwege het ontbrekende wachtwoord. Maar het uitbreiden van de opdracht naar:

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

was voor mij succesvol voor het script. Deze uitdrukking geeft 0 als de huidige gebruiker ‘sudo’ kan aanroepen en 1 als dat niet het geval is.

Uitleg: De extra parameter -n tot sudo voorkomt interactiviteit.
De uitvoer $A van de opdracht ‘sudo -n -v 2>&1’ kan zijn: - leeg (in dit geval kan sudo door de huidige gebruiker worden opgeroepen), of: - een opmerking dat de huidige gebruiker niet geautoriseerd is voor sudo, of: - een vraagtekst voor het wachtwoord (in dit geval is de gebruiker geautoriseerd). (“asswor” past zowel voor een engels “wachtwoord” als voor een Duits “Passwort”).

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

ik heb een lage rang om te stemmen en commentaar te geven, maar ik wilde het antwoord van Gerald Schade, omdat ik dat eerder de enige manier vond, en dacht dat no1 anders het weet - tot nu toe :D

btw mijn oplossing:

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

(vanaf het einde van 2015 mwhaaa)

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

Dit zou genoeg moeten zijn om je te vertellen of je root hebt of niet:

sudo whoami

Als sudo vraagt om een root wachtwoord, of het werkt niet, betekent dit ook dat je geen root privileges hebt (tenminste niet via sudo).

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

“Sudo access” komt in smaken. Twee primaire smaken: Ten eerste moet u, of een groep waarvan u lid bent, worden ingesteld voor sudo toegang in het /etc/sudoers bestand.

Ten tweede moet u uw wachtwoord weten, of u moet recentelijk een sudo opdracht hebben gedaan. Recentelijk is de time-out nog niet verstreken. (Leuk weetje: je kunt de time-out erg lang maken in je sudoer’s bestand.)

Ik wil vaak testen voor de tweede soort toegang in de proloog van een script dat een aantal stappen moet sudo’s. Wanneer deze controle mislukt kan ik de gebruiker adviseren om de 2e soort toegang in te schakelen voordat het script wordt uitgevoerd.

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

De -S vertelt sudo om het wachtwoord van stdin te lezen. De -p stelt een lege prompt in. De -K wist de tweede keer toegang.

Aangezien het stderr naar /dev/null stuurt, zal het ook controleren of de gebruiker het eerste type sudo toegang heeft.

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

Volg deze stappen om het sudoersbestand te bekijken. Als je daarbinnen bent, heb je sudo. Zo niet, dan kun je jezelf toevoegen.

  1. su
  2. visudo
  3. 3. Onderkant van het bestand, voer your_username_here ALL=(ALL) ALL in 4. Druk op ESC en typ :wq
  4. Type exit
  5. 6. Voer uw opdracht die sudo nodig heeft opnieuw uit 7. Voer uw wachtwoord in (niet het wachtwoord van de root)