Почему пользователь с правами root больше не находится в ~?

20

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

Я не продвинутый пользователь. Пожалуйста, ответьте простыми словами или дайте ссылку, которая дает четкие, простые объяснения. Я использую Ubuntu 16.04 и захожу в систему как пользователь root sudo -i. Как объясняется здесь , sudo -iимеет / root в качестве дома. Я хочу знать, в чем причина; есть ли здесь какое-то преимущество? И не в ~ как пользователь sudo -s.

Codito Ergo Sum
источник
11
Пользователь root также является пользователем, поэтому у него есть свой личный homeкаталог, но он называетсяroot
damadam
3
Вы можете использовать, sudo -sчтобы быть в том же каталоге пользователя.
Pilot6
3
@ Pilot6 извините, я добавил это в то же время, когда увидел ваш комментарий: D Надеюсь, вы не против :)
Rinzwind
2
@Unbesiegbarkeit man sudoответит на вопрос. Проще user -iговоря, используя настройки пользователя root, но sudo -sтекущие настройки пользователя.
Pilot6

Ответы:

28

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

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

cd ~перенесет вас в тот же каталог, как если бы вы не были в оболочке с привилегиями root. Буквально /home/$USER.

При использовании sudo -iсистема действует так, как будто вы вошли в систему как rootпользователь. Из-за этого

cd ~ 

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

/rootкаталог является домашним каталогом для rootпользователя.

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

Pilot6
источник
3
Какие преимущества имеет наличие / root как дома?
Codito Ergo Sum
2
Файлы вроде .bashrcиспользуются оттуда в определенной оболочке. В большинстве случаев нет большой разницы.
Pilot6
11
@Unbesiegbarkeit / home не может быть смонтирован при определенных обстоятельствах, например, в однопользовательском режиме, без доступа к сети и т. Д., И root по-прежнему должен иметь возможность войти в систему в таких условиях.
doneal24
2
@ DougO'Neal Если /homeнет, проблема не существует. Тогда вы действительно войдете в систему как root.
Pilot6
4
@ Pilot6: Есть различия, или должны быть. Например, на моих машинах я настроил файл root. * Shrc, чтобы визуально было видно, что я работаю от имени пользователя root - например, приглашение в другом формате и красного цвета. Кроме того, псевдонимы настроены так, чтобы не делать определенные вещи, которые могут быть вредными, если они выполняются от имени пользователя root и т.
jamesqf
29

Причиной, по которой домашний rootпользователь является /rootи не /home/rootявляется, является то, что обычно /homeэто точка монтирования для отдельного раздела / тома / диска ... (по различным причинам, таким как дисковое пространство или удаленное устройство, ...)

Если по какой-либо причине монтирование /homeне удастся, вы все равно можете подключиться как rootи находиться в вашем /rootдомашнем каталоге, чтобы исследовать и исправить ошибки

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

AlexF
источник
7
+1, это должен быть принятый ответ. Вы можете изменить дом root на любое место, но мы оставляем / root для включения /, а не для / home по причинам восстановления.
нтг
16

В чем причина и что именно делает каталог / root?

root имеет / root в качестве своего дома, и когда вы переключитесь на root, вы окажетесь в его доме. Это природа sudo -i. sudo -sделает то же самое, но не переключает каталоги. Руководство по sudo :

-s [command]

Опция -s (shell) запускает оболочку, указанную переменной среды SHELL, если она установлена, или оболочку, указанную в базе данных паролей. Если указана команда, она передается в оболочку для выполнения через опцию -c оболочки. Если команда не указана, выполняется интерактивная оболочка.

-i [command]

Опция -i (имитировать начальный вход в систему) запускает оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве оболочки входа в систему . Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения через опцию -c оболочки. Если команда не указана, выполняется интерактивная оболочка. sudo пытается перейти в домашний каталог этого пользователя перед запуском оболочки. Политика безопасности должна инициализировать среду с минимальным набором переменных, аналогичным тому, который присутствует при входе пользователя в систему. В разделе «Командная среда» руководства sudoers (5) описано, как параметр -i влияет на среду, в которой выполняется команда. запускать, когда используется политика sudoers.

Пользователь root должен быть частью системы. Когда вы помещаете / home в другой раздел, а root является частью / home, вы можете столкнуться с серьезными проблемами, если раздел не был смонтирован. По той же причине у нас также есть

