Почему sudo не добавляет PATH root в Ubuntu 12.04?

Я недавно обновил свой сервер до Ubuntu Server 12.04. Ранее он работал 11.04.

С тех пор у меня возникают проблемы с выполнением команд пользователя root через sudo. Примером этого может быть:

> sudo ufw status
sudo: ufw: command not found
> sudo su - root
> ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    LIMIT       Anywhere

С Ubuntu 11.04 обычный sudo ufw status работал нормально, но с Ubuntu 12.04 он не может найти команду.

Похоже, что это просто проблема с не установленной переменной PATH (ufw можно найти в /usr/sbin/ufw).

Я пытаюсь понять, что мне нужно изменить обратно, чтобы PATH root был установлен правильно, когда я просто sudo <sbin command>?

4
задан 7 June 2012 в 22:08

2 ответа

Помимо соображений безопасности (поскольку Anders упомянул), сохраняя исходного пользователя PATH также соответствует Принципу Наименьшего количества Удивления.

Предположим, что Вы запускаете названную программу foo, но узнайте, что действительно необходимо выполнить его как root. Таким образом, Вы работаете sudo foo. Это было бы плохо если прогон программы sudo foo отличается от прогона программы foo, который произошел бы, если существует другое foo в root PATH. Это существенно нарушило бы Ваши ожидания и общее предположение это sudo делает то же самое как, за исключением чего Вы помещаете после него, root.

Это - то, что произошло бы если sudo предварительно ожидаемый root PATH к Вашему PATH. Но предположите sudo добавленный rootсоедините каналом к Вашему PATH. Если это было sudoповедение, затем Вы, вероятно, предположили бы что, если можно запустить программу (называют его bar) при моделировании начальной буквы root войдите в оболочку (sudo -i), Вы могли также выполнить его с sudo bar. Но то предположение было бы неправильным, потому что могло бы быть другое bar в Вашем собственном (т.е. нет root) путь.

Вместо sudoповедение, изменяющееся от одного релиза Ubuntu до другого, что, вероятно, произошло, состояло в том что Ваш PATH измененный. Если Вы добавляете /sbin, /usr/sbin, и /usr/local/sbin к Вашему PATH, проблема будет решена. Если Вы только не хотите sbin в Вашем ПУТИ при запущении программ как root. В этом случае я рекомендую отправить отдельный вопрос о том (хотя на одну технику для выполнения этого намекают в ответе Anders.)

4
ответ дан 7 June 2012 в 22:08

Вы просматривали справочную страницу для sudo ? В разделе ЗАМЕЧАНИЯ ПО БЕЗОПАСНОСТИ говорится о том, как sudo использует переменную PATH.

Вы также хотите взглянуть на /etc/sudoers , так как PATH можно изменить , изменить на secure_path. Настройки также можно выполнить с помощью файлов в каталоге /etc/sudoers.d/.

Предлагается внести изменения в конфигурацию sudo, создав файлы в /etc/sudoers.d/, поскольку тогда ваши изменения останутся независимыми от изменений в /etc/sudoers, которые могут произойти при обновлении sudo до новой версии. Вы все равно должны использовать команду visudo для создания и редактирования файлов в /etc/sudoers.d/.

0
ответ дан 7 June 2012 в 22:08

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

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