Какие преимущества использования sudo по умолчанию для сохранения $HOME?
Этот вопрос является побочным эффектом владельцев по умолчанию / прав доступа к файлам в домашнем каталоге пользователя и после поиска, который нашел эти вопросы и ответы в 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 whatever
и если программа пишет или изменяет файлы в $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
Оболочка работает. Вы будете благодарны, если допустите какую-то ошибку, лишив себя полномочий суперпользователя.
1 ответ
Вы правильно указали на потенциальные проблемы с sudo
и приложения, которые пишут файлы в $HOME
,
Причиной такого поведения на самом деле был бы не осознанный выбор разработчика, а, скорее, то, что он не был действительно необходим для тех целей, для которых он предназначен. sudo
был впервые задуман: для использования с более простыми приложениями в стиле Unix, которые просто принимают некоторые данные и возвращают некоторые результаты предсказуемым образом, а затем возвращают. Изначально он не был предназначен для работы с большими приложениями, которые работают в интерактивном режиме и управляют своими собственными файлами.
Как справедливо указано, sudo -i <command>
подходит для любого интерактивного приложения (представьте, что i означает интерактивный, хотя это не то, что означает). -i
имеет дополнительные теоретические преимущества по сравнению с -H
в этой среде целевого пользователя, например .profile
, читается тоже.
Есть также gksudo <command>
для графических интерактивных приложений, но sudo -i <command>
работает достаточно хорошо для тех, кто тоже.
Если вы не хотите печатать sudo -i <command>
Я думаю, что все время вы можете создать сценарий / псевдоним для него.