Этот вопрос является побочным эффектом Владельцев / разрешений по умолчанию для файлов в домашнем каталоге пользователя , и после поиска, который обнаружил этот вопрос и ответ на Unix и Linux SE .
Когда вы используете
sudo command
, по соображениям безопасности сохраняется только несколько переменных окружения (хотя этот момент здесь обсуждается ... но хорошо). Сохранение $ HOME
- это вопрос настроек по умолчанию; в Ubuntu по умолчанию он сохраняется, и вам нужно использовать sudo -H
, чтобы не сохранять его (и установить его для целевого пользователя).
Проверьте это (будьте осторожны с цитированием, мы не хотим, чтобы $ HOME
разрешалось перед вызовом sudo
!):
[romano:~] % sudo bash -c 'echo $HOME'
/home/romano
[romano:~] % sudo -H bash -c 'echo $HOME'
/root
Я вижу, что сохранение $ HOME
имеет возможный негативный эффект, заключающийся в том, что вы можете использовать sudo something
, и если программа записывает или изменяет файлы в $ HOME
(конфигурация, что угодно), вы получите файл, принадлежащий от root и впоследствии не может быть изменен обычным пользователем.
Это может нанести серьезный ущерб, особенно новым пользователям ... у нас довольно много циклов входа в систему из-за принадлежащего root .Xauthority
из-за (по общему признанию сумасшедшего) sudo startx
в эмуляторе терминала под X, или неизменяемые настройки конфигурации из-за неверного sudo dconf-editor
и так далее.
С другой стороны, я не вижу положительных эффектов. Итак, теперь я использую
Defaults always_set_home
в моем / etc / sudoers
(1) , проверяя его:
[romano:~] % sudo bash -c 'echo $HOME'
/root
Вопрос: Каковы положительные эффекты сохранения $ HOME
по умолчанию, если есть?
Сноски
(1) Всегда, всегда редактируйте / etc / sudoers
с помощью visudo
и терминал (лучше VC) с запущенной оболочкой sudo -i
. Вы будете благодарны, если сделаете ошибку, лишив себя полномочий суперпользователя.
Вы корректны в указании на потенциальные проблемы с sudo
и приложения та запись файлы в $HOME
.
Причиной этого поведения действительно не был бы сознательный выбор разработчика, но больше что это не было действительно необходимо в намеченных целях для который sudo
был сначала задуман: для использования с более простыми приложениями стиля Unix, которые просто берут некоторый вход и возвращают некоторый вывод предсказуемым способом и затем возвращаются. Это не было бы первоначально разработано для утверждения с объемными приложениями, которые работают в интерактивном режиме и управляют их собственными файлами.
Как справедливо указано, sudo -i <command>
хорошо для любого приложения, это является интерактивным (думайте обо мне как обозначающий интерактивный, даже при том, что это не то, что это обозначает). -i
обладает дальнейшими теоретическими преимуществами -H
в этом среда целевого пользователя, например, .profile
, читается также.
Существует также gksudo <command>
для графических интерактивных приложений, но sudo -i <command>
работы достаточно хорошо для тех также.
Если Вы не хотите вводить sudo -i <command>
все время Вы могли создать сценарий/псевдоним для него, я предполагаю.