Onde encontro a variável de ambiente SUDO_COMMAND?

8

Atualmente, estou aprendendo os fundamentos do Linux com o Ubuntu e há uma pequena atividade em que preciso encontrar informações sobre variáveis ​​de ambiente. Eu já encontrei informações 6/7, mas simplesmente não consigo encontrar SUDO_COMMAND. é assim que a lista vai:

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

Percebi que as informações estão em ordem e SUDO_COMMANDestão entre o usuário e a senha. eu cometi um erro em algum lugar?

kyle cruz
fonte
1
você tem privilégios de sudo?
Ravery

Respostas:

11

SUDO_COMMANDé uma variável de ambiente definida sudoapenas no ambiente do processo iniciado por ela (e herdado por qualquer processo filho). Se você executar sudo some-command arg1 arg2, SUDO_COMMANDconterá o caminho absoluto para some-command, e arg1 arg2. Se você executou sudo -sou sudo -i, a variável será configurada para o shell que foi iniciado. De qualquer forma, você provavelmente não o verá fora de uma árvore de processos iniciada por sudo.

Por exemplo:

$ 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

Percebi que a informação vem em ordem

Eu não sei qual comando você está usando, mas você não pode contar com a saída de set, declare, envou printenvseja, de alguma forma.

muru
fonte
E eu pensei que sudo echo $SUDO_COMMANDpoderia ser usado para criar um loop infinitivo ... :(
sobremesa
5

A SUDO_COMMANDé uma variável de ambiente que Set ao comando executado pelo sudo .

Conforme mencionado por @muru - se sudoexecutar um novo shell - essa variável de ambiente será mostrada neste novo shell

Mais informações

man sudo fornece os seguintes detalhes:

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
fonte
Eu não acho que seu exemplo seja realmente reproduzível. SUDO_COMMANDsó existe no ambiente iniciado por sudo, se SUDO_COMMANDrealmente onde /bin/ls, então você não conseguiria executar um shell echo $SUDO_COMMAND.
muru 7/09/17