当前位置: 首页 > 科技观察

你能做什么,不能做什么:在Linux中使用超级用户权限

时间:2023-03-18 12:17:58 科技观察

sudo命令允许特权用户以root身份运行所有或部分命令,但了解它可以做什么和不能做什么会很有帮助。当您想临时以超级权限运行命令时,sudo命令很方便,但当它没有按您预期的那样运行时,您也会遇到一些麻烦。例如,如果你想在一些日志文件的末尾添加一些重要信息,你可以试试这个:$echo"Importantnote">>/var/log/somelog-bash:/var/log/somelog:Permissiondenied好的,看来您需要一些额外的权限。通常,您不能使用您的用户帐户写入系统日志。让我们用sudo再试一次。$sudo!!sudoecho"Importantnote">>/var/log/somelog-bash:/var/log/somelog:Permissiondenied嗯,它仍然什么都不做。让我们尝试一些不同的东西。$sudo'echo"Importantnote">>/var/log/somelog'sudo:echo"Importantnote">>/var/log/somelog:commandnotfound另请参阅:Linux下故障排除的宝贵提示和技巧。接下来做什么?执行第一个命令后的上述响应表明我们缺少写入日志文件的必要权限。第二次,我们以root权限运行第一个命令,但它返回了“无权限”错误。第三次,我们将整个命令放在引号中并再次运行,返回“找不到命令”错误。那么,出了什么问题?第一条命令:没有root权限,您不能写入此日志。第二条命令:您的超级权限不会扩展到重定向。第三个命令:sudo不理解你放在引号中的整个“命令”。如果你的用户还没有被添加到sudo用户组,如果你尝试使用sudo,你可能会看到如下错误:nemo不在sudoers文件中。此事件将被报告。你能做什么?一个相当简单的选择是使用sudo命令临时成为root。鉴于您已经拥有sudo权限,您可以使用以下命令执行此操作:$sudosu[sudo]passwordfornemo:#请注意已更改的提示以表明您的新身份。然后你可以以root身份运行前面的命令:#echo"Importantnote">>/var/log/somelog然后你可以键入^d返回到你以前的身份。当然,某些sudo配置可能会阻止您使用sudo命令成为root。将用户切换为root的另一种方法是只使用su命令,但这需要您知道root密码。许多人在不知道root密码的情况下获得了sudo的访问权限,因此这并不总是可行的。(直接使用su)切换到root后,你可以以root运行任何你想执行的命令。这种做法的问题是:1)每个想使用root权限的人都需要提前知道root密码(这不是很安全);2)如果您在运行需要root权限的特定命令后无法退出特权状态,您的系统可能会受到一些重大错误的影响。sudo命令旨在让您仅在真正需要时才使用root权限,并控制每个sudo用户应该拥有哪些root权限。它还允许您在使用root权限后轻松恢复到正常用户状态。另请注意,整个讨论都假定您可以正常访问sudo并且您的访问不受限制。详细内容稍后介绍。另一种选择是使用不同的命令。如果编辑文件以附加到它是一个选项,您可以使用sudovi/var/log/somelog,尽管编辑活动日志文件通常不是一个好主意,因为系统可能经常记录到此写入操作到文件。***一个,但有点复杂的选项是使用以下命令之一来解决我们之前看到的问题,但它们涉及很多复杂的语法。第一个命令允许您在获得“无权限”拒绝后使用!重复你的命令:$sudoecho"Importantnote">>/var/log/somelog-bash:/var/log/somelog:Permissiondenied$!!:gs/>/|sudotee-a/<=====$tail-1/var/log/somelog重要说明第二个是将要添加的信息传递给sudo命令tee。请注意-a指定您要将文本附加到目标文件:$echo"Importantnote"|sudotee-a/var/log/somelog$tail-1/var/log/somelog重要说明sudo的可控性如何?对该问题的最快回答是,这取决于管理它的人。大多数Linux默认值都非常简单。如果用户被分配到一个特殊的组,例如wheel或admin组,那么该用户就可以在不知道root密码的情况下运行任何命令。这是大多数Linux系统的默认设置。一旦将用户添加到/etc/group中的特权组,该用户就可以使用root特权运行任何命令。另一方面,可以配置sudo,以便某些用户只能以root身份运行单个命令或一组命令中的任何一个。如果将如下所示的行添加到/etc/sudoers文件,则“nemo”等用户可以以root身份运行whoami命令。实际上,这可能不会有任何效果,而且它作为一个例子是完美的。#用户别名说明nemoALL=(root)NOPASSWD:WHOAMI#Cmnd别名说明Cmnd_AliasWHOAMI=/usr/bin/whoami注意我们添加了一个命令别名(Cmnd_Alias),它指定了可以运行的命令的完整路径,和一个用户别名,允许该用户使用sudo执行单独的命令而无需密码。当nemo运行sudowhoami命令时,他会看到:$sudowhoamiroot请注意这一点,因为nemo使用sudo执行此命令,whoami将显示运行该命令的用户是root。至于其他命令,nemo会看到类似这样的内容:$sudodate[sudo]passwordfornemo:抱歉,不允许用户nemo在butterfly上以root身份执行'/bin/date'。sudo的默认设置在默认路径下,我们会在/etc/sudoers文件中使用如下几行:$sudoegrep"admin|sudo"/etc/sudoers#admin组的成员可以获得root权限%adminALL=(ALL)ALL<=====#允许sudo组的成员执行任何命令%sudoALL=(ALL:ALL)ALL<=====在这几行中,%admin和%sudo都stateanyaddition这些组中的任何人都可以使用sudo命令以root身份运行任何命令。下面列出的是/etc/group中的一行,这意味着该组中列出的每个成员都具有sudo权限,而无需在/etc/sudoers中进行任何修改。sudo:x:27:shs,nemo总结sudo命令意味着您可以根据需要轻松部署超级用户访问权限,并仅在需要时为用户提供非常有限的特权访问权限。您可能会在使用简单的sudo命令时遇到一些问题,但sudo响应应该会显示您遇到的问题。