Чому користувач із правами root не перебуває у ~ ~?


20

Я просто з цікавості хотів би знати, чому, коли я входжу як root, я більше не перебуваю в / додому / користувачі . У чому причина та що саме / root каталог робить саме?

Я не просунутий користувач. Будь ласка, дайте відповідь простими словами або дайте посилання, яке дає чіткі, прості пояснення. Я використовую Ubuntu 16.04 і входжу як root на sudo -i. Як пояснено тут , sudo -iмає / root як домашній. Я хочу знати, в чому причина; чи є якась перевага бути там? І не в ~, як користувач sudo -s.


11
root також є користувачем, тому у нього є його особистий homeкаталог, але цей названийroot
damadam

3
Ви можете використовуватись sudo -sу тому самому каталозі користувачів.
Пілот6

3
@ Pilot6 Вибачте, я додав, що водночас, коли я побачив ваш коментар: D Сподіваюся, ви не заперечуєте :)
Rinzwind

2
@Unbesiegbarkeit man sudoвідповість на питання. Щоб бути простим user -i- це використання кореневих налаштувань користувача, але sudo -sпоточні налаштування користувача.
Пілот6

Відповіді:


28

Ви не ведете журнал як root, виконавши sudoкоманду. Ви запускаєте оболонку з правами root.

Якщо ви хочете залишитися в домашньому каталозі поточного користувача, ви можете використовувати sudo -sзамість sudo -iкоманди.

cd ~перенесе вас у той самий каталог, як якщо б ви не знаходитесь в оболонці з правами root. Буквально /home/$USER.

Під час використання sudo -iсистема діє так, ніби ви ввійшли як rootкористувач. Через це

cd ~ 

приведе вас до домашнього каталогу кореневого користувача, який є /root.

/rootкаталог - це домашній каталог для rootкористувача.

Основна відмінність полягає в тому, що такі файли налаштувань оболонки .bashrcвикористовуються як /rootу випадку sudo -i, так і у звичайного користувача у випадку sudo -s.


3
Які переваги має мати / root в домашніх умовах?
Сума ерго Кодіто

2
Такі файли .bashrcвикористовуються звідти у певній оболонці. У більшості випадків немає великої різниці.
Пілот6

11
@Unbesiegbarkeit / home може не встановлюватися за певних обставин, наприклад, режим одиночного користування, відсутність доступу до мережі тощо, і root все ще повинен мати можливість увійти в ці обставини.
doneal24

2
@ DougO'Neal Якщо /homeнедоступна, проблема не існує. Тоді ви дійсно увійдете як root.
Пілот6

4
@ Pilot6: Є відмінності, або повинні бути. Наприклад, на своїх машинах я встановив файл root. * Shrc, щоб було візуально видно, що я працюю як root - наприклад, підказка в іншому форматі та кольорова червона. Також псевдоніми налаштовані не робити певних речей, які можуть бути шкідливими, якщо виконувати їх як root, & c.
jamesqf

29

Причиною, по якій знаходиться домашній rootкористувач, є, /rootа не /home/rootтим, що зазвичай /homeє місцем монтування до окремого розділу / об'єму / диска ... (з різних причин, наприклад, дискового простору або віддаленого, ...)

Якщо з якоїсь причини встановлення /homeне вдалося, ви все одно можете підключитися як rootі бути у своєму /rootдомашньому каталозі, щоб дослідити та виправити речі

Більше того, для обслуговування, початкових налаштувань, зміни розміру, ... ви будете підключені як rootі повинні бути в змозі зняти / перезавантажити/home


7
+1, Це має бути прийнята відповідь. Ви можете змінити дім кореня на будь-яке місце, але ми залишаємо / root увімкнути /, а не / вдома з причин відновлення.
ntg

16

У чому причина і що саме / root каталог робить саме?

root має / root як свій дім, і коли ви переходите на root, ви опинитесь в його будинку. Така природа sudo -i. sudo -sробить те саме, але не перемикає каталоги. Посібник по судо :

-s [command]

Параметр -s (shell) запускає оболонку, задану змінною середовища SHELL, якщо вона встановлена ​​або оболонку, як зазначено в базі даних паролів. Якщо вказана команда, вона передається в оболонку для виконання через опцію -c оболонки. Якщо команда не вказана, виконується інтерактивна оболонка.

-i [command]

