为什么拥有root特权的用户不再使用〜?


20

出于好奇,我想知道为什么,当我以root身份登录时,我不再位于/ home / user中。是什么原因,/ root目录究竟能做什么?

我不是高级用户。请简单回答,或提供一个链接,提供清晰,简单的说明。我使用Ubuntu 16.04,并以root身份登录sudo -i。由于它的解释这里sudo -i/根的家。我想知道原因是什么;有什么优势吗?而不是的用户sudo -s


11
root也是用户,所以他有他的个人home目录,但这个目录名为root
damadam

3
您可以使用sudo -s位于同一用户目录中。
飞行员

3
@ Pilot6对不起,我补充道,在看到您的评论的同时:D希望您不要介意:)
Rinzwind

2
@Unbesiegbarkeit man sudo将回答问题。简单来说,user -i是使用root用户设置,但要sudo -s使用当前用户设置。
飞行员

Answers:


28

您不是通过运行sudo命令以root用户身份登录。您正在使用root特权启动shell。

如果要保留在当前用户主目录中,则可以使用sudo -s代替sudo -i命令。

cd ~将带您进入同一目录,就像您不在具有root特权的shell中一样。从字面上看/home/$USER

使用时sudo -i,系统就像您以root用户身份登录一样。因为这

cd ~ 

将您带到根用户主目录/root

/rootdirectory是root用户的主目录。

的主要区别在于,外壳设置文件喜欢.bashrc由用来/root在以下情况下sudo -i,与从正常用户的情况下,sudo -s


3
/ root为家有什么优势?
Codito ergo sum

2
像这样.bashrc的文件在特定的shell中从那里使用。在大多数情况下,差异不大。
飞行员

11
@Unbesiegbarkeit / home在某些情况下可能无法挂载,例如单用户模式,无网络访问等,并且在这些情况下root仍需要能够登录。
doneal24 '18年

2
@ DougO'Neal如果/home不可用,则问题不存在。然后,您实际上以root用户身份登录。
飞行员

4
@ Pilot6:有差异,或者应该有差异。例如,在我的机器上,我设置了root的。* shrc文件,以使其在视觉上可以看出我是以root身份运行的-例如,以其他格式提示并显示为红色。此外,还设置了别名,以防止某些以ro​​ot&c身份进行操作可能有害的事情。
jamesqf

29

之所以的归属root用户是/root/home/root是因为通常/home是一个安装点到单独的分区/卷/盘...(由于各种原因,诸如磁盘空间,或远程,...)

如果由于某种原因挂载/home失败,您仍然可以连接root并位于/root主目录中以调查并修复问题。

此外,对于维护,初始设置,调整大小……,您将可以连接,root并且应该能够卸载/重新安装/home


7
+1,这应该是公认的答案。您可以将root的主目录更改为任何位置,但是出于恢复的原因,我们将/ root保留为/而不是/ home。
ntg

16

是什么原因,/ root目录究竟能做什么?

root将/ root作为其主目录,当您切换到root时,它将最终进入其主目录。那就是本质sudo -isudo -s执行相同的操作,但不切换目录。sudo手册

-s [command]

-s(shell)选项运行由SHELL环境变量指定的shell(如果已设置)或密码数据库中指定的shell。如果指定了命令,则通过外壳的-c选项将其传递到外壳以执行。如果未指定命令,则执行交互式外壳程序。

-i [command]

-i(模拟初始登录)选项将由目标用户的密码数据库条目指定的外壳作为登录外壳运行。这意味着Shell将读取特定于登录的资源文件,例如.profile或.login。如果指定了命令,则通过外壳的-c选项将其传递到外壳以执行。如果未指定命令,则执行交互式外壳程序。sudo尝试在运行外壳程序之前更改为该用户的主目录。安全策略应将环境初始化为最少的变量集,类似于用户登录时出现的变量。sudoers(5)手册中的“命令环境”部分记录了-i选项如何影响命令所在的环境。在使用sudoers策略时运行。

root用户必须是系统的一部分。当您将/ home放在另一个分区上并且root是/ home的一部分时,如果未安装该分区,则会遇到严重的麻烦。出于同样的原因,我们也有

/bin
/sbin 

/usr/bin
/usr/sbin

当您将/ usr放在分区上并且/ usr没有挂载时,您仍然可以使用系统。


2
这如何回答这个问题?是评论吗?
飞行员

2
当我回答时,sudo -i并不是问题的一部分;-)
Rinzwind

2
我们是否有关于sudo -ivs 的问答sudo -s
飞行员

2
嗯,我们可能会的。我会搜索。编辑我没有找到一个,但是我记得记得有一个,但是那是在我们的荷兰论坛上:D
Rinzwind

2
似乎我在这里看到了一个,但找不到。
飞行员

15

Linux文件系统是以特定方式构造的。基本二进制文件在其中/bin/,引导装载程序文件在其中/boot/,大多数设备文件在其中/dev/,可移动媒体的安装点在/media/等中...

参见https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

发行版之间的一些次要细节可能有所不同(例如/usr/bin/vs. /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
这是一个完美的答案!
飞行员

5
值得注意的是Root的主目录最初是/。该标准位置得到了改变出于安全原因(每个人都必须能够在列表文件/,所以任何人都可以看到根用户有什么点文件。
奥斯汀Hemmelgarn

14

我看到每个人都在回答当您以root身份登录时会发生什么情况(您获得的〜目录不在/ home中),但是没人在说为什么。 原因如下:

如果整个/ home结构变得无法使用,并且您必须对其进行修复,或者由于空间不足而需要重新分配/ home,则必须以某种方式这样做。您不能以在/ home中具有〜的任何用户身份登录,因为一旦尝试执行任何操作,您都将崩溃。因此,根用户在其他位置具有hir〜。


3
尝试一下,根据普通用户的发行版和安全性设置,您将无法登录,或者以/结束,因为cwd和$ HOME才无法访问。关键是,root用户最有可能希望在其他用户不访问时访问其主目录,例如,由于那里的特殊需要文件。与大多数fss相似,您已经为root保留了空间,并且系统帐户在/ home之外有家庭目录
PlasmaHH

2
稍后发布的alexf和arp的答案基本上是在说同样的话。在添加自己的答案之前,没有人会阅读现有帖子吗?
詹妮弗(Jennifer)

@Dan-我已回滚您的更改。智慧:
詹妮弗

(1)我认为将/ home和〜放入复选框中是一种改进,但是这样做并不是那么重要,因为每个人都知道我的意思。你明白我的意思。(2)“一旦尝试就会崩溃”的时态不一致。“ youd”是“ you will”,“ would”是过去时,因此必须与过去时的“ tried”相提并论,而不是现在时的“ try”。(3)“ hir”是Kate Bornstein发明的新代词;它涵盖“他”和“她”,并且在您不知道性别时很有用。(“ Ze”涵盖“ he”和“ she”。)
Jennifer

@Jennifer不用担心。你每天学习新的东西。我以为hir是错字。感谢您提供所有信息!我确实建议对代码格式进行严格调整,但这取决于您。

8

您说您不是高级用户,所以我将尝试写一个逐步的答案。

使用Linux时,您必须记住一些重要的事情:

  • Linux是一个多用户系统。从一开始就遵循Unix的理念进行构想(请注意Windows采用的不同方法,这被认为是单个用户系统)

  • 作为多用户系统,Linux能够分离属于系统中每个用户的文件。Linux完成此操作的方法是在/home/目录内为每个用户分配一个子文件夹。每个用户文件均归他/她所有,只有他/她可以打开,修改它们或允许其他用户使用它们。相反,文件系统中的每个文件都属于一个用户,并且该用户有权控制谁可以查看或使用该文件。如另一个答案中所述,最初用户可以将其文件放置在系统中的任何位置,但是在某些时候,显然应该更好地组织事物,并且/home/(“ slash-home”)成为了用户文件应该放置的地方。

  • 但是,系统本身和/或系统中的每个用户都需要文件:二进制文件,设备文件,系统文件等(请记住:在Linux和任何其他类似Unix的系统中,所有内容都是文件) 。这需要全球的文件存储在沿文件系统不同的地方,内各种文件夹组织文件系统的根目录/。而且,这些全局所需的文件不属于系统的特定用户,而是属于系统本身……但这可能会造成混淆:谁拥有二进制文件?谁授予这些全局所需文件的权限?

  • 由于系统中的每个文件都“需要所有者”,因此必须有一个“特殊用户”可以管理全局所需的文件。而且,此“特殊用户”可以执行系统中其他用户无法执行的操作:他可以为系统创建其他用户。该用户称为“超级用户”(对于我们来说是凡人)或“ root”(对于系统)。

  • 现在,该超级用户是系统的另一个用户,但是其权限(和职责)远高于其他用户:例如维护。因此,很自然地认为“ root”需要放置他的东西的地方,但是不要与其他用户的东西混淆。因此,/home/“ root”在文件系统中拥有自己的保留空间,而不是在下面的子文件夹中:(/root/称为“ slash-root”)。请记住:“ root”是一个非常特殊的用户,因此需要一个特殊的特权位置来放置他的东西。

  • 现在,Ubuntu默认情况下没有启用根帐户,因此“普通”用户必须对整个系统具有权限。这就是sudo(“切换用户并执行”)命令的位置:它允许普通用户(以前包括在“ sudoers”列表中)执行命令,就像执行其他用户一样,例如“ root”。

  • 最后,该-i选项表示“模拟初始登录”。这意味着sudo将在执行给定命令之前读取“目标用户的个人资料”的数据。如果您不提供命令,则将sudo使用目标用户的(根)配置文件启动shell实例...,然后从移动到“目标用户”的“ home”文件夹开始。因此,sudo -i将您移至root的主文件夹(/root/)。

希望这可以帮助您了解会发生什么sudo -i


编辑

我想我还没有澄清一些内容,因此在这里添加它们:

  • 我在上面说过:“在Linux中,一切都是文件”。我的意思是,从字面上看!您的文档和图像既是文件,又是终端(可以通过按[CTRL] + [ALT] + [Fn]进行访问),物理驱动器和键盘。类似于Unix的系统通过以下方式工作:从文件中读取数据或向文件中写入数据,并引导数据流到系统中适当的文件,或从中适当的文件引导数据流,这些文件代表您正在使用的文件以及输入的键,以及您在屏幕上看到的输出。这些文件中的一些可以由用户直接使用,而另一些则不能;例如,您不能直接读取或写入硬盘驱动器,但是必须让Linux将普通的可浏览文件夹链接到/dev/代表您的硬盘驱动器的设备文件(在下方)。

  • Linux文件系统可以跨越多个物理驱动器。一个简单的示例是插入USB笔式驱动器时:Linux可以挂载该驱动器(挂载是系统将标准文件夹(其中您可以在shell或文件导航器中看到文件)连接到中的设备文件的过程/dev/)和您可以使用它,完成后,您要求Linux卸下驱动器,然后将其从USB端口中删除。这里重要的是,这个“挂载-卸载”周期会影响*您每天使用的同一文件系统:您不会在每次添加或删除物理驱动器时创建新的文件系统,而是将物理驱动器添加到文件系统中(再次将这种哲学与Wndows的方法进行比较。

  • 由于文件系统可以跨越多个物理驱动器,因此很明显,可以将系统的不同文件写入不同的物理驱动器。一个驱动器可以存储系统二进制文件(/bin/),而另一个驱动器可以存储用户的文件(/home/及其后代)。在多驱动器设置中,通常/home/写入的物理驱动器/root/与不在同一物理驱动器中,因此,如果系统崩溃并且由于/home/停止运行的驱动器而导致用户无法登录,则root用户可以。(这很简单。如果没有其他用户可以,很多东西需要复制到每个物理驱动器中,以允许root用户登录,但这可以为您提供一个总体思路。)

  • 该波浪号(~)字符...表示当前用户的主目录。如果您以“ bob”身份登录,cd ~则将带您进入/home/bob/,但如果以“ root”身份登录,cd ~则将带您进入/root/

tl; dr所以现在我认为一切都说了:

  • “ root”是一个特殊的用户,其权限和职责远高于其他用户

  • “ / root /”是“ root”可以存储其内容的位置,而不会使其与属于普通用户的其他内容混淆。可以将此文件夹写入不同于的其他物理驱动器/home/

  • sudo -i启动一个shell,模拟root的登录名,这意味着移至root的主文件夹。与其他任何用户一样,cd ~会将您带到您的主目录,但是,如果您是root用户,它将是/root/

  • 如果系统安装在不同的物理驱动器上,即使系统中的另一个驱动器发生故障,root用户也可以登录并尝试修复问题。


1
完美的答案!

7

root的主目录被区别对待的主要原因:

当出现问题时,您需要能够在设法挂载/文件系统后立即执行系统恢复任务。

根据您的设置,用户主目录可能位于不同的文件系统上,甚至可能通过网络安装。

为了从控制台以root用户身份登录(即在登录提示符下输入名称root和root密码),您只需要安装一个文件系统。

(这也是为什么核心实用程序位于/ bin和/ sbin中而不是/ usr / bin或/ usr / sbin中的原因-/ usr中的所有内容都是消耗性的。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.