Courez sudo -v. Il est généralement utilisé pour prolonger le délai d’expiration de votre mot de passe sudo, mais peut également servir à déterminer si vous avez des sudoprivilèges.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Extrait de la page de manuel:
Si l'option -v (validate) est donnée, sudo mettra à jour l'horodatage de l'utilisateur, lui demandant son mot de passe si nécessaire. Cela prolonge le délai d'expiration sudo de 5 minutes supplémentaires (ou quel que soit le délai d'expiration défini dans sudoers), mais n'exécute pas de commande.
Si votre utilisateur est uniquement autorisé à exécuter des commandes spécifiques , cette commande fonctionnera, indiquant que vous êtes autorisé à exécuter quelque chose avec des privilèges différents. Bien que le message ait un aspect différent lorsque vous essayez d'exécuter une commande que vous n'êtes pas autorisé à faire dans ce cas (et qu'aucun courrier n'est envoyé à la racine ), il est toujours possible que vous ayez des problèmes si les administrateurs le lisent /var/log/secure.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Pour savoir ce que vous êtes autorisé à exécuter avec différents privilèges, vous pouvez utiliser sudo -l. Notez que cette commande nécessite que vous entriez votre mot de passe.
Merci. sudo -v travaille pour moi. La page de manuel indique que je peux aussi exécuter sudo -l mais demande un mot de passe. Pourquoi donc?
Bruce
2
@Bruce Je suis en train de deviner, mais sinon quelqu'un (ou un programme que vous exécutez) pourrait savoir quels programmes peuvent être exécutés (éventuellement sans entrer de mot de passe) par votre utilisateur actuel et essayer d'utiliser ces informations à des fins malveillantes.
Daniel Beck
Que pensez - vous que cela signifie quand je reçois ce retour: patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? J'ai entré mon mot de passe et je n'ai rien eu à propos de non autorisé. Je sais que j'ai sudoréussi à exécuter d'autres commandes, mais ce unable to resolve hostmessage m'a fait craindre que quelque chose d'autre ne soit funky sur l'hôte.
Patrick M
@PatrickM Cela ressemble à un problème avec le sudoersfichier. Vous pouvez y spécifier sur quel hôte un utilisateur est autorisé à exécuter une commande spécifique (cela est utile lorsque vous utilisez le même sudoersfichier sur plusieurs ordinateurs). Le nom d'hôte spécifié dans ce fichier n'a peut-être pas pu être résolu. Essayez de vérifier avec la hostcommande par exemple.
Ale
Cela ne fonctionne pas pour moi sur RHEL 6, sudo -va déclaré "xx n'est pas dans le fichier sudoers. Cet incident sera signalé."
79E09796
43
C'est très simple. Courez sudo -l. Ceci listera tous les privilèges sudo que vous avez.
Peut-être sous-estimé parce que cela répète ce que Daniel Beck avait dit il y a près de deux ans.
G-Man
1
Ou explique ce qui se passe, c'est un commentaire, au mieux
Ramhound
2
@ Jonathan: si vous voulez écrire un script dans Ubuntu, demandez sudo -lun mot de passe si vous pouvez ou non utiliser votre mot de passe. sudo -vne demande que si vous le pouvez, et "$(whoami)" != "root"ne demandera jamais rien dans aucun Linux.
dimanche
@ bksunday Vous avez raison. Je teste maintenant sur une Jessy propre et confirme vos résultats. Mon précédent commentaire (supprimé maintenant) était probablement le résultat de tests sur une machine sur laquelle j'avais quelques sudoprivilèges.
Jonathan Ben-Avraham
@ G-Man, mais cette réponse simple m'a aidé plus que probablement plus précise, la réponse de Daniel, où cette commande est malheureusement la fin ...
Voici un exemple complet d'utilisation dans un 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 1fi
elevate_cmd which adduser
Pour moi, ' sudo -v' et ' sudo -l' ne fonctionnaient pas dans un script car parfois interactifs (me demandant un mot de passe, comme mentionné ci-dessus). ' sudo -n -l' n'a pas non plus fonctionné, il a donné le code de sortie '1' bien que j'ai des autorisations sudo, à cause du mot de passe manquant. Mais étendre la commande à:
a réussi pour moi pour le script. Cette expression indique 0si l'utilisateur actuel peut appeler «sudo» et 1sinon.
Explication:
Le paramètre supplémentaire -ndestiné à sudoempêcher l'interactivité.
Le résultat $Ade la commande ' sudo -n -v 2>&1' peut être:
- vide (dans ce cas, l'utilisateur actuel peut appeler sudo), ou:
- une note indiquant que l'utilisateur actuel n'est pas autorisé à utiliser Sudo, ou:
- un texte de question pour le mot de passe (dans ce cas, l'utilisateur est autorisé).
("asswor" conviendra aussi bien pour un "mot de passe" anglais que pour un "mot de passe allemand").
J'ai un rang inférieur à voter et à commenter, mais je voulais faire remonter la réponse de Gerald Schade, car je trouvais que c'était le seul moyen précédemment, et je pensais que personne d'autre ne le sait - jusqu'à maintenant: D
"Accès Sudo" vient en saveurs. Deux types principaux: Tout d'abord, vous (ou un groupe dont vous êtes membre) devez être configuré pour un accès sudo dans le fichier / etc / sudoers.
Deuxièmement, vous devez connaître votre mot de passe ou vous devez avoir effectué une commande sudo récemment. Assez récemment, le délai d'attente n'a pas expiré. (Fait amusant: vous pouvez faire passer le temps d'arrêt très longtemps dans le fichier de votre sudoer.)
Je veux souvent tester le second type d'accès dans le prologue d'un script qui nécessite quelques étapes. Lorsque cette vérification échoue, je peux informer l'utilisateur qu'il doit activer le deuxième type d'accès avant d'exécuter le 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
Le -S dit à sudo de lire le mot de passe à partir de stdin. Le -p définit une invite vide. Le -K efface la deuxième fois de l'accès.
Puisqu'il envoie stderr à / dev / null, il vérifiera également si l'utilisateur dispose du premier type d'accès sudo.
L'OP "a eu des ennuis" pour l'exécution sudo, il n'est donc probablement pas l' administrateur système, ni même l'un des administrateurs système d'élite. Il est probablement juste un utilisateur qui pensait avoir obtenu des pouvoirs limités. Qu'est-ce qui vous fait penser qu'il peut partir su?
Réponses:
Courez
sudo -v
. Il est généralement utilisé pour prolonger le délai d’expiration de votre mot de passe sudo, mais peut également servir à déterminer si vous avez dessudo
privilèges.Extrait de la page de manuel:
Si votre utilisateur est uniquement autorisé à exécuter des commandes spécifiques , cette commande fonctionnera, indiquant que vous êtes autorisé à exécuter quelque chose avec des privilèges différents. Bien que le message ait un aspect différent lorsque vous essayez d'exécuter une commande que vous n'êtes pas autorisé à faire dans ce cas (et qu'aucun courrier n'est envoyé à la racine ), il est toujours possible que vous ayez des problèmes si les administrateurs le lisent
/var/log/secure
.Pour savoir ce que vous êtes autorisé à exécuter avec différents privilèges, vous pouvez utiliser
sudo -l
. Notez que cette commande nécessite que vous entriez votre mot de passe.la source
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? J'ai entré mon mot de passe et je n'ai rien eu à propos de non autorisé. Je sais que j'aisudo
réussi à exécuter d'autres commandes, mais ceunable to resolve host
message m'a fait craindre que quelque chose d'autre ne soit funky sur l'hôte.sudoers
fichier. Vous pouvez y spécifier sur quel hôte un utilisateur est autorisé à exécuter une commande spécifique (cela est utile lorsque vous utilisez le mêmesudoers
fichier sur plusieurs ordinateurs). Le nom d'hôte spécifié dans ce fichier n'a peut-être pas pu être résolu. Essayez de vérifier avec lahost
commande par exemple.sudo -v
a déclaré "xx n'est pas dans le fichier sudoers. Cet incident sera signalé."C'est très simple. Courez
sudo -l
. Ceci listera tous les privilèges sudo que vous avez.la source
sudo -l
un mot de passe si vous pouvez ou non utiliser votre mot de passe.sudo -v
ne demande que si vous le pouvez, et"$(whoami)" != "root"
ne demandera jamais rien dans aucun Linux.sudo
privilèges.Voici la version conviviale du script:
car il ne sera pas bloqué sur l'entrée du mot de passe si vous n'avez pas l'
sudo
accès.Vous pouvez également le définir dans une variable comme:
Remarque: sur macOS, vous devez installer
coreutils
, par exemplebrew install coreutils
.la source
timeout
ne sont pas disponibles par défaut, par exemple sous OS X?coreutils
, par exemplebrew install coreutils
.La réponse de Gerald Schade ici , peut encore être améliorée!
Utilisation
Voici un exemple complet d'utilisation dans un script :
la source
Pour moi, '
sudo -v
' et 'sudo -l
' ne fonctionnaient pas dans un script car parfois interactifs (me demandant un mot de passe, comme mentionné ci-dessus). 'sudo -n -l
' n'a pas non plus fonctionné, il a donné le code de sortie '1' bien que j'ai des autorisations sudo, à cause du mot de passe manquant. Mais étendre la commande à:a réussi pour moi pour le script. Cette expression indique
0
si l'utilisateur actuel peut appeler «sudo» et1
sinon.Explication:
Le paramètre supplémentaire
-n
destiné àsudo
empêcher l'interactivité.Le résultat
$A
de la commande 'sudo -n -v 2>&1
' peut être:- vide (dans ce cas, l'utilisateur actuel peut appeler sudo), ou:
- une note indiquant que l'utilisateur actuel n'est pas autorisé à utiliser Sudo, ou:
- un texte de question pour le mot de passe (dans ce cas, l'utilisateur est autorisé).
("asswor" conviendra aussi bien pour un "mot de passe" anglais que pour un "mot de passe allemand").
la source
J'ai un rang inférieur à voter et à commenter, mais je voulais faire remonter la réponse de Gerald Schade, car je trouvais que c'était le seul moyen précédemment, et je pensais que personne d'autre ne le sait - jusqu'à maintenant: D
ma solution:
(à partir de fin 2015 mwhahaaa)
la source
"Accès Sudo" vient en saveurs. Deux types principaux: Tout d'abord, vous (ou un groupe dont vous êtes membre) devez être configuré pour un accès sudo dans le fichier / etc / sudoers.
Deuxièmement, vous devez connaître votre mot de passe ou vous devez avoir effectué une commande sudo récemment. Assez récemment, le délai d'attente n'a pas expiré. (Fait amusant: vous pouvez faire passer le temps d'arrêt très longtemps dans le fichier de votre sudoer.)
Je veux souvent tester le second type d'accès dans le prologue d'un script qui nécessite quelques étapes. Lorsque cette vérification échoue, je peux informer l'utilisateur qu'il doit activer le deuxième type d'accès avant d'exécuter le script.
Le -S dit à sudo de lire le mot de passe à partir de stdin. Le -p définit une invite vide. Le -K efface la deuxième fois de l'accès.
Puisqu'il envoie stderr à / dev / null, il vérifiera également si l'utilisateur dispose du premier type d'accès sudo.
la source
Suivez ces étapes pour afficher le fichier sudoers. Si vous êtes là-bas, vous avez sudo. Sinon, vous pouvez ajouter vous-même.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
la source
sudo
, il n'est donc probablement pas l' administrateur système, ni même l'un des administrateurs système d'élite. Il est probablement juste un utilisateur qui pensait avoir obtenu des pouvoirs limités. Qu'est-ce qui vous fait penser qu'il peut partirsu
?