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

Linux中sudo命令的10个技巧

时间:2023-03-13 06:18:17 科技观察

sudo的意思是“超级用户执行”。它允许经过身份验证的用户像其他用户一样运行命令。其他用户可以是普通用户或超级用户。但是,大多数时候我们使用它来运行具有提升权限的命令。sudo命令与安全策略结合使用。默认的安全策略是sudoers,可以通过文件/etc/sudoers进行配置。其安全策略具有高度可扩展性。人们可以开发和分发自己的安全策略作为插件。与su的区别在GNU/Linux中,有两种方法可以使用提升的权限运行命令:使用su命令使用sudo命令su表示“切换用户”。使用su,我们可以切换到root用户并执行命令。但是这种方式有一些缺点:我们需要与其他人共享root的密码。因为root用户是超级用户,所以我们不能授予受控访问权限。我们无法审核用户在做什么。sudo以一种独特的方式解决了这些问题。首先,我们不需要妥协来共享root用户的密码。普通用户可以使用自己的密码以提升的权限执行命令。我们可以控制sudo用户的访问权限,也就是说我们可以限制用户只能执行某些命令。除此之外,sudo用户的所有活动都会被记录下来,因此我们可以随时审核所做的事情。在基于Debian的GNU/Linux上,所有活动都记录在/var/log/auth.log文件中。本教程的后面部分将解决这些问题。动手sudo现在,我们对sudo有了一个大概的了解。让我们实际动手。出于演示目的,我使用的是Ubuntu。但是,其他发行版的操作应该相同。允许sudo权限让我们将普通用户添加为sudo用户。在我的例子中,用户名是linuxtechi。编辑/etc/sudoers文件如下:$sudovisudo添加下面一行让用户linuxtechi有sudo权限:linuxtechiALL=(ALL)ALL上面命令中:linuxtechi表示用户名**ALL表示允许用户来自任意终端,机器访问sudo第二个(ALL)表示允许以任何用户身份执行sudo命令第三个ALL表示所有命令都可以以root身份执行以提升的权限执行命令要以提升的权限执行命令,只需在前面带有转到sudo的命令,如下所示:$sudocat/etc/passwd当您执行此命令时,它会询问linuxtechi的密码,而不是root用户的密码。以另一个用户身份执行命令除此之外,我们可以使用sudo以另一个用户身份执行命令。例如,在下面的命令中,用户linuxtechi以用户devesh的身份执行该命令:$sudo-udeveshwhoami[sudo]passwordforlinuxtechi:devesh内置命令行sudo的一个限制是它不能使用shell的内置命令。例如,历史记录是一个内置命令。如果你尝试用sudo执行这个命令,它会提示以下命令未找到的错误:命令,包括shell的内置命令。要访问rootshell,请执行以下命令:$sudobash执行此命令后-您会发现提示符变为井号(#)。提示在本节中,我们将讨论一些有助于提高工作效率的有用提示。大多数命令可用于完成日常任务。以sudo用户身份执行上一条命令假设您想以提升的权限执行上一条命令,那么以下技巧将很有用:$sudo!4上述命令将以提升的权限执行历史记录中的第4个条目。在Vim中使用sudo命令很多时候,我们编辑系统的配置文件,只是在保存时才意识到我们需要root访问权限才能执行此操作。因为这可能会使我们丢失对文件的更改。不用惊慌,我们可以在Vim中使用如下命令来解决这种情况::w!sudotee%上面命令中:冒号(:)表示我们处于Vim的退出模式,感叹号(!)表示我们正在运行shell命令sudo和tee都是shell命令百分号(%)表示从当前行开始的所有行使用sudo执行多个命令到目前为止我们只使用sudo执行了一个命令,但是我们可以使用它执行多个命令。只需用分号(;)分隔命令,如下所示:$sudo--bash-c'pwd;hostname;whoami'在上面的命令中,双连字符(--)停止命令行并将bash切换到表示用于执行命令shellname-coption后跟命令runsudocommandwithoutpassword第一次执行sudo命令时,会提示输入密码,默认密码缓存15分钟。但是,我们可以避免这种情况并使用NOPASSWD关键字禁用密码验证,如下所示:linuxtechiALL=(ALL)NOPASSWD:ALL限制用户执行某些命令。例如,以下行仅允许执行echo和ls命令。linuxtechiALL=(ALL)NOPASSWD:/bin/echo/bin/ls深入了解sudo让我们进一步了解sudo命令。$ls-l/usr/bin/sudo-rwsr-xr-x1rootroot145040Jun132017/usr/bin/sudo如果仔细查看文件权限,您会发现sudo上启用了setuid位。当任何用户运行此二进制文件时,它将以拥有该文件的用户的权限运行。在显示的场景中,它是root用户。为了演示这一点,我们可以使用id命令,如下所示:$iduid=1002(linuxtechi)gid=1002(linuxtechi)groups=1002(linuxtechi)当我们不使用sudo执行id命令时,将显示用户linuxtechi的id.$sudoiduid=0(root)gid=0(root)groups=0(root)但是如果我们使用sudo执行id命令,会显示root用户的id。从这篇文章可以看出结论——sudo为普通用户提供了更受控制的访问。使用这些技术,多个用户可以安全地与GNU/Linux交互。