¿Dónde encuentro la variable de entorno SUDO_COMMAND?

8

Actualmente estoy aprendiendo los fundamentos de Linux con Ubuntu y hay una pequeña actividad en la que necesito encontrar información sobre variables de entorno. Ya encontré información 6/7 pero simplemente no puedo encontrarla SUDO_COMMAND. así es como va la lista:

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

Noté que la información viene en orden y SUDO_COMMANDestá entre user y pwd. ¿cometí un error en alguna parte?

kyle cruz
fuente
1
¿tienes privilegios de sudo?
ravery

Respuestas:

11

SUDO_COMMANDes una variable de entorno establecida sudosolo en el entorno del proceso iniciado por este (y heredado por cualquier proceso hijo). Si ejecuta sudo some-command arg1 arg2, SUDO_COMMANDcontendrá la ruta absoluta a some-command, y arg1 arg2. Si ejecutó sudo -so sudo -i, entonces la variable se establecerá en el shell que se inició. En cualquier caso, probablemente no lo verá fuera de un árbol de procesos iniciado por sudo.

Por ejemplo:

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

O:

$ 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

Me di cuenta de que la información viene en orden

No sé qué comando está utilizando, pero no se puede confiar en la salida de set, declare, envo printenvestar en un cierto orden.

muru
fuente
Y pensé que sudo echo $SUDO_COMMANDpodría usarse para crear un bucle infinitivo ... :(
postre
5

El SUDO_COMMANDes una variable de entorno que se establece en el comando ejecutado por sudo .

Como mencionó @muru, si sudoejecuta un nuevo shell, esta variable de entorno se mostrará en este nuevo shell

Más información

man sudo proporciona los siguientes detalles:

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
fuente
No creo que tu ejemplo sea realmente reproducible. SUDO_COMMANDsolo existe en el entorno iniciado por sudo, si SUDO_COMMANDrealmente donde /bin/ls, entonces no obtendría un shell para ejecutar echo $SUDO_COMMAND.
muru