В нашей сети весь пользователь и идентификаторы группы распределяются через NIS с центрального сервера и каждый пользователь $HOME
каталог находится на смонтированной папке, которая живет на том центральном сервере.
Очевидно, у пользователя есть другой GID от root
и так root
не имеет доступа к смонтированному $HOME
папка, мешая (если не невозможный), чтобы пользователь выполнил что-то как sudo apt update
поскольку этому нужен доступ к $HOME
как замечено sudo
.
Мой вопрос, могу я иметь локальное для машины $HOME
для файлов и папок это sudo
доступ потребностей, к в то время как $HOME
для мой другого (не -sudo
) работа продолжает указывать на смонтированную папку?
Дополнительная информация:
[user@machine ~]$ id
uid=544(user) gid=40(src) groups=40(src),101(systemd-journal)
[user@machine ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root),40(src),101(systemd-journal),600(visitors),13010(hlcc),19016(identhw),51107(cadadm)
[user@machine ~]$ sh -c 'echo $HOME'
/net/server/home/user
[user@machine ~]$ sudo sh -c 'echo $HOME'
/net/server/home/user
Как я могу изменить результат последней строки (т.е. sudo
версия $HOME
) укажите на локальную папку на machine
вместо смонтированного сетевого пути?
Спасибо за ответы. Оказывается, что мой вопрос был почти идентичен этому на unix.stackexchange.com.
Я также узнал, что проблема имел с apt-get update
не был на самом деле связан с HOME
переменная среды, вместо этого это было связано с тем, что я звонил sudo apt-get update
от моего (user
) размещают папку, подобную этому вопросу, который может быть решен путем простого вызова sudo apt-get update
от другой папки, например. /
.
Но так как мой вопрос здесь был больше о HOME
замеченный sudo
, Я принял ответ techraf, потому что он не требует никаких дополнительных переключателей или определений в sudo
командная строка.
Необходимо добавить следующую строку к sudoers разделу Command Environment (с sudo visudo
).
Defaults env_keep -= "HOME"
Затем можно использовать сценарии без изменений.
<час> существует различие между Debian и Ubuntu способом sudo
, команда обрабатывает по умолчанию HOME
переменная (конкретно эта переменная, не целая среда):
В значении Debian HOME
заменяется корневым каталогом (целевого пользователя) корня;
Ubuntu сохраняет установку вызывающего абонента.
Этот ответ на Unix. SE содержит больше деталей.
Если вы вызовете sudo с помощью -i
, вы получите дом root.
Если вы хотите, чтобы sudo наследовал от текущей среды, вы можете просто установить дом для чего-то другого.
Итак, используйте sudo -i command
или HOME=/wherever sudo command
.
Например:
sudo -i sh -c 'echo $HOME'
Что дает вам:
/root
Или:
HOME=/foo sudo sh -c 'echo $HOME'
Что дает вам:
/foo