профіль bash-джерела для користувачів root


17

Вибачтеся заздалегідь, якщо це питання буде дратувати пекло усіх, як я оцінюю, його багато разів задавали раніше. Будьте впевнені, я прочитав архіви і спробував принаймні деякі пропозиції, але все ще не можу вирішити (просту) проблему. Сподіваюся, хтось може надати відповідь, і я можу відчути себе принижено. FYI, щоб уникнути будь-якої неоднозначності, я буду використовувати абсолютні, а не відносні шляхи.

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

Кожен зараз і потім, я переключаюсь на корінь шляхом введення suв термінал , а потім ввести свій пароль. Підказка змінюється, і я тепер користувач root. Моє запитання таке: чи можу я завантажувати профіль кореневої башти, одразу після отримання root, без необхідності вручну вводити файл профілю? Причина, за якою я знаю, що не відбувається автоматично, полягає в тому, що у мене є однакові псевдоніми у файлі кореневого профілю та в моєму /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самостійно, ви не вводите оболонку "входу". Це означає, що ваше оточення, робочий каталог та все, крім uid / gid, залишаються такими ж, як у початкового користувача.

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

Просте рішення простої проблеми:

su -

На su(1)чоловіковій сторінці:

Команда 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мета, або ви можете працювати так, що зовсім не потрібно кореневих привілеїв.
Джейсон Салаз

Дякую вам і @Hai Vu. "su -" робить трюк, і так, цілком зрозуміло, слід уникати корінців.
Адам Голд

1
Я вже знав додати "-" після команди su, але все ще не отримував .bash_profile для кореневого користувача. Відповідь Флоріана Бідабе та патрикса нижче про зміну кореневої оболонки з sh на bash вирішила для мене проблему.
JaredC

9

Насправді коріння використовує /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.


/bin/shВикористовує /var/root/.profileфайл Root .
Заслуга

6

Коли я абсолютно зобов’язаний, я, sudo bashщо змушує мене вкорінюватися, але з оточенням Дж. Роберта. Мій .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

, щоб зробити кореневий відблиск на мене в ЧЕРВОНІ, щоб підкреслити, що я зараз (більше) вразливий до свого власного [виберіть один: зухвалість, німість, схильність до пальців, небажання приймати гарну пораду, до s.creek - не кидай весло].


3

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


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оболонка не читає інформацію! (лише баш) (Mac OS El Capitan). І мені довелося міняти оболонку на баш.

Також "su -"працює також. (з цією оболонкою читається /var/root/.profileфайл)


1
Немає необхідності підтверджувати наявні відповіді ...
nohillside

-1

Один із способів вирішити це - запустити наступний для переключення оболонки кореня на bash:

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

Це рішення також вирішило мою проблему.


-2

якщо у вас є лише один користувач за замовчуванням і користувач root, ви можете надіти alias su="su -".bash_profile користувача "за замовчуванням", і ви отримаєте потрібний ефект. Працює і без зайвих речей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.