Как я могу убедиться, что переменная окружения установлена, когда я sudo?

Как я могу убедиться, что переменная среды (например, GRAILS_HOME) установлена, когда я sudo?

Я поместил скрипт в /etc/profile.d с этим значением и сделал его ugo+x , Что мне нужно сделать, чтобы сделать это видимым для суперпользователя?

2
задан 28 November 2012 в 15:52

2 ответа

Попробуйте с

sudo su -

- загружает все файлы среды. Из man su:

-, -l, --login
   Provide an environment similar to what the user would expect had
   the user logged in directly.

   When - is used, it must be specified as the last su option. The
   other forms (-l and --login) do not have this restriction.

Обновление : В общем случае вы запускаете sudo -i mycomment, как сказано в справочной странице sudo,

-i [command]
           The -i (simulate initial login) option runs the shell
           specified in the passwd(5) entry of the target user as a
           login shell.  This means that login-specific resource files
           such as .profile or .login will be read by the shell.  If a
           command is specified, it is passed to the shell for
           execution.  Otherwise, an interactive shell is executed.
           sudo attempts to change to that user's home directory
           before running the shell.  It also initializes the
           environment, leaving DISPLAY and TERM unchanged, setting
           HOME, SHELL, USER, LOGNAME, and PATH, as well as the
           contents of /etc/environment on Linux and AIX systems.  All
           other environment variables are removed.
0
ответ дан 28 November 2012 в 15:52

За этот ответ: Установка PATH, чтобы она применялась ко всем пользователям, включая root / sudo , если вы заметили, что Sudo сбрасывает все переменные и путь по умолчанию.

Соответствующий бит:

Страница руководства для sudoers гласит:

env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Таким образом, вы можете сделать следующее для поддержания переменных при использовании sudo

sudo visudo

это откроет вам настройки sudo. Затем, согласно тому, что я сделал, вы добавили следующее ниже

Defaults secure_path="blah"

Defaults env_keep +="VARIABLE VARIABLE VARIABLE"

(ИСКЛЮЧАЯ ПУТЬ, как это установлено secure_path), и это всего лишь один пробел между каждой переменной, если вы хотите, чтобы поддерживалось более 1.

и это говорит sudo, какие переменные env следует хранить, а не игнорировать.

Когда закончите, удерживайте Ctrl и нажмите o, чтобы записать, нажмите ввод и скажите «да», чтобы сохранить [даже если он указывает файл tmp, все в порядке, он будет записан обратно в основную конфигурацию, просто скажите «да», когда вас спросят, хотите ли вы перезаписать ].

Это должно позволить вам поддерживать любые переменные, которые вы пожелаете (большая - JAVA_HOME, а также http_proxy, если вы используете прокси).

Таким образом, он должен выглядеть примерно так, как указано ниже, включая указанную вами переменную:

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin"
Defaults        env_keep +="GRAILS_HOME"

и проверить, что он выходит из любых открытых окон терминала и снова открывает одно и запускает

echo $GRAILS_HOME 

Это должно быть то, что вы установили, теперь выпустите

sudo echo $GRAILS_HOME

, и теперь оно должно остаться без изменений

0
ответ дан 28 November 2012 в 15:52

Другие вопросы по тегам:

Похожие вопросы: