2017-01-12 2 views
0

У меня проблемы с использованием некоторых команд от sudo.centos 6.4, sudo -u -H не работает

Я попытался выполнить команду на Centos 6.4 и получил ошибку.

Однако, когда я пытаюсь выполнить ту же команду на Ubuntu 14.04, она отлично работает.

Не только bundle, но и многие команды получают ту же ошибку. Например, ruby, node. Однако некоторые команды работают нормально. Например echo, mkdir, touch ...

У кого-нибудь есть идеи?

ответ

0

secure_path в /etc/sudoers гарантирует, что ваш путь чист при запуске двоичных файлов при sudo. В CentOS вы должны иметь что-то вроде

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 

Это объясняет, почему некоторые команды встречаются (эхо, MkDir, потрогать ...).

Вы можете держать свои переменные окружения (как $ PATH) в этой форме

sudo -u someuser "PATH=$PATH" bundle install 

От man sudo

переменные окружения, которые будут установлены для команды могут быть переданы на командование строка в виде значения VAR =, например LD_LIBRARY_PATH =/usr/local/pkg/lib. Переменные, переданные в строке , подвергаются тем же ограничениям, что и обычные переменные среды с одним важным исключением. Если параметр setenv задан в sudoers, команда run имеет набор тегов SETENV или команда соответствует ALL, пользователь может установить переменные , которые в противном случае были бы запрещены. Для получения дополнительной информации см. Sudoers (5).

В зависимости от политики безопасности вашей системы вы можете использовать -E вместо метода, описанного выше.

-E Опция -E (сохранение среды) указывает политике безопасности, что пользователь хочет сохранить существующие переменные среды . Политика безопасности может возвращать ошибку, если указан параметр -E, и у пользователя нет разрешения на сохранение среды.

+0

Благодарим за ответ. Я исправляю эту проблему путем изменения sudoers. 'По умолчанию secure_path =/sbin:/bin:/usr/sbin:/usr/bin => По умолчанию secure_path =/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin' –