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. sudo与su命令
sudo命令允许我们使用我们的帐户和密码以 root 权限执行系统命令,而su命令允许我们切换到不同的用户并在 shell 中执行一个或多个命令而无需退出当前会话。
如果我们想以 root 权限执行一些命令,我们应该使用sudo。要完全切换到另一个用户或切换到 root 以进行更长的会话,我们可能需要改用su。