2

С тех пор мы всегда запускали пользовательские скрипты из другого пользовательского crontab, например:

00 12 * * 1 su - user2 -c "/home/user2/myscript.sh"

При этом скрипт запускается после загрузки интерактивной оболочки ~/.bash_profile.

Однако недавно мы исправили Bash до версии 4.3.27 из-за уязвимости "shellshock", и она больше не работает.

У нас еще есть копия старого bash, чтобы мы могли проверить проблему:

[root ~]$ /bin/bash --version
GNU bash, versión 4.3.30(1)-release (x86_64-unknown-linux-gnu)

[root ~]$ /bin/bash.old --version
GNU bash, versión 4.1.2(1)-release (x86_64-redhat-linux-gnu)

[root ~]$ echo "export MYNEWVAR=helo" >> /home/usertest/.bash_profile

[root ~]$ su -s /bin/bash - usertest -c "env | grep MYNEWVAR"
[root ~]$ su -s /bin/bash.old - usertest -c "env | grep MYNEWVAR"
MYNEWVAR=helo

Это ожидаемое поведение? или мы пропустили , чтобы включить некоторые функции в шаге конфигурирования составителя баш?

С уважением.

1 ответ1

-1

Обновляется с момента понижения голоса, поэтому, пожалуйста, если это исправит проблему, как это выглядит, когда я использовал виртуальную машину и арку, пожалуйста, проголосуйте, чтобы я удалил -1, пожалуйста.

Если ваша система использует SUDO, см. Вторую половину ниже ...

Для систем, которые используют ТОЛЬКО SU:

В некоторых системах он может быть псевдонимом, поэтому даже если вы используете su, он автоматически использует su - что заставляет использовать переменные нового пользователя, найденные в их bashrc

Посмотрите на своего персонального пользователя bash.rc для упомянутого псевдонима ниже и удалите его. Это должно остановить его от попыток использовать переменные пользователя root.

страница: https://wiki.archlinux.org/index.php/su
Соответствующий бит:

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

$ su -

Аналогичный результат получается при добавлении имени пользователя root:

$ su - root

Аналогично, то же самое можно сделать для любого другого пользователя (например, для пользователя с именем archie):

# su - archie

Вы можете добавить псевдоним в ~/.bashrc для этого:

alias su="su -"

Для систем SUDO

Это из-за конфигурации sudo. Я использовал следующий вопрос / ответ, чтобы начать работу: https://askubuntu.com/questions/128413/setting-the-path-so-it-applies-to-all-users-inclusive-root-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

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

Ссылка Grails_home от меня помогает другому пользователю в сообществах Ubuntu, поэтому просто добавьте это имя вашей переменной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .