问题描述
我在我的电脑上安装了Ubuntu。要登录,我使用我在安装期间创建的用户名和密码。这是否意味着我是root用户?如果是,那么我如何成为non-root?看起来non-root用户比admin用户更安全。
最佳解决思路
您是管理员,但不是root
。 root
用户可以做任何事情。管理员可以使用perform actions as root
,但通常管理员所做的事情不是由root
完成的。这样,您就可以完全控制自己的系统,但只有在您选择使用它时才能完全控制。
当你尝试做root
这样的东西时,Ubuntu会要求你输入密码,以确保它真的是你。
用户帐户:人为,否则
真正的人类用户拥有用户帐户来代表他们。您在安装Ubuntu时创建了一个此类帐户。但并非所有用户帐户都代表真正的人类用户。
真实的人类用户通过其用户帐户被授予(和拒绝)能力。他们必须使用他们的用户帐户来使用该系统;因此,他们的用户帐户的能力和限制适用于他们。
用户帐户还用于编写一组能力和限制。一些用户帐户 – 实际上,除非您拥有该计算机的许多人类用户,否则这些帐户存在,以便某些程序或命令可以使用其身份,具有正确能力的身份和作业限制来运行。
例如,www-data
用户存在,因此如果您运行Web服务器,它将拥有服务器可访问的数据。不需要授权真正的人类用户对这些数据进行未经检查的更改,并且不必授权Web服务器执行服务Web所不需要的任何操作。因此,网络数据和系统的其他部分对于意外或故意破坏更加安全,而不是Web服务器由具有Web服务器的所有功能的某个人类用户运行(并且其服务器的权力将是具有)。
最重要的Non-Human用户帐户
superuser,其用户名为root
,是一个non-human用户帐户,具有非常具体的能力和限制组合:所有能力,没有限制。
root
允许做任何事情。 root
仍然无法做到,因为系统本身无法执行或有意义。因此,root
不能在uninterruptible sleep或make a rock too heavy to move, then move it中使用kill a process that is。
许多重要的系统进程(如init
)运行为root
,而root
用于执行管理任务。
我可以以root
身份登录吗?
可以配置root
帐户,以便可以使用密码登录,但默认情况下不会在Ubuntu中启用。相反,您可以将root
视为www-data
,lp
,nobody
和其他non-human。 (运行cat /etc/passwd
或getent passwd
查看全部。)
人类用户使用他们自己的用户帐户登录,然后如果要使用其他用户帐户执行某项任务,则会导致使用该身份执行该任务,而无需实际以该用户身份登录。
可以配置其他non-human用户,如www-data
,因此也可以以其身份登录。但这种情况非常罕见,而在其他一些Unix-like操作系统中,通常以终端中的root
登录。将整个图形界面作为root
运行的风险,加上有多少图形程序不能设计为以root
运行并且可能无法正常运行,这意味着您永远不应该尝试获得root
拥有的桌面会话。
请注意,虽然在Ubuntu中默认禁用以root身份登录,但是有一些方法可以获得root shell而无需以root身份进行身份验证,这会产生类似的效果:最常见的是sudo -s或-i,我如何启动到root shell?和similar techniques。 (如果您不知道这些是什么,请不要担心。)这实际上并没有登录:在恢复模式下,您将在任何登录之前成为root用户;使用sudo-based方法,您只需以root身份运行shell。
Administrators
在Ubuntu中,管理员是那些可以随心所欲地做root
的用户,当他们选择这样做时。
系统设置>用户帐户。 “Eliah Kagan”是管理员,所以他可以做root
,但他不是root
。
我是我的Ubuntu系统的管理员。当我运行程序时,通常它们以ek
运行(“Eliah Kagan”是与ek
用户名对应的全名。)
当我运行AbiWord或LibreOffice时,它运行为ek
。当我运行Firefox,Chromium,Empathy或Pidgin时,它运行为ek
。运行以提供桌面界面的程序作为ek
运行。
但是,我是管理员,所以如果我需要执行管理任务,我可以这样做。
sudo
在命令行中,我通常会使用sudo
来运行命令root
:
sudo command...
这会提示我输入密码。 (不是root
的密码; root
没有密码。)
-
因为我是管理员,所以我可以执行
root
操作。在默认配置中,我必须输入我的密码才能执行此操作。 -
非管理员用户无法执行
root
操作,即使输入密码也是如此。如果运行它们的用户不是管理员,则sudo
命令将失败。
由于管理员完全是普通用户,除了能够以root
执行操作之外,运行需要root
权限的命令仍然会失败,除非命令以root
运行。
屏幕截图,说明需要使用sudo
执行管理任务。 (基于Randall Munroe的”Sandwich”。)
sudo,图形化
图形程序可以通过sudo
的图形前端作为root
运行,例如gksu
/gksudo
和kdesudo
。例如,要将GParted作为root
运行,我可以运行gksudo gparted
。然后我会以图形方式提示我的密码。
由于我以图形方式提示,因此不必是终端。这是管理工具作为root
运行的方式之一。
Polkit
Polkit(曾经称为PolicyKit)是管理员以root
方式执行操作的另一种方式。程序访问执行操作的服务。有时,行动正在运行整个计划;有时行动更有限。
目前,许多图形系统管理实用程序都设置为默认使用polkit,而不是使用sudo
。
这种实用程序的一个例子是软件中心。它充分利用了polkit,要求用户只有在想要执行需要root
权限的操作时才能输入密码。 (这也可以通过基于sudo
的身份验证实现,但实现起来更难,更难。)
在软件中心,我可以找到并阅读有关应用程序的内容;当我想安装它时,我被要求输入密码。
polkit如何与众不同
任何图形程序都可以作为root
与gksudo
和其他图形sudo
前端一起运行。 (该程序可能无法正常工作,具体取决于它是否设计用作root
。但启动程序的命令将作为root
执行。)
虽然polkit现在比sudo
GUI前端更常见,因为Ubuntu上的应用程序在幕后执行root
操作的方式,但polki只会运行图形应用程序为root
何时使用pkexec与gksu/gksudo?。
Polkit,Non-Graphically
pkexec
是用于使用polkit运行程序的命令。
与sudo
类似,pkexec
可以运行non-graphical命令。 (并且它不需要定义命令功能的配置文件 – 它只是将命令作为root
运行。)
pkexec command...
pkexec
以图形方式提示输入密码,即使它是从终端运行的(这是其行为与gksudo
更相似的方式之一,而不是直接运行sudo
)。
(如果没有GUI – 例如,如果您从virtual console或text-only SSH session登录,或者GUI无法正常运行 – 那么pkexec
将在degrade gracefully上并在命令行上提示您输入密码。)
成功执行身份验证后,该命令将在终端中运行。
除root
外,以其他用户身份运行命令
root
很特别,因为它可以做任何可以做的事情。但它像任何帐户的用户帐户,并用sudo
(直接地或用图形前端)或polkit运行命令作为root
的方式可以稍微进行修改,以运行命令的任何其他用户:
sudo -u username command...
gksudo -u username command...
pkexec --user username command...
什么?你先输入sudo
吗?那安全怎么样?!
使用sudo
运行命令有点像调用papal infalliblity。
当您使用sudo
[调用教皇无谬误]运行命令时,Ubuntu [天主教徒]会努力确保您真的是[真的是教皇]。
是的,我知道教皇的无谬误(即使是规范性的)是陈述性的;平行并不完美。
尝试使用root
和sudo
(或polkit)做一些事情是一件大事 – Ubuntu不仅仅是像你运行程序一样让它滑过。
系统会提示您输入密码。 (然后,您已经记住了很短的时间,因此您不必在管理系统时不断输入密码。)
除了提醒您要小心外,这还可以防范两种情况:
-
有人使用您的计算机(或移动设备),可能是以检查他们的电子邮件或类似的无害目的为幌子。在这里,它们仍然可能造成一些伤害 – 例如,他们可以修改或删除您的文档。但是,他们无法管理系统,因为他们无法输入您的密码。
-
除非您输入密码,否则不应该管理系统的程序不能这样做。例如,如果您的Web浏览器受到安全漏洞的攻击并运行恶意代码,则它仍然无法执行管理任务。它无法创建和删除用户,修改安装为
root
的程序(包括由程序包管理器安装的任何内容,如LibreOffice),或者更改系统的深层次。
我听说过su
。那是什么?我可以用吗?
su
作为另一个用户进行身份验证,并运行命令(或启动交互式shell)。可以限制允许谁使用su
,但su
使用目标帐户的密码进行身份验证,而不是运行用户的密码。
例如,su username -c 'command...'
将command...
作为用户名运行,就像sudo -u username command...
一样。
但是当您使用sudo
以username
运行命令时,请输入密码。使用su
以username
运行命令时,输入username
的密码。
由于su
为目标用户执行身份验证,因此只能使用su
作为启用帐户的用户运行命令。
默认情况下禁用root
帐户(如www-data
和nobody
)。没有密码可用于以root
身份登录。因此,您无法使用su
以root
运行命令。
您可以使用su
作为另一个可以登录的用户运行命令(通常包括系统中代表人类的所有用户帐户)。
以访客身份登录时,根本无法使用su
。
结合su
和sudo
非管理员的人甚至可以使用su
作为管理员运行sudo
。 (这是可以的,因为他们需要管理员的密码才能以管理员身份运行命令。)也就是说,受限用户可以使用su
运行sudo
来运行命令root
。这看起来像:
su username -c 'sudo command...'
(以这种方式运行图形程序requires special care。)
su
不能像root
一样更安全地运行命令吗?
可能不是。
如果不允许用户充当root
怎么办?
使他们成为有限的用户而不是管理员。
如果以管理员身份运行的程序尝试将sudo
转换为root
,该怎么办?
除非您已重新配置sudo
以使其在没有密码的情况下成功,否则它将失败。
不能在最近的sudo
命令上搭载不应作为root
运行的程序,因此不需要密码?
这不太可能成功。目前,大多数操作系统(包括Ubuntu)默认配置了sudo
,因此其时间戳仅适用于特定上下文。
例如,如果我在一个终端选项卡中运行sudo ...
并成功进行身份验证,则另一个选项卡中的sudo
(或由不相关的GUI程序运行,或者我从虚拟控制台或SSH会话运行)仍将提示输入密码。即使它之后立即运行。
以用户X身份运行的程序是否可以访问用户X的密码?
没有。
如果恶意程序能够以管理员身份运行,那么当管理员使用sudo
或polkit进行身份验证时,”listen in”是否可以输入?
可能,是的。但是它可以”listen in”输入密码输入su
。
如果我告诉别人我的密码 –
不要告诉别人你的密码。
如果有人必须知道我的密码代表我做某事,但我不想让他们管理系统怎么办?
理想情况下,他们应该有一个单独的用户帐户,让他们可以做他们需要做的事情。例如,可以在帐户之间共享文件,允许多个用户写入文件,同时仍然拒绝访问其他用户。
但是,如果允许less-trusted人员共享您的帐户,则应该是有限的用户帐户。您可以为此目的创建一个单独的帐户(这是有道理的 – 如果它是您和您希望拥有不同功能的其他人的帐户,则应该是另一个帐户)。
那么,最安全的事情是禁止使用sudo
和su
并让人们手动登录为root
吗?
不,因为让人们以root
登录时存在严重的缺点。应尽可能采用尽可能少的措施作为root
。即使大多数与管理系统直接相关的行为(例如,查看用户的配置和阅读日志)通常也不需要root
权限。
此外,正如潜在的恶意程序可能会在运行sudo
或su
时查看某人键入的内容,或创建虚假的sudo
/su
密码提示时,潜在的恶意程序也可能会创建虚假的登录屏幕。
是什么让用户成为管理员?
In Ubuntu 12.04 and later,管理员是名为sudo
的组的成员。
In Ubuntu 11.10 and earlier,管理员是名为admin
的组的成员。
当12.04之前的Ubuntu系统升级到12.04或更高版本时,保留admin
组以实现向后兼容(并继续为其中的用户授予管理权),但也使用sudo
组。
有限的用户帐户
我可以使用受限用户帐户而不是管理员帐户吗?
如果你愿意,当然。在“系统设置”中创建受限用户帐户>用户帐户,并以该用户身份登录。
我可以将管理员帐户设为受限用户帐户吗?
是的,只需将其从sudo
和admin
组中删除(参见上文)。
但您应该确保至少有一个其他管理员帐户,以便您可以管理您的系统。如果没有,那么you’d have to boot to recovery mode or a live CD and make some user an administrator again。 (此is similar到如何重置丢失的管理密码?。)
用于管理用户和组的图形工具通常会使您无法创建没有管理员的系统,或者至少警告您。命令行工具通常不会(相信您知道自己在做什么)。
次佳解决思路
没有一个愚蠢的问题;)
我希望这会澄清一些事情:
在Ubuntu中,可以创建两种不同类型的用户帐户:标准帐户和管理员帐户。两者之间的区别:标准帐户不允许通过root访问权对系统进行任何重要更改,而管理员帐户可以使用其密码以root用户身份进行更改。 Root用户本身是系统创建的许多用户之一,您通常不会看到或注意到,并且您无法以其身份登录(默认情况下,无论如何)。如果您已登录管理员类型帐户,则可以在终端中使用sudo
命令成为此Root用户,并且您可以输入密码以安装软件,进行系统更改等。如果您已登录作为标准用户,您无法执行任何操作。
第三种解决思路
在所有Linux系统中要对系统进行任何更改,我们需要以root用户身份进行身份验证,并应用我们需要成为root用户的所有更改。
普通用户无法在系统范围内应用更改。与Windows相比,这是Linux的优势。
如果进行了任何攻击,那将仅限于Linux /Unix系统中的那个区域,因为攻击或修改剩余区域它需要root权限,但在Windows中如果一个地方受到攻击意味着整个系统将受到影响。
这就是为什么只有在许多问题中,如果任何用户没有提示root密码,那么我们会警告他,因为在安全情况下不建议这样做并将选择留给他们。
如果你想变成root用户,sudo可以帮助你。
sudo -i
如果您想以root用户身份启动应用程序,那么您可以sudo。
sudo <app_name>
以non-root用户身份运行系统总是更好。
第四种思路
安装期间创建的帐户是管理员帐户。
在Ubuntu中,root帐户没有密码,因此您无法以root
用户身份登录。有办法绕过这个,但这是默认设置。
Ubuntu中的管理员帐户表示该用户已添加到组sudo
,这使该帐户有资格使用sudo
命令临时获得优先权。 PolicyKit可以通过提示’Administrator’密码来请求权限提升。 (您需要选择管理员用户,并提供该帐户的密码。)
要确认这些是真的:
-
打开终端并尝试更新软件包索引。
apt-get update
是用于执行此操作的命令,这需要以root身份运行。它仅在您以root身份登录或通过使用权限提升以root身份执行时才有效。管理员可以通过对sudo
机制进行身份验证来运行sudo apt-get update
,该机制允许命令以任何用户身份运行。不允许标准用户执行此操作。 -
从“系统设置”中打开“用户”帐户,然后尝试添加新用户。 PolicyKit使用的保护机制。管理员将被允许进行身份验证和升级权限,但标准用户将被阻止。它需要’administrator’密码才能继续。
以下是检查您的帐户是否为管理员的方式:
-
从系统设置中打开用户帐户。
-
在左栏中选择您的用户帐户。
-
对于普通用户,您应该在管理员帐户的两个窗格中的帐户名下看到
Administrator
,对于普通用户,应该看到Standard
。
第五种思路
没有。
您登录Ubuntu的用户不是admin用户(Linux术语中的admin用户称为root用户)
参考资料