Параметр -i (імітувати початковий вхід) запускає оболонку, задану введенням бази даних паролів цільового користувача у вигляді оболонки для входу . Це означає, що оболонки зчитуються специфічними для входу файлами ресурсів, такими як .profile або .login. Якщо вказана команда, вона передається в оболонку для виконання через опцію -c оболонки. Якщо команда не вказана, виконується інтерактивна оболонка. sudo намагається змінити домашній каталог цього користувача перед запуском оболонки. Політика безпеки повинна ініціалізувати середовище до мінімального набору змінних, подібних до того, який існує під час входу користувача. Розділ «Середовище команд» у керівництві судерів (5) документує, як опція -i впливає на середовище, в якому знаходиться команда запускати, коли застосовується політика sudoers.

Користовий користувач повинен бути частиною системи. Якщо ви помістили / home на інший розділ, а root був частиною / home, у вас виникнуть серйозні проблеми, якщо розділ не змонтується. З тієї ж причини, що і у нас

/bin
/sbin 

і

/usr/bin
/usr/sbin

Коли ви ставите / usr на розділ і / usr не монтується, у вас все ще працює робоча система.


2
Як це відповідає на питання? Це коментар?
Пілот6

2
Судо -і не був частиною питання, коли я відповів ;-)
Rinzwind

2
Чи є у нас питання щодо sudo -ivs sudo -s?
Пілот6

2
Хм, ми могли б. У мене буде обшук. редагувати я не знайшов жодного, але я пам’ятав, що бачив його, але це було на наших голландських форумах ubuntu: D
Rinzwind

2
Здається, я тут побачив одного, але не зміг знайти жодного.
Пілот6

15

Файлова система Linux структурована певним чином. Основні бінарні файли є /bin/, файли завантажувача є /boot/, більшість файлів пристроїв є /dev/, точки монтування знімних носіїв є /media/, тощо ...

Дивіться https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard .

Деякі незначні деталі можуть відрізнятися від дистрибутива до дистрибутива (наприклад, /usr/bin/проти /usr/local/bin/), але загалом майже всі дистрибутиви Linux дотримуються однакової структури каталогів.

Щоб відповісти на ваше запитання:

Домашні каталоги користувачів перебувають у /home/. В принципі, Linux - це багатокористувацька операційна система. Ви можете просто мати один обліковий запис користувача на своєму ноутбуці з домашнім каталогом /home/<username>/, але якщо ви заглянете /home/на спільний сервер Linux, ви побачите багато домашніх каталогів: по одному для кожного облікового запису користувача. Ідея полягає в тому, що кожен користувач системи має дозволи на запис лише у своєму домашньому каталозі. Якщо ваше ім'я користувача - bobви можете читати та записувати та видаляти файли, /home/bob/але нічого не можна торкатися в /home/alice/або в /var/log/.

rootХоча інакше. rootє адміністративним користувачем та має права письма скрізь у системі (і може виступати як будь-який користувач системи). Тож має сенс, що rootє спеціальний домашній каталог, /root/оскільки rootвін не є звичайним користувачем. Крім цього, /root/це лише звичайний каталог, який не має особливої ​​магії, хоча цілком можливо (навіть ймовірно), що системні утиліти покладаються на /root/те, що вони є домом користувача root.

Коли ви виконуєте sudo -iв терміналі, ви переходите від, наприклад, звичайного користувача bobдо буття root. Зауважте, що цей перемикач впливає лише на вікно терміналу, куди ви ввели sudo -i. Для вашого файлового менеджера ви все ще є, bobі якщо ви відкриєте інше вікно терміналу, ви все ще bobтам. У цьому контексті символ ~є скороченням для домашнього каталогу поточного користувача. Для bob ~засобів, /home/bob/але для root ~засобів /root/.

Я сподіваюсь, що вам проясняються речі.


3
Це ідеальна відповідь!
Пілот6

