如何在 Linux 上控制 sudo 访问
已发表: 2022-01-29
sudo命令可让您在 Linux 上运行命令,就像您是其他人一样,例如root 。 sudo还允许您控制谁可以访问root's功能,具有粒度。 授予用户完全访问权限或让他们使用一小部分命令。 我们向您展示如何。
sudo 和 Root 权限
我们都听说过(过于简单化)Linux 中的一切都是文件。 事实上,操作系统中的几乎所有东西,包括进程、文件、目录、套接字和管道,都通过文件描述符与内核通信。 因此,尽管一切都不是文件,但大多数操作系统对象的处理方式就像它们是一样。 在可能的情况下,Linux 和类 Unix 操作系统的设计都遵循这一原则。
“一切都是文件”的概念在 Linux 中影响深远。 很容易看出,Linux 中的文件权限如何成为用户特权和权限的支柱之一。 如果你拥有一个文件或目录(一种特殊的文件),你可以对它做你喜欢的事情,包括编辑、重命名、移动和删除它。 您还可以设置文件的权限,以便其他用户或用户组可以读取、修改或执行该文件。 每个人都受这些权限的约束。
除了超级用户之外,每个人都被称为root 。 root帐户是一个特殊的特权帐户。 它不受操作系统中任何对象的权限的约束。 root 用户可以对任何事情做任何事情,而且几乎可以在任何时间做任何事情。
当然,任何有权访问root's人都可以这样做。 他们可能恶意或无意地造成严重破坏。 事实上, root用户也可能因犯错而造成严重破坏。 没有人是万无一失的。 这是危险的东西。
这就是为什么现在认为根本不以root身份登录是最佳做法的原因。 使用普通用户帐户登录并使用sudo在您需要的短时间内提升您的权限。 通常这只是发出一个命令。
相关: Linux 中的“一切都是文件”是什么意思?
sudoers 列表
sudo已经安装在用于研究本文的 Ubuntu 18.04.3、Manjaro 18.1.0 和 Fedora 31 计算机上。 这并不奇怪。 sudo自 1980 年代初就已经存在,并且已成为几乎所有发行版的超级用户操作的标准方式。
当您安装现代发行版时,您在安装期间创建的用户将添加到名为sudoers的用户列表中。 这些是可以使用sudo命令的用户。 因为您拥有sudo权限,所以您可以使用它们将其他用户添加到 sudoer 列表中。
当然,不顾一切地分发完整的超级用户身份,或者分发给只有部分或特定需求的任何人,都是鲁莽的。 sudoers 列表允许您指定允许各种用户使用sudo的命令。 这样,你不会给他们王国的钥匙,但他们仍然可以完成他们需要做的事情。
以其他用户身份运行命令
最初,它被称为“超级用户做”,因为您可以以超级用户的身份做事。 它的范围现在已经扩大,您可以使用sudo来执行命令,就像您是任何用户一样。 它已被重命名以反映该新功能。 它现在被称为“替代用户做”。
要使用sudo以其他用户身份运行命令,我们需要使用-u (用户)选项。 在这里,我们将以用户mary运行 whoami 命令。 如果您使用不带-u选项的sudo命令,您将以root身份运行该命令。
当然,因为您使用的是sudo ,系统会提示您输入密码。
sudo -u mary whoami

whoami的响应告诉我们运行该命令的用户帐户是mary 。
您可以使用sudo命令以其他用户身份登录,而无需知道他们的密码。 系统将提示您输入自己的密码。 我们需要使用-i (登录)选项。
sudo -i -u 玛丽
密码
我是谁
ls -hl
出口

