Où puis-je trouver la variable d'environnement SUDO_COMMAND?

8

J'apprends actuellement les bases de Linux avec Ubuntu et il y a une petite activité où j'ai besoin de trouver des informations sur les variables d'environnement. J'ai déjà trouvé des informations 6/7 mais je ne trouve tout simplement pas SUDO_COMMAND. voici comment se déroule la liste:

SHELL=/bin/bash
USER=student
SUDO_COMMAND=
PWD=/home
HOME=/home/student
LOGNAME=student
OLDPWD=/home/student 

J'ai remarqué que les informations sont en ordre et qu'elles se SUDO_COMMANDsituent entre l'utilisateur et pwd. ai-je fait une erreur quelque part?

kyle cruz
la source
1
avez-vous des privilèges sudo?
ravery

Réponses:

11

SUDO_COMMANDest une variable d'environnement définie par sudouniquement dans l'environnement du processus démarré par elle (et héritée par tous les processus enfants). Si vous exécutez sudo some-command arg1 arg2, alors SUDO_COMMANDcontiendra le chemin absolu vers some-command, et arg1 arg2. Si vous avez exécuté sudo -sou sudo -i, la variable sera définie sur le shell qui a été démarré. Dans tous les cas, vous ne le verrez probablement pas en dehors d'une arborescence de processus démarrée par sudo.

Par exemple:

$ sudo sh -c 'echo $SUDO_COMMAND'
/bin/sh -c echo $SUDO_COMMAND

Ou:

$ sudo env
HOME=/home/muru
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
TERM=xterm-256color
LANG=en_US.UTF-8
LC_NUMERIC=en_GB.UTF-8
LC_TIME=en_GB.UTF-8
LC_MONETARY=en_GB.UTF-8
LC_PAPER=en_GB.UTF-8
LC_NAME=en_GB.UTF-8
LC_ADDRESS=en_GB.UTF-8
LC_TELEPHONE=en_GB.UTF-8
LC_MEASUREMENT=en_GB.UTF-8
LC_IDENTIFICATION=en_GB.UTF-8
MAIL=/var/mail/root
LOGNAME=root
USER=root
USERNAME=root
SHELL=/bin/bash
SUDO_COMMAND=/usr/bin/env
SUDO_USER=muru
SUDO_UID=1000
SUDO_GID=1000

J'ai remarqué que les informations venaient en ordre

Je ne sais pas quelle commande que vous utilisez, mais vous ne pouvez pas compter sur la sortie set, declare, envou printenvêtre dans un certain ordre.

muru
la source
Et je pensais que cela sudo echo $SUDO_COMMANDpourrait être utilisé pour créer une boucle infinitive… :(
dessert
5

Le SUDO_COMMANDest une variable d'environnement qui ensemble à la commande lancée par sudo .

Comme mentionné par @muru - si sudoexécuter un nouveau shell - cette variable d'environnement sera affichée dans ce nouveau shell

Plus d'informations

man sudo fournit les détails suivants:

ENVIRONMENT
 sudo utilizes the following environment variables.  The security policy
 has control over the actual content of the command's environment.

 EDITOR           Default editor to use in -e (sudoedit) mode if neither
                  SUDO_EDITOR nor VISUAL is set.

 MAIL             Set to the mail spool of the target user when the -i
                  option is specified or when env_reset is enabled in
                  sudoers (unless MAIL is present in the env_keep list).

 HOME             Set to the home directory of the target user when the -i
                  or -H options are specified, when the -s option is
                  specified and set_home is set in sudoers, when
                  always_set_home is enabled in sudoers, or when env_reset
                  is enabled in sudoers and HOME is not present in the
                  env_keep list.

 LOGNAME          Set to the login name of the target user when the -i
                  option is specified, when the set_logname option is
                  enabled in sudoers or when the env_reset option is
                  enabled in sudoers (unless LOGNAME is present in the
                  env_keep list).

 PATH             May be overridden by the security policy.

 SHELL            Used to determine shell to run with -s option.

 SUDO_ASKPASS     Specifies the path to a helper program used to read the
                  password if no terminal is available or if the -A option
                  is specified.

 SUDO_COMMAND     Set to the command run by sudo.
Yaron
la source
Je ne pense pas que votre exemple soit réellement reproductible. SUDO_COMMANDn'existe que dans l'environnement démarré par sudo, si SUDO_COMMANDréellement où /bin/ls, alors vous n'obtiendrez pas un shell à exécuter echo $SUDO_COMMAND.
muru