5
Напевно, варто відзначити, що домашній каталог Root був спочатку /. Стандартне місце було змінено з міркувань безпеки (кожен повинен мати можливість перелічити файли /, щоб кожен міг бачити, які
dotfiles

14

Я бачу, що всі відповідають на те, що відбувається, коли ви входите як root (ви отримуєте ~ каталог, який не знаходиться в / home), але ніхто не каже чому. Ось чому:

Якщо вся / домашня структура стає непридатною, і вам доведеться її виправити, або якщо вам потрібно перерозподілити / додому, оскільки у неї не вистачає місця, ви повинні зробити це якось. Ви не можете ввійти як будь-який користувач, який має ~ / home, тому що ви зірветесь, як тільки спробуєте щось зробити. Отже, користувач root має hir ~ в іншому місці.


3
Спробуйте, і залежно від налаштувань дистрибутива та безпеки, як звичайний користувач, ви не будете входити в систему, або в кінцевому підсумку / як cwd та $ HOME просто недоступні. Справа в тому, що root, швидше за все, захоче отримати доступ до домашнього каталогу, коли інші цього не роблять, наприклад, через файли з особливими потребами. Подібно до більшості файлів fss, у вас є місце для root, а в системних облікових записах є домашні dirs назовні / вдома
PlasmaHH

2
Відповіді від alexf та arp, опубліковані пізніше, в основному говорять про те саме. Хіба ніхто не читає існуючі дописи, перш ніж додати власну відповідь?
Дженніфер

@Dan - я скасував ваші зміни. На кмітливість:
Дженніфер

(1) Я припускаю, що це поліпшення, щоб поставити / додому та ~ в галочки, але це не все важливо для цього, тому що всі знають, що я маю на увазі. Ви знали, що я маю на увазі. (2) "Ви зіткнетесь, як тільки спробуєте", є непослідовним у часі. "ти б" - це "ти би", а "би" - минуле час, тому воно повинно переходити з "випробуваним", яке є минулим часом, а не "спробувати", яке є теперішнім часом. (3) "hir" - це новий займенник, винайдений Кейт Борнштейн; він охоплює "його" та "її" і корисний, коли ви не знаєте статі. ("Зе" охоплює "він" і "вона".)
Дженніфер

@Jennifer Не хвилюйся. Ви щодня дізнаєтесь щось нове. Я думав, що hirце помилка друку. Дякую за всю інформацію! Я рекомендую тримати жорстке форматування коду, але це залежить від вас.
Dan

8

Ви кажете, що ви не просунутий користувач, тому я спробую написати покрокову відповідь.

Під час використання Linux ви повинні пам'ятати деякі важливі речі:

  • Linux - це багатокористувацька система. Він був задуманий таким чином з самого початку, дотримуючись філософії Unix (зауважте, різний підхід, застосований Windows, який був задуманий як єдина система користувача)

  • Як багатокористувацька система, Linux має можливість відокремлювати файли, що належать кожному користувачеві в системі. Шлях Linux це досягає шляхом присвоєння кожному користувачеві підпапки всередині /home/каталогу. Кожен файл користувача належить йому / їй, і лише вони можуть відкривати їх, змінювати їх або дозволяти іншим користувачам їх використовувати. І навпаки, кожен файл у файловій системі належить користувачеві, і цей користувач має владу над тим, хто може бачити або використовувати цей файл. Як вже згадувалося в іншій відповіді, спочатку користувачі могли розміщувати свої файли в будь-якій точці системи, але в якийсь момент стало очевидним, що все має бути краще організовано, і /home/("slash-home") стає місцем, де мають бути файли користувачів.

  • Однак є файли, необхідні самій системі та / або кожному користувачеві в системі: бінарні файли, файли пристроїв, системні файли та інше (пам’ятайте: в Linux та в будь-якій іншій системі, схожа на unix, все є файлом) . Це потрібно глобально файли зберігаються в різних місцях по файлової системи, організованих в різних папках в корені файлової системи : /. Також ці глобально потрібні файли належать не конкретному користувачеві системи, а самій системі ... але це може заплутати: кому належать бінарні файли? Хто дає дозволи на ці файли, необхідні в усьому світі?

  • Оскільки кожен файл у системі "потребує власника", повинен бути "спеціальний користувач", який може адмініструвати потрібні в усьому світі файли. Більше того, цей "спеціальний користувач" може робити те, що не може робити інший користувач у системі: він може створювати інших користувачів для системи. Цей користувач називається "суперкористувач" (для нас смертних) або "корінь" (для системи).

  • Тепер цей суперпользователь є іншим користувачем системи, але він має повноваження (та обов'язки) набагато вище, ніж інші користувачі: наприклад, обслуговування. Тому природно думати, що "root" потребує місця, щоб помістити свої речі, але це не слід плутати з речами, що належать іншим користувачам. Таким чином, замість того , щоб мати під вкладеним /home/, «корінь» має своє власне зарезервоване простір в файлової системі: /root/( так зване «слеш-коренем»). Пам’ятайте: «root» - це дуже особливий користувач, тому для розміщення своїх речей йому потрібне спеціальне привілейоване місце.

  • Тепер Ubuntu не має кореневого облікового запису, включеного за замовчуванням, тому "звичайний" користувач повинен мати повноваження над системою в цілому. Ось тут і починається команда sudo("переключити користувача і робити"): вона дозволяє звичайному користувачеві (раніше включеному до списку "судорів") виконувати команди так, як ніби він був іншим користувачем, наприклад "корінь".

  • Нарешті, ці -iпараметри означають "імітувати початковий вхід". Це означає, що sudoперед виконанням даної команди буде прочитано дані "профілю цільового користувача". Якщо ви не надаєте команду, тоді sudoзапуститься екземпляр оболонки з цільовим користувачем (кореневим) профілем ..., і це починається з переміщення до папки "домашня" "цільового користувача". Так sudo -iви перемістите вас до домашньої папки root ( /root/).

Я сподіваюся, що це допоможе вам зрозуміти, що з цим відбувається sudo -i.


EDIT

Я думаю, що я залишив щось нероз'ясненим, тому додам їх сюди:

  • Я сказав вище: "в Linux все є файлом". І я маю на увазі це, буквально! Ваші документи та зображення - це файли, але також термінали (ті, до яких можна отримати доступ, натиснувши [CTRL] + [ALT] + [Fn]), фізичні диски та клавіатуру, наприклад. Unix-схожа система працює, читаючи чи записуючи дані з / у файли та направляючи потік даних у / з відповідних файлів у системі, які представляють файл, з яким ви працюєте, та введення ключів, які ви вводите, і вихід, який ви бачите на екрані. Деякі з цих файлів користувачі можуть використовувати безпосередньо, але інші не можуть; наприклад, ви не можете читати чи записувати безпосередньо на жорсткий диск, але ви повинні дозволити Linux зв’язати звичайну папку, яку можна переглядати, до файлу пристрою (під /dev/), що представляє ваш жорсткий диск.

  • Файлова система Linux може охоплювати декілька фізичних дисків . Простий приклад, коли ви підключаєте накопичувач USB-пера: Linux може встановити цей диск (монтаж - це процес, за допомогою якого система підключає стандартну папку, де ви можете бачити файли в оболонці або файловому навігаторі, до файлу пристрою /dev/) та ви можете працювати з ним, і коли ви закінчите, ви просите Linux демонтувати накопичувач, а потім вийняти його з порту USB. Тут важливо те, що цей цикл "mount - unmount" впливає на * ту саму файлову систему ", яку ви використовуєте щодня: ви не створюєте нову файлову систему щоразу, коли ви додаєте або видаляєте фізичний диск, але додаєте цей фізичний диск до файлової системи ( ще раз порівняйте цю філософію з підходом Вндоуса).

  • Оскільки файлова система може охоплювати декілька фізичних дисків, стає очевидним, що різні файли системи можуть бути записані на різні фізичні накопичувачі. Один накопичувач може зберігати системні бінарні файли ( /bin/), а інший може зберігати файли користувача ( /home/та його нащадків). У налаштуваннях з декількома накопичувачами звичайно /home/писати на іншому фізичному диску, ніж /root/, тому, якщо система зламається, а користувачі не можуть увійти, тому що диск, на якому /home/перестає працювати, може мати root. (Це спрощено ... багато речей потрібно скопіювати на кожен фізичний диск, щоб дозволити root увійти, якщо жоден інший користувач не може, але це може дати вам загальну думку).

  • І цей ~символ tilde ( ) ... він позначає домашній каталог поточного користувача. Якщо ви зареєстровані як "bob", тоді cd ~ви перейдете на вас /home/bob/, але якщо ви ввійшли як "root", то cd ~перейдете на/root/

tl; dr. Отже, зараз я думаю, що все сказано:

  • "root" - це спеціальний користувач, який має повноваження та відповідальність набагато вище інших користувачів

  • "/ root /" - це місце, де "root" може зберігати свої речі, не ризикуючи його плутати з іншими речами, що належать звичайним користувачам. Цю папку можна записати на інший фізичний привід, ніж /home/.

  • sudo -iзапускає оболонку, що імітує логін root, і це означає перехід до домашньої папки root. Як і будь-який інший користувач, cd ~перенесе вас у ваш домашній каталог, але, якщо ви root, це буде/root/

  • Якщо система встановлена ​​на різних фізичних накопичувачах, root може увійти та спробувати виправити речі, навіть якщо інший диск у системі не працює.


1
Ідеальна відповідь!
Арка

7

Основна причина домашнього каталогу root трактується по-різному:

Якщо все піде не так, вам потрібно мати можливість виконувати завдання відновлення системи, як тільки вам вдасться встановити / файлову систему.

Залежно від вашого домашнього домашнього каталогу каталоги можуть бути в іншій файловій системі або вони можуть бути навіть встановлені в мережі.

Для того, щоб увійти як root (тобто ввести ім'я та пароль root у запиті для входу) з консолі, вам потрібна лише одна файлова система.

(Тому також основні утиліти знаходяться в / bin та / sbin замість / usr / bin або / usr / sbin - все в / usr можна витратити.)

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