如何在 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 登录。
凭借强大的力量……
…具有将其部分委托给其他人的能力。 现在您知道如何有选择地授权其他用户。