sourcing bash профиль для пользователей root

17

Заранее извиняюсь, если этот вопрос будет раздражать всех до чертиков, как я ценю, его задавали по-разному много раз прежде. Пожалуйста, будьте уверены, я прочитал архивы и попробовал по крайней мере некоторые из предложений, но все еще не могу решить (простую) проблему. Надеюсь, кто-то может дать ответ, и я чувствую себя соответствующим образом смиренным. К вашему сведению, во избежание любой двусмысленности, я собираюсь использовать абсолютные, а не относительные пути.

Когда я вхожу в систему, я делаю это как пользователь adam. Псевдонимы в /Users/adam/.bash_profileзагружаются, и я могу использовать их сразу после извлечения терминала. Я не использую .bashrcфайл, и это нормально.

Время от времени я переключаюсь на root, вводя suв терминал и затем вводя свой пароль. Приглашение меняется, и я теперь являюсь пользователем root. У меня такой вопрос: можно ли сразу после того, как стать пользователем root, загрузить мой корневой профиль bash без необходимости вручную загружать файл профиля? Причина, по которой я знаю, что это не происходит автоматически, заключается в том, что у меня есть одинаковые псевдонимы в моем корневом профиле и моем /Users/adam/.bash_profile. После того, как я стал пользователем root source [root_profile_file], они не работают , если я не наберу. Я попытался настроить следующие перестановки и затем переключиться на root через терминал, но ни одна из них не автоматически создала профиль / псевдонимы (обратите внимание, у меня нет ни одной из нижеприведенных опций, настроенных одновременно, поэтому я не думаю, что ' путаю систему):

Вариант 1: поместите мои псевдонимы в/etc/profile

Вариант 2:

  • в /etc/profile, вставить[ -r /etc/bashrc ] && . /etc/bashrc
  • положить мои псевдонимы в /etc/bashrc

Вариант 3:

  • в /etc/bash_profile, вставить[ -r /etc/bashrc ] && . /etc/bashrc
  • положить мои псевдонимы в /etc/bashrc

Вариант 4: поместите мои псевдонимы в/var/root/.profile

Вариант 5:

  • в /var/root/.profile, вставить[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • положить мои псевдонимы в /var/root/.bashrc

Вариант 6:

  • в /var/root/.bash_profile, вставить[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • положить мои псевдонимы в /var/root/.bashrc

Обратите внимание, что с любым из вышеперечисленного, если я переключаюсь на root, а затем source root_profile_fileпечатаю, псевдонимы загружаются, но только если я действительно получаю файл вручную. Возможно, я совершенно не понял, как работает bash, и невозможно автоматически получить файл профиля после переключения на root, но я надеюсь, что есть простое решение. Заранее спасибо всем, кто нашел время, чтобы прочитать это сообщение.

Адам Голд
источник

Ответы:

14

Проблема, с которой вы сталкиваетесь, заключается в том, что когда вы запускаете suсаму себя, вы не входите в оболочку 'login'. Это означает, что ваша среда, рабочий каталог и все, кроме uid / gid, остаются прежними для исходного пользователя.

Триггеры входа в систему не выполняются, и вы испытываете проблемы, которые вы описали.

Простое решение простой проблемы:

su -

Со su(1)страницы руководства :

Команда su используется, чтобы стать другим пользователем во время сеанса входа. Вызывается без имени пользователя, по умолчанию su становится суперпользователем. Необязательный аргумент - может использоваться для предоставления среды, аналогичной той, которую пользователь ожидал бы при непосредственном входе пользователя в систему.

Также:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

Если вы suвходите в оболочку входа в систему, bash будет вести себя так, как вы ожидаете, и автоматически получит соответствующие файлы при «входе в систему», без необходимости чрезмерных хакерских обходных путей.

Джейсон Салаз
источник
1
Я, однако, вторые заметки Хай Ву: Вы действительно, действительно, действительно никогда suне должны ни работать, как root. Для этого есть sudo, или вы можете работать так, чтобы вам вообще не требовались привилегии root.
Джейсон Салаз
Спасибо вам обоим и @Hai Vu. «su -» делает трюк и да, полностью понимая, root обычно следует избегать.
Адам Голд
1
Я уже знал, что нужно добавить «-» после команды su, но все еще не получал мой файл .bash_profile для пользователя root. Ответ Флориана Бидабе и Патриса ниже об изменении корневой оболочки с sh на bash устранил проблему для меня.
JaredC
9

На самом деле root использует /bin/sh(старая оболочка Bourne) .bash_profileи .bashrcчитается bash.

Это становится сложно, так как эти файлы могут использовать функции, недоступные в sh. Даже если вы source .bashrcили source .bash_profile, у вас все равно будут проблемы со сложными функциями, например.

Один из способов решить эту проблему - запустить

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

переключить rootоболочку на bash.

Флориан Бидабе
источник
Root /bin/shиспользует /var/root/.profileфайл.
Благодарим
6

Когда я абсолютно обязан, я sudo bashстановлюсь корнем, но с окружением JRobert. Мой .bashrc содержит:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

чтобы заставить рутинный взгляд снова взглянуть на меня в КРАСНОМ, чтобы подчеркнуть, что я теперь (более) уязвим перед своим собственным [выберите один: дерзость, тупость, склонность толстого пальца, нежелание принять хороший совет, up s.creek - не роняй весло.

JRobert
источник
3

Я использую sudo -iдля переключения на пользователя root. В этом случае конфигурация оболочки читается из /var/root/.profile.

Matic
источник
1

В общем, я советую против, так suкак это опасно, просто ищи его, и ты знаешь почему. На ваш вопрос, корневая учетная запись работает так же, как ваша учетная запись: она использует ~ / .bash_profile и / или ~ / .bashrc. Я не знаю, какой именно, но моя интуиция склоняется к ~ / .bashrc , поэтому вы можете попытаться поместить туда свои псевдонимы. Вот предложение:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works
Хай вю
источник
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Только это работает! Я пытался положить export PS1=...любой из этих файлов выше. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

Из всех этих файлов /bin/shоболочка, не считывает информацию! (только bash) (Mac OS El Capitan). И мне пришлось сменить оболочку на bash.

Также "su -"работает тоже. (с этой оболочкой идет чтение /var/root/.profileфайла)

ivan11
источник
1
Нет необходимости подтверждать существующие ответы ...
nohillside
-1

Одним из способов решения этой проблемы является запуск следующего для переключения оболочки root на bash:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

Это решение также исправило мою проблему.

Ян Ван
источник
-2

если у вас есть только один пользователь «по умолчанию» и пользователь root, вы можете поместить alias su="su -"в .bash_profile пользователя «по умолчанию», и вы получите желаемый эффект. Работает и без всяких хакерских вещей.

Дэвид Коста
источник