/bin
/sbin 

а также

/usr/bin
/usr/sbin

Когда вы помещаете / usr в раздел, а / usr не монтируется, у вас остается работающая система.

Rinzwind
источник
2
Как это отвечает на вопрос? Это комментарий?
Pilot6
2
Когда я ответил, вопрос sudo -i не был частью вопроса ;-)
Rinzwind,
2
У нас есть Q & A о sudo -iпротив sudo -s?
Pilot6
2
Хм, мы могли бы. У меня будет поиск. Я не нашел ни одного, но помню, что видел его, но это было на наших голландских форумах по Ubuntu: D
Rinzwind
2
Кажется, что я видел один здесь, но не мог найти ни того, ни другого.
Pilot6
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
Это идеальный ответ!
Pilot6
5
Вероятно, стоит отметить, что домашний каталог Root изначально был /. Стандартное местоположение было изменено по соображениям безопасности (каждый должен иметь возможность перечислять файлы /, чтобы каждый мог видеть, какие точечные файлы имел пользователь root.
Остин Хеммельгарн,
14

Я вижу, что все отвечают на то, что происходит, когда вы входите в систему как root (вы получаете каталог ~, который не находится в / home), но никто не говорит почему. Вот почему:

Если вся структура home / home становится непригодной для использования, и вам необходимо ее исправить, или если вам нужно перераспределить / home, потому что она исчерпывает пространство, вы должны как-то это сделать. Вы не можете войти в систему как любой пользователь, имеющий ~ в / home, потому что вы потерпите крах, как только попытаетесь что-либо сделать. Таким образом, пользователь root имеет hir ~ в другом месте.

Дженнифер
источник
3
Попробуйте, и в зависимости от настроек дистрибутива и безопасности обычного пользователя вы не будете входить в систему, или в результате / cwd и $ HOME просто будут недоступны. Дело в том, что root, скорее всего, захочет получить доступ к своему домашнему каталогу, когда другие этого не делают, например, из-за файлов с особыми потребностями. Подобно большинству fss, вы зарезервировали место для root, а у системных учетных записей есть домашние каталоги вне / home
PlasmaHH
2
Ответы alexf и arp, опубликованные позже, в основном говорят одно и то же. Никто не читает существующие посты, прежде чем добавлять свой собственный ответ?
Дженнифер
@ Дан - я откатил ваши изменения. Для остроумия:
Дженнифер
(1) Полагаю, это улучшение для «положить / домой» и «в» в клетках, но это не так важно, потому что все в любом случае понимают, что я имею в виду. Вы знали, что я имел в виду. (2) «Вы потерпите крах, как только попробуете», противоречиво в напряжении. «вы бы» - это «вы бы», а «бы» - прошедшее время, поэтому оно должно идти с «попробованным», которое является прошедшим временем, а не «попытаться», которое является настоящим временем. (3) «hir» - новое местоимение, изобретенное Кейт Борнштейн; оно охватывает «его» и «ее» и полезно, когда вы не знаете пол. («Зе» охватывает «он» и «она».)
Дженнифер
@ Дженнифер Не беспокойся. Ты узнаешь что-то новое каждый день. Я думал, что hirэто опечатка. Спасибо за всю информацию! Я рекомендую сохранять жесткое форматирование кода, но это зависит от вас.
Дан
8

Вы говорите, что вы не опытный пользователь, поэтому я постараюсь написать пошаговый ответ.

Когда вы используете Linux, вы должны помнить некоторые важные вещи:

  • Linux - многопользовательская система. Это было задумано с самого начала, следуя философии Unix (обратите внимание на другой подход, принятый в Windows, который был задуман как однопользовательская система)

  • Как многопользовательская система, Linux имеет возможность разделять файлы, принадлежащие каждому пользователю в системе. Linux выполняет это путем назначения каждому пользователю подпапки внутри /home/каталога. Файлы каждого пользователя принадлежат ему / ей, и только он может открывать, изменять их или разрешать другим пользователям использовать их. И наоборот, каждый файл в файловой системе принадлежит пользователю, и этот пользователь имеет право контролировать, кто может просматривать или использовать этот файл. Как упоминалось в другом ответе, первоначально пользователи могли размещать свои файлы в любом месте системы, но в какой-то момент стало очевидно, что все должно быть лучше организовано, и /home/("slash-home") стал местом, где должны находиться файлы пользователя.

  • Однако существуют файлы, которые нужны самой системе и / или каждому отдельному пользователю в системе: двоичные файлы, файлы устройств, системные файлы и т. Д. (Помните: в Linux и в любой другой unix-подобной системе все является файлом) , Это нужно глобально файлы хранятся в различных местах по файловой системе, организованных в различных папках в корне файловой системы : /. Кроме того, эти глобально необходимые файлы принадлежат не конкретному пользователю системы, а самой системе ... но это может сбивать с толку: кому принадлежат двоичные файлы? Кто дает разрешения на эти глобально необходимые файлы?

  • Поскольку каждый файл в системе «нуждается в владельце», должен существовать «специальный пользователь», который может управлять глобально необходимыми файлами. Более того, этот «специальный пользователь» может делать то, что не может делать ни один другой пользователь в системе: он может создавать других пользователей для системы. Этот пользователь называется «суперпользователь» (для нас, смертных) или «корень» (для системы).

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

  • Теперь в Ubuntu по умолчанию не включена корневая учетная запись, поэтому «обычный» пользователь должен иметь полномочия над системой в целом. Вот тут и начинает действовать команда sudo(«переключить пользователя и делать»): она позволяет обычному пользователю (ранее включенному в список «sudoers») выполнять команды, как если бы он был другим пользователем, например «root».

  • Наконец, эти -iпараметры означают «имитировать первоначальный вход в систему». Это означает, что sudoперед выполнением данной команды будут прочитаны данные «профиля целевого пользователя». Если вы не предоставите команду, тогда sudoзапустится экземпляр оболочки с профилем целевого пользователя (root) ... и это начнется с перемещения в «домашнюю» папку «целевого пользователя». Так sudo -iчто переместим вас в домашнюю папку root ( /root/).

Я надеюсь, что это поможет вам понять, что происходит с sudo -i.


РЕДАКТИРОВАТЬ

Я думаю, что оставил что-то неясным, поэтому я добавлю их сюда:

  • Я сказал выше: «в Linux все является файлом». И я имею в виду, буквально! Ваши документы и изображения - это файлы, но также и терминалы (к которым вы можете получить доступ, нажав [CTRL] + [ALT] + [Fn]), физические диски и клавиатура, например. Unix-подобная система работает, читая или записывая данные из / в файлы, и направляя поток данных в / из соответствующих файлов в системе, которые представляют файл, с которым вы работаете, и ввод ключей, которые вы печатаете, и вывод, который вы видите на экране. Некоторые из этих файлов могут использоваться непосредственно пользователями, но некоторые другие не могут; Например, вы не можете читать или писать напрямую на жесткий диск, но вы должны позволить Linux связать обычную, просматриваемую папку с файлом устройства (ниже /dev/), представляющим ваш жесткий диск.

  • Файловая система Linux может охватывать несколько физических дисков . Простой пример, когда вы подключите USB флэш - накопитель: Linux может монтировать этот диск (монтаж на процесс , с помощью которого система подключает стандартную папку, где вы можете увидеть файлы в раковине или файл навигатор, в файл устройство в /dev/) и вы можете работать с ним, и когда вы закончите, вы попросите Linux отключить диск и затем удалить его из порта USB. Здесь важно то, что этот цикл «монтирование - размонтирование» затрагивает * ту же файловую систему, которую вы используете каждый день: вы не создаете новую файловую систему каждый раз, когда добавляете или удаляете физический диск, а добавляете этот физический диск в файловую систему ( еще раз, сравните эту философию с подходом Wndows).

  • Поскольку файловая система может охватывать несколько физических дисков, становится очевидным, что разные файлы системы могут быть записаны на разные физические диски. Один диск может хранить системные двоичные файлы ( /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 может войти в систему и попытаться исправить ситуацию, даже если другой диск в системе выйдет из строя.

Barranka
источник
1
Идеальный ответ!
Arch
7

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

Когда что-то идет не так, как надо, вы должны иметь возможность выполнять задачи восстановления системы, как только вам удастся смонтировать / filesystem.

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

Чтобы войти в систему как пользователь root (т. Е. Ввести имя root и пароль root в приглашении для входа в систему) из консоли, вам потребуется только одна смонтированная файловая система.

(Именно поэтому основные утилиты находятся в / bin и / sbin вместо / usr / bin или / usr / sbin - все в / usr расходуется.)

агр
источник