LS_COLORS как сохраниться после sudo su

Я постоянно помещаю код PS1 в bashrc.

Мой код выглядит следующим образом:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W \e[1;37m(\e[1;32m|\e[1;33m|\e[1;31m|\e[1;37m]\\$ \[\e[0m\]"

Я использую другую PS1 для root (/root/.bashrc) - красное имя пользователя, а для производственных и локальных серверов - другой формат.

Смотрите это reddit для классных кодов. Трюк с новой линией действительно полезен!

-2
15.08.2018, 20:41
2 ответа

sudo su -p сохранит среду вызывающего пользователя, за некоторыми исключениями. Исключения можно найти на справочной страницеsu, но соответствующая часть —:

   -m, -p, --preserve-environment
          Preserve the entire environment, i.e. it does not set HOME,
          SHELL, USER nor LOGNAME.  This option is ignored if the option
          --login is specified.
1
28.04.2021, 23:43

Запустите sudo -lот имени обычного пользователя, чтобы просмотреть действующие параметры.

  • Включает ли вывод env_reset? Если да, то при прохождении sudoбудет сохранен только краткий список безопасных/необходимых переменных окружения. Вы можете использовать ключевые слова env_checkи/или env_keepв файле sudoers, чтобы указать переменные среды, которые будут разрешены через sudo.

  • Включает ли вывод always_set_home? Если это так, то переменная среды $HOMEбудет указывать на домашний каталог целевого пользователя, то есть /rootв вашем случае. В результате результирующая оболочка будет запускать /root/.bashrc, а не вашу личную, и аналогичным образом все программы будут искать свои пользовательские -конфигурационные файлы в каталоге /root/, а не в вашем личном домашнем каталоге.

Если sudo -sиспользует корневой .bashrc, а не ваш личный, то always_set_homeскорее всего действует (или у вас странный дистрибутив с драконовскими модулями PAM или что-то в этом роде ). В этом случае используйте visudoдля редактирования файла sudoers и добавьте одну из следующих строк (восклицательный знак перед названием параметра означает «не»):

  • Defaults !always_set_homeотключает параметр для всех пользователей.
  • Defaults>root !always_set_homeотключает его для всех переходов к пользователю root, кем бы ни был первоначальный пользователь.
  • Defaults:johndoe !always_set_homeотключает его для переходов, где johndoe— только исходный пользователь.

Порядок имеет значение :Последняя настройка имеет преимущество, поэтому, если в вашем файле sudoersесть какие-либо существующие Defaultsстроки, вы должны добавить свои настройки после них.


А если соединить suпосле sudo, будут применяться собственные правила, которые обычно не настраиваются. Поведение (и даже доступность )su -pили su -mразличаются в разных дистрибутивах и версиях Linux.

sudo suозначает переключение с вашего обычного пользователя на root, а затем снова с root на root, что максимизирует шансы нарушения тщательно -настроенных настроек персональной среды с небольшой выгодой. С помощью sudo -sвы можете добиться того же, либо напрямую, либо с некоторой настройкой параметров Defaultsв файле sudoers, в зависимости от ваших предпочтений и выбора дистрибутива Linux.

sudo su -, с другой стороны, является устаревшим способом сказать: «Я явно хочу, чтобы среда была такой же, как если бы целевой пользователь (, то есть root ), вошел в систему напрямую; я не хочу, чтобы след моего личного окружения, чтобы остаться в результирующем сеансе». Если у вас есть версия sudo, выпущенная в этом тысячелетии, вы можете вместо этого использовать sudo -i.

В 2010-х единственными причинами использования sudo suили sudo su -, вероятно, были мышечная память, следование устаревшим советам или работа с действительно старыми системами.Вероятно, вам следует разучить эти две команды.

1
28.04.2021, 23:43

Теги

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