您以mary身份登录。 mary 用户帐户的“.bashrc”、“.bash_aliases”和“.profile”文件的处理与 mary 用户帐户的所有者自己登录一样。
- 命令提示符更改以反映这是用户帐户
mary的会话。 -
pwd命令报告您现在位于mary's主目录中。 -
whoami告诉我们您正在使用用户帐户mary。 - 目录中的文件属于
mary用户帐户。 -
exit命令将您返回到正常的用户帐户会话。
编辑 sudoers 文件
要将用户添加到可以使用sudo的人员列表中,您需要编辑sudoers文件。 仅使用visudo命令执行此操作非常重要。 visudo命令可防止多人同时尝试编辑 sudoers 文件。 它还会在您保存文件内容时执行语法检查和解析。
如果您的编辑未通过测试,则不会盲目保存文件。 你得到选择。 您可以取消并放弃更改,返回并再次编辑更改,或强制保存不正确的编辑。 最后一个选项是一个非常糟糕的主意。 不要试图这样做。 您可能会发现自己处于每个人都被意外锁定而无法使用sudo的情况。
尽管您使用visudo命令开始编辑过程,但visudo不是编辑器。 它调用您现有的编辑器之一来执行文件编辑。 在 Manjaro 和 Ubuntu 上, visudo命令启动了简单的编辑器nano 。 在 Fedora 上, visudo推出了功能更强大但不太直观的vim 。
相关:如何退出 Vi 或 Vim 编辑器
如果你更喜欢在 Fedora 上使用nano ,你可以很容易地做到这一点。 首先,安装nano :
须藤 dnf 安装纳米

然后必须使用以下命令调用visudo :
sudo EDITOR=nano visudo

这看起来是一个很好的别名候选者。 nano编辑器打开,其中加载了 sudoers 文件。

将用户添加到 sudo 组
使用visudo打开 sudoers 文件。 使用此命令或上述命令来指定您选择的编辑器:
须藤 visudo

滚动浏览 sudoers 文件,直到看到%sudo条目的定义。

百分号表示这是组定义而不是用户定义。 在某些发行版中, %sudo行的开头有一个井# 。 这使该行成为注释。 如果是这种情况,请删除哈希并保存文件。
%sudo行分解如下:
- %sudo :组的名称。
- ALL= :此规则适用于该网络上的所有主机。
- (ALL:ALL) :该组的成员可以以所有用户和所有组的身份运行命令。
- All :该组的成员可以运行所有命令。
稍微改一下,该组的成员可以在此计算机或此网络中的任何其他主机上以任何用户或任何组的身份运行任何命令。 因此,授予某人 root 权限和使用sudo的能力的一种简单方法是将他们添加到sudo组。
我们有两个用户,Tom 和 Mary,分别拥有用户帐户tom和mary 。 我们将使用usermod命令将用户帐户tom添加到sudo组。 -G (groups) 选项指定我们要将tom帐户添加到的组。 -a (追加)选项将此组添加到用户帐户tom已在的组列表中。如果没有此选项,用户帐户tom将被放置在新组中,但从任何其他组中删除。

sudo usermod -a -G sudo tom

让我们检查一下 Mary 在哪些组中:
团体

用户帐户mary仅在mary组中。
让我们检查一下汤姆:
团体

tom用户帐户(因此也称为 Tom)在组tom和sudo中。
让我们试着让 Mary 做一些需要sudo权限的事情。
sudo 少 /etc/shadow

Mary 无法查看受限文件“/etc/shadow”的内部。 她因未经许可尝试使用sudo而受到轻责。 让我们看看汤姆的票价:
sudo 少 /etc/shadow

一旦汤姆输入他的密码,他就会看到 /etc/shadow 文件。

只需将他添加到sudo组,他就被提升为可以使用sudo的精英行列。 完全不受限制。
授予用户受限的 sudo 权限
Tom 已获得完全的sudo权限。 他可以做任何root或sudo组中的任何其他人可以做的事情。 这可能会给他更多的权力,而不是你乐意交出的。 有时需要用户执行需要root权限的功能,但没有正当理由让他们拥有完全的sudo访问权限。 您可以通过将它们添加到 sudoers 文件并列出它们可以使用的命令来实现这种平衡。
让我们认识一下用户帐户harry的所有者 Harry。 他不在sudo组中,也没有sudo权限。
团体

Harry 能够安装软件很有用,但我们不希望他拥有完整的sudo权限。 好的,没问题。 让我们启动visudo :
须藤 visudo

向下滚动文件,直到超过组定义。 我们将为哈利添加一条线。 因为这是用户定义而不是组定义,所以我们不需要以百分号开头。

用户帐户 harry 的条目是:
哈利 ALL=/usr/bin/apt-get
请注意,“harry”和“ALL=”之间有一个制表符。
这读作用户帐户harry可以在连接到该网络的所有主机上使用列出的命令。 列出了一个命令,即“/usr/bin/apt-get”。 我们可以通过将它们添加到命令列表中来授予 Harry 访问多个命令的权限,并以逗号分隔。
将该行添加到 sudoers 文件中,然后保存该文件。 如果您想仔细检查该行的语法是否正确,我们可以使用-c (仅检查)选项让visudo扫描文件并为我们检查语法:
sudo visudo -c

进行检查, visudo报告一切正常。 Harry 现在应该能够使用apt-get来安装软件,但如果他尝试使用任何其他需要sudo的命令,则应该被拒绝。
sudo apt-get 安装手指

已授予 Harry 适当的sudo权限,他可以安装该软件。
如果 Harry 尝试使用需要sudo的不同命令会发生什么?
sudo 现在关闭

哈利被阻止运行命令。 我们已成功授予他特定的、受限的访问权限。 他可以使用指定的命令,而不能使用其他命令。
使用 sudoers 用户别名
如果我们想给 Mary 相同的权限,我们可以在 sudoers 文件中为用户帐户mary添加一行,就像我们对 Harry 所做的那样。 另一种更简洁的实现相同目的的方法是使用User_Alias 。
在 sudoers 文件中, User_Alias包含用户帐户名称的列表。 然后可以在定义中使用User_Alias的名称来表示所有这些用户帐户。 如果您想更改这些用户帐户的权限,您只需编辑一行。
让我们创建一个User_Alias并在我们的 sudoers 文件中使用它。
须藤 visudo

在文件中向下滚动,直到到达 User_Alias 规范行。
通过键入以下内容添加User_Alias :
User_Alias INSTALLERS = 哈利,玛丽
每个元素由空格分隔,而不是制表符。 逻辑分解为:
- User_Alias :这告诉
visudo这将是一个User_Alias。 - INSTALLERS :这是此别名的任意名称。
- = harry, mary :要包含在此别名中的用户列表。
现在我们将编辑我们之前为用户帐户harry添加的行:
哈利 ALL=/usr/bin/apt-get
将其更改为:
安装程序全部=/usr/bin/apt-get
这表示“INSTALLERS” User_Alias定义中包含的所有用户帐户都可以运行apt-get命令。 我们可以用 Mary 来测试一下,她现在应该可以安装软件了。
sudo apt-get install colordiff
![]()
Mary 能够安装该软件,因为她在“INSTALLERS” User_Alias中,并且User_Alias已被授予这些权利。
三个快速 sudo 技巧
当您忘记将sudo添加到命令时,请键入
须藤!!
最后一个命令将在行首添加sudo重复。
使用sudo并使用密码进行身份验证后,在 15 分钟内您不必再将密码与其他sudo命令一起使用。 如果您想立即忘记您的身份验证,请使用:
须藤 -k
有没有想过在哪里可以看到失败的sudo命令尝试? 他们转到“/var/log/auth.log”文件。 您可以通过以下方式查看它:
少 /var/log/auth.log

我们可以看到用户帐户 mary 的条目,当她尝试以用户“root”运行shutdown命令时,她在 TTY pts/1 登录。
凭借强大的力量……
…具有将其部分委托给其他人的能力。 现在您知道如何有选择地授权其他用户。

