Я недавно обновил свой сервер до 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>
?
Помимо соображений безопасности (поскольку 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.)
Вы просматривали справочную страницу для sudo
? В разделе ЗАМЕЧАНИЯ ПО БЕЗОПАСНОСТИ говорится о том, как sudo
использует переменную PATH
.
Вы также хотите взглянуть на /etc/sudoers
, так как PATH
можно изменить , изменить на secure_path
. Настройки также можно выполнить с помощью файлов в каталоге /etc/sudoers.d/
.
Предлагается внести изменения в конфигурацию sudo
, создав файлы в /etc/sudoers.d/
, поскольку тогда ваши изменения останутся независимыми от изменений в /etc/sudoers
, которые могут произойти при обновлении sudo
до новой версии. Вы все равно должны использовать команду visudo
для создания и редактирования файлов в /etc/sudoers.d/
.