sudo命令允许您在Linux上运行命令,就像您是其他人一样,比如root。sudo还允许您使用粒度控制谁可以访问root的功能。允许用户完全访问或允许他们使用一小部分命令。我们教你怎么做。
我们都听说过(过于简单化)Linux中的所有东西都是一个文件。实际上,操作系统中几乎所有的东西,从进程、文件、目录、套接字和管道,都通过文件描述符与内核进行通信。因此,尽管不是所有的东西都是一个文件,但大多数操作系统对象的处理方式都和以前一样。在可能的情况下,Linux和类Unix操作系统的设计遵循这一原则。
“一切都是文件”的概念在Linux中意义深远。很容易看出,Linux中的文件权限是如何成为用户特权和权限的支柱之一的。如果您拥有一个文件或目录(一种特殊类型的文件),您可以对其执行您喜欢的操作,包括编辑、重命名、移动和删除它。您还可以设置该文件的权限,以便其他用户或用户组可以读取、修改或执行该文件。每个人都受这些权限的控制。
除了超级用户之外,所有人都被称为root。根帐户是一个特殊特权帐户。它不受操作系统中任何对象的权限约束。根用户可以对任何东西做任何事情,而且几乎可以在任何时候做任何事情。
当然,任何有权访问root密码的人都可以这样做。它们可以恶意或意外地造成严重破坏。事实上,根用户也可能因为犯了错误而造成严重破坏。没有人是绝对正确的。这是危险的东西。
这就是为什么现在认为不以root用户身份登录是最佳实践的原因。使用常规用户帐户登录,并使用sudo在短时间内提升您的权限。通常这只是发出一个命令。
相关:在Linux中,“一切都是文件”是什么意思?
sudo已经安装在ubuntu18.04.3、manjaro18.1.0和fedora31计算机上,用于研究本文。这并不奇怪。sudo从20世纪80年代初就出现了,并且已经成为几乎所有发行版的超级用户操作的标准手段。
安装现代发行版时,在安装过程中创建的用户将添加到名为sudoers的用户列表中。这些用户可以使用sudo命令。因为你有sudo能力,你可以使用它们来添加其他用户到sudoers列表中。
当然,将完全的超级用户身份随意地分发给任何人,或者只给那些有部分或特定需要的人,都是鲁莽的。sudoers列表允许您指定允许不同用户使用sudo的命令。这样,你就不会给他们通往王国的钥匙,但他们仍然可以完成他们需要做的事情。
最初,它被称为“超级用户做”,因为你可以做的事情作为超级用户。它的范围现在已经扩大了,您可以使用sudo执行命令,就像您是任何用户一样。它已被重命名以反映新功能。它现在被称为“替代用户do”
要使用sudo作为另一个用户运行命令,我们需要使用-u(user)选项。在这里,我们将以用户mary的身份运行whoami命令。如果使用sudo命令而不使用-u选项,则将以root用户身份运行该命令。
当然,因为您使用的是sudo,系统会提示您输入密码。
sudo -u mary whoamiwhoami的响应告诉我们运行该命令的用户帐户是mary。
您可以使用sudo命令作为另一个用户登录,而不需要知道他们的密码。系统将提示您输入自己的密码。我们需要使用-i(登录)选项。
sudo -i -u mary pwd whoami ls -hl exit您以玛丽的身份登录。mary用户帐户的“.bashrc”、“.bash\u别名”和“.profile”文件的处理方式与mary用户帐户的所有者自己登录的方式完全相同。
要将用户添加到可以使用sudo的用户列表中,您需要编辑sudoers文件。非常重要的是,您只能使用visudo命令来执行此操作。visudo命令可防止多人同时尝试编辑sudoers文件。它还可以在保存文件内容时对其执行语法检查和解析。
如果您的编辑未通过测试,则不会盲目保存文件。你可以选择。您可以取消并放弃更改,返回并再次编辑更改,或强制保存不正确的编辑。最后一个选择是一个严重的坏主意。别想那么做。你会发现自己处于这样一种情况:每个人都被意外地锁在了sudo之外。
虽然使用visudo命令启动编辑过程,但visudo不是编辑器。它调用一个现有的编辑器来执行文件编辑。在Manjaro和Ubuntu上,visudo命令启动了简单编辑器nano。在Fedora上,visudo推出了功能更强但不够直观的vim。
相关:如何退出Vi或Vim编辑器
如果你喜欢在软呢帽上使用nano,你可以很容易地做到。首先,安装nano:
sudo dnf安装nano
然后visudo必须用以下命令调用:
sudo EDITOR=nano visudo这看起来是个很好的化名候选人。打开nano编辑器时会加载sudoers文件。
使用visudo打开sudoers文件。使用此命令或上述命令指定您选择的编辑器:
sudo visudo滚动sudoers文件,直到看到%sudo条目的定义。
百分号表示这是组定义而不是用户定义。在某些发行版中,%sudo行在行首有一个散列。这使这句话成为一个评论。如果是这种情况,请删除哈希并保存文件。
%sudo行如下所示:
稍微改写一下,这个组的成员可以作为任何用户或任何组在这台计算机或这个网络中的任何其他主机上运行任何命令。因此,给某人root权限和sudo使用能力的一个简单方法是将他们添加到sudo组中。
我们有两个用户,Tom和Mary,分别拥有Tom和Mary的用户帐户。我们将使用usermod命令将用户帐户tom添加到sudo组。G(groups)选项指定要将tom帐户添加到的组。-a(append)选项将此组添加到用户帐户tom已经在的组列表中。如果没有此选项,用户帐户tom将被放置在新组中,但会从任何其他组中删除。
sudo usermod -a -G sudo tom让我们检查一下Mary属于哪些组:
groups用户帐户mary仅在mary组中。
让我们和汤姆商量一下:
groupstom用户帐户,因此,tom属于tom和sudo组。
让我们试着让玛丽做一些需要sudo特权的事情。
sudo less /etc/shadow玛丽不能查看受限文件“/etc/shadow”中的内容。她因未经允许使用sudo而受到温和的批评。让我们看看汤姆的情况:
sudo less /etc/shadow汤姆一输入密码,就会看到/etc/shadow文件。
仅仅是把他加入sudo小组,他就被提升到了那些可以使用sudo的精英阶层。完全不受限制。
汤姆得到了完全的sudo权利。他可以做任何根或者sudo团队中其他人能做的事情。那可能会给他比你乐意交出的更多的权力。有时需要用户执行需要root权限的功能,但没有正当理由让他们拥有完全sudo访问权限。您可以通过将它们添加到sudoers文件并列出它们可以使用的命令来实现这种平衡。
我们来见见Harry,Harry用户帐户的所有者。他不在sudo组,他没有sudo特权。
groupsHarry能够安装软件是很有用的,但我们不希望他拥有完全的sudo权限。好的,没问题。让我们启动visudo:
sudo 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 install finger合适的sudo权限已经授予了Harry,他可以安装这个软件。
如果哈利尝试使用另一个需要sudo的命令会怎么样?
sudo shutdown now哈里被阻止执行命令。我们已经成功地授予他特定的,受限的访问权限。他可以使用指定的命令而不是别的。
如果我们想给Mary相同的特权,我们可以在sudoers文件中为用户帐户Mary添加一行,方法与我们对Harry所做的完全相同。另一种更简洁的方法是使用用户别名。
在sudoers文件中,用户别名包含用户帐户名的列表。然后可以在定义中使用用户别名的名称来表示所有这些用户帐户。如果要更改这些用户帐户的权限,则只能编辑一行。
让我们创建一个用户别名并在sudoers文件中使用它。
sudo visudoScroll down in the file until you come to the User_Alias specification line.通过键入以下内容添加用户别名:
User_Alias INSTALLERS = harry, mary每个元素之间用空格分隔,而不是制表符。逻辑分解为:
现在,我们将编辑之前为用户帐户添加的行:
harry ALL=/usr/bin/apt-get将其更改为:
INSTALLERS ALL=/usr/bin/apt-get这表示“INSTALLERS”用户别名定义中包含的所有用户帐户都可以运行apt get命令。我们可以用Mary来测试,她现在应该可以安装软件了。
sudo apt-get install colordiffMary能够安装软件,因为她是“INSTALLERS”用户\u Alias,并且该用户\u Alias已获得这些权限。
如果忘记将sudo添加到命令中,请键入
sudo !!最后一个命令将被重复,sudo添加到行的开头。
一旦您使用了sudo并使用了密码进行了身份验证,您就不必在15分钟内将密码用于其他sudo命令。如果要立即忘记身份验证,请使用:
sudo -k有没有想过在哪里可以看到失败的sudo命令尝试?它们进入“/var/log”/身份验证日志“文件。您可以通过以下方式查看:
less /var/log/auth.log我们可以看到用户帐户mary的条目,当她试图以用户“root”的身份运行shutdown命令时,她是在TTY pts/1上登录的
…将一部分授权给其他人的能力。现在您知道如何有选择地授权其他用户。
...就是为您准备的。我们将简要详细地讨论损坏的软件包,如何检查系统是否包含损坏的软件包,以及如何正确地重新安装它们。 ...
有备用硬盘,你想更有效地使用你的Linux电脑?RAID可以提供性能提升或添加冗余,具体取决于它的配置方式。让我们快速进入多磁盘世界。 ...
...到移动设备的验证码。这意味着,即使你的密码被泄露(如何使你的密码更强大),恶作剧的黑客将需要访问你的移动设备,以获得完全访问你的帐户。 ...
...。它之所以成为远程服务器管理的首选是有原因的。学习如何通过SSH远程管理Linux服务器,从连接到安装软件和文件传输。 ...
... 我们不希望您在不知道命令行如何工作的情况下就开始使用它。本质上,它是一种指示计算机执行任务的方法,但没有鼠标。 ...
... 下面介绍如何在Linux上使用测试版的Steam play玩Windows游戏。 ...
...上有大量敏感数据的情况下完全禁用USB存储设备。下面是如何在Windows、Mac和Linux上做到这一点。 ...
... 许多Linux服务器运行Ubuntu。那么,让我们看看如何在Ubuntu服务器上设置FTP服务器。 ...