Глобально измените путь для всех пользователей, даже в кроне

Существует apache пользователь вместо www-data в Centos.

5
10.10.2013, 22:50
3 ответа

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

  • Использовали абсолютные пути к двоичным файлам, установленным в нестандартных местах, вместо того, чтобы ожидать, что двоичный файл будет по пути. Это использовалось для инструментов, которые имеют мало нестандартных внешних зависимостей и / или работают изолированно.
  • Создал и использовал сценарий оболочки для инструмента, который настраивал среду по мере необходимости; вручную установить PATH = ... в этом сценарии и / или запустить исходный код $ HOME / .bashrc в зависимости от ситуации. Это использовалось для инструментов, которым требовались другие инструменты, но которые в остальном могли работать в нашем кластере.
  • Создан контейнер (в нашем случае Docker), включая двоичные файлы и более сложную настройку. Это использовалось для инструментов, которым требуется среда, значительно отличающаяся от нашей стандартной настройки кластера.
0
27.01.2020, 20:33

Добавьте файл со значением, которое Вы хотите PATH иметь в /etc/profile.d. Эти файлы являются установкой, которая будет получена оболочками, такими как Bash, Csh Zsh или tcsh.

Пример

У нас должно было быть следующее значение, добавленное к нашему ПУТИ.

/usr/local/share/bin

Таким образом, мы создали файл, /etc/profile.d/ourstuff.sh, со следующей строкой в нем:

export PATH=/usr/local/share/bin:$PATH

Файлы с расширением .sh получены оболочками, такими как Bash и Zsh. Файлы с расширением .csh получены Csh и tcsh.

РЕДАКТИРОВАНИЕ № 1 - продолжение

OP задала следующий последующий вопрос.

Да, но что относительно заданий крона? Существует ли способ получить путь даже там? крон, кажется, не называет/etc/profile или/etc/bashrc.

На который я ответил:

Корректный это не делает, ни будет это. Необходимо установить SHELL=/bin/bash в кроне для переопределения оболочки по умолчанию (обычно /bin/sh). Также можно установить это для пользовательских кронов, BASH_ENV =" $HOME/.bashrc" и это для системных кронов, BASH_ENV="/root/.bashrc". Был бы один путь вокруг этого.

Я высоко предложил бы, чтобы Вы не сделали это. Позвольте сценариям, которые нужны в определенной среде, устанавливают ее самим. Не пытайтесь решить каждую проблему на глобальном уровне!

11
27.01.2020, 20:33
  • 1
    Да, но что относительно заданий крона? Существует ли способ получить путь даже там? крон, кажется, не называет/etc/profile или/etc/bashrc. –  Aphoid 10.10.2013, 23:16
  • 2
    На самом деле, полагаясь на путь для вещей как крон, который должен выполняться, те же процессы в последовательном вопросе обычно плохая практика. Путем выполнения, что, если Вы случайно уменьшили полномочия на каком-либо файле, который мог бы быть получен в перед выполнением, я могу теперь переопределить Ваши двоичные файлы и (потенциально) иметь выполнение произвольного кода как корень. Всегда используйте полные пути, если это возможно. –  Brian Redbeard 10.10.2013, 23:45

Можно вставить определения переменной среды /etc/environment (предполагающий, что Ваши системные нагрузки pam_env для всех сервисов, которые должны быть значением по умолчанию во всех современных невстроенных системах Linux).

Обратите внимание, что можно только поместить определения переменной статической среды формы VARIABLE=VALUE или VARIABLE="VALUE", с одним определением на строку. У Вас не может быть произвольных команд оболочки, Вы не можете обратиться к значению другой переменной путем записи FOO=hello+$BAR (который помещает литерал $ в значении FOO), и т.д., пока Вы придерживаетесь простых присвоений как PATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin, Вы будете в порядке (обратите внимание, что Вы не можете использовать корневой каталог пользователя там: значение должно быть тем же для всех пользователей).

2
27.01.2020, 20:33

Теги

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