Contents

linux中sudo命令简介

1. 概述

在本教程中,我们将讨论Linux 中的sudo 命令及其可用的各种选项。 此外,我们还将了解sudo与**su有何不同以及何时应该使用它。

2. 简介

向所有用户提供 root 访问权限并不是一个好的做法。尽管如此,普通用户偶尔可能需要以超级用户身份执行一些命令。这就是sudo ( S Super  U ser  DO ) 访问权发挥作用的地方。sudo 命令提供了一种有效的方式来授予用户在系统(root)级别执行命令的特殊权限。使用sudo,我们将能够在不切换用户的情况下执行管理任务。

3. 安装

在大多数 Linux 发行版中,sudo包是默认安装的。

要使用sudo,我们只需键入sudo并按 enter 键。

$ sudo

如果安装了sudo ,将显示sudo包的使用详细信息。如果不是,将显示“未找到命令”消息。

现在,让我们看看如何在各种 Linux 发行版中安装sudo(如果尚未安装的话)。

如果我们使用apt包管理器,我们将输入:

$ apt install sudo

或者,如果我们使用yum

$ yum install sudo

4. 授予sudo访问权限

**我们需要授予用户sudo访问权限,*使他成为“sudoer” 。用户和组sudo权限在/etc/sudoers文件中定义。我们可以直接将用户添加到此文件或将用户添加到sudo*组。

为了演示sudo权限,我们假设用户“ blogdemo ”已经存在。

4.1. 将用户添加到sudoers文件

要将用户添加到*/etc/sudoers文件,我们将使用visudo*编辑器:

$ visudo

让我们通过插入以下内容将用户添加到文件中:

blogdemo ALL=(ALL) NOPASSWD:ALL

使用此配置,使用sudo时将不需要密码,并且用户将被授予所有sudo权限。

我们还可以将无密码设置限制为特定权限,例如创建或删除目录。为此,我们可以添加语句:

blogdemo ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/rmdir

4.2. 将用户添加到sudo

sudo组是一组可以访问root帐户的用户。这类似于 Windows 管理员组。让我们将我们的“ blogdemo ”用户添加到sudo组:

$ usermod -aG sudo blogdemo

我们需要成为root用户或具有sudo权限的用户才能运行上一个命令。

5. 验证用户的sudo权限

有时,我们想检查用户是否被授予sudo权限。有两种场景:验证当前登录用户和查看其他用户。

接下来,我们将介绍如何在每个场景中进行 sudo权限验证。

5.1. 查看当前登录用户

sudo提供了一个选项*-v*来更新当前用户的 sudo 缓存凭证。如果用户没有 sudo权限,该命令将失败并打印一条有意义的错误消息。

让我们看几个例子:

kent$ sudo -v
[sudo] password for kent: 
kent$ echo $?
0

首先,我们以用户kent身份登录,并执行命令 sudo -v

在我们提供密码后,  sudo不会打印任何东西,并且命令已经成功执行,因为我们得到了返回值 0。

因此,我们知道用户 kent已被授予 sudo权限,并且我们已经更新了他的缓存凭据。

现在,让我们以guest用户身份登录 并再次测试:

guest$ sudo -v
Sorry, user guest may not run sudo on MyHost.

如果用户没有sudo权限,如上面的输出所示,该命令将打印错误消息。

5.2. 检查任意用户

如果我们想检查另一个用户的sudo权限,我们可以使用sudo的*-l-U*选项。

但是**当前登录用户,也就是检查者,必须已经有sudo权限。**让我们看一些例子:

kent$ sudo -l -U guest
[sudo] password for kent: 
User guest is not allowed to run sudo on MyHost.

我们的 kent用户已经拥有 sudo权限。当我们验证用户 guest时,  sudo报告目标用户没有被授予sudo权限。

否则,如果目标用户有sudo权限,输出中会打印该用户权限的详细信息。

让我们检查一下用户eric

kent$ sudo -l -U eric
Matching Defaults entries for eric on MyHost:
    env_keep+=http_proxy, env_keep+=https_proxy, env_keep+=ftp_proxy
Runas and Command-specific defaults for eric:
    Defaults!/etc/ctdb/statd-callout !requiretty
User eric may run the following commands on MyHost:
    (ALL) ALL

6. 使用sudo

我们可以简单地使用sudo权限执行命令:

$ sudo COMMAND

我们还可以包含选项来自定义 sudo命令的行为:

$ sudo OPTION.. COMMAND

6.1. 例子

现在让我们看几个使用sudo命令的例子。

我们可以更改用户“ sammy ”的密码:

$ sudo passwd sammy

或者我们可以使用sudo立即重启系统:

$ sudo shutdown -r now

我们可以使用带有 sudo 的*-k选项来**终止当前的sudo*身份验证**:

$ sudo -k

现在,下次我们发出sudo命令时,系统会提示我们输入密码

如果我们想知道sudo命令版本的版本,我们可以使用*-V选项。这将打印sudo*版本号并退出。

$ sudo -V

现在,如果我们想在没有任何用户交互的情况下在后台运行sudo命令,我们可以使用*-b*选项。

$ sudo -b

当我们使用 -b选项运行命令时,我们不能使用 shell 作业控制来操纵该进程。

我们可以使用 -h选项来获取有关sudo命令及其可用选项的帮助:

$ sudo -h

这将打印sudo命令的所有可用选项,以及每个选项的简短描述。

6.2. sudo返回值

当使用sudo成功执行命令或程序时,sudo将以0 值退出,我们将从该命令获得预期结果。

另一方面,如果发生错误或权限问题,sudo将以1 的退出值结束。

7. sudosu命令

sudo命令允许我们使用我们的帐户和密码以 root 权限执行系统命令,而su命令允许我们切换到不同的用户并在 shell 中执行一个或多个命令而无需退出当前会话。

如果我们想以 root 权限执行一些命令,我们应该使用sudo。要完全切换到另一个用户或切换到 root 以进行更长的会话,我们可能需要改用su