我不是网管 - 轻松掌握 Linux Sudo 命令

sudo (superuser do) 它允许授权用户作为另一个用户执行命令。另一个用户可以是普通用户或超级用户,大多数时候我们使用它来执行具有更高权限的命令。

sudo 命令与安全策略结合使用,默认安全策略是 sudoers,并且可以通过 /etc/sudoers 文件配置。它的安全政策是高度扩展的,可以制定和分发自己的策略作为插件。

和 su 命令有何不同?

在 GNU / Linux 中,可以使用 su 或者 sudo 命令运行提升特权的命令

su (switch user),使用 su 命令,我们可以切换到 root 用户执行命令,但是这种方法有一些缺点。

sudo 以独特的方式解决了这些问题

允许 sudo 访问

让我们将普通用户添加为 sudo 用户。在我的例子中,用户名是 linuxtechi

  1. 编辑 /etc/sudoers 文件
$ sudo visudo
  1. 添加以下行以允许 linuxtechi 用户访问 sudo
linuxtechi ALL=(ALL) ALL

在上面的命令中:

使用提升的权限执行命令

要以更高的权限执行命令,只需在命令前加上 sudo 字,如下所示

$ sudo cat /etc/passwd

执行该命令时,系统将询问 linuxtechi 的密码,而不是 root 用户的密码。

以另一个用户执行命令

除此之外,我们还可以使用 sudo 作为另一个用户来执行命令。例如,以下命令中,linuxtechi 用户以 devesh 用户执行命令

$ sudo -u devesh whoami
[sudo] password for linuxtechi:
devesh

内置命令行为

sudo 的局限性之一是 Shell 内置的命令不能与它一起工作。例如,命令中内置了历史记录,如果您尝试使用 sudo 执行此命令,则 not found 错误将报告如下

$ sudo history
[sudo] password for linuxtechi:
sudo: history: command not found

为了克服上述问题,可以访问 root shell 并从那里执行任何命令,包括 shell 内置的命令。

$ sudo bash

执行此命令后,您将观察到提示符号变为 # 字符。

以 sudo 用户执行先前的命令

假设您想要以更高的权限执行前面的命令,那么下面的技巧将是有用的

$ sudo !4

上面的命令将以更高的权限执行历史记录中的第 4 个命令。

如果您想使用 sudo 命令以 root 权限执行先前命令,则使用以下命令

$ sudo !!

sudo 命令与 vim

很多时候,我们编辑系统的配置文件,在保存时,我们意识到我们需要根权限来做这件事。因为这样我们可能会失去我们的变化。没有必要恐慌,我们可以在 Vim 中使用以下命令

:w !sudo tee %

在上面的命令中:

使用 sudo 执行多个命令

我们可以使用它执行多个命令,只需使用分号 (;) 分隔命令,如下所示

$ sudo -- bash -c 'pwd; hostname; whoami'

在上面的命令中:

在没有密码的情况下运行 sudo 命令

当第一次执行 sudo 命令时,它将提示输入密码,默认情况下,密码将缓存 15 分钟。但是,我们可以覆盖此行为并使用 NOPASSWD 关键字禁用密码身份验证,如下所示

linuxtechi ALL=(ALL) NOPASSWD: ALL

限制用户执行某些命令

为了提供受控访问,可以限制 sudo 用户只执行某些命令。例如,只允许执行 echo 和 ls 命令

linuxtechi ALL=(ALL) NOPASSWD: /bin/echo /bin/ls

使用 sudo 命令将行或文本字符串附加到文件中

在某些情况下,我们需要在具有 sudo 权限的本地用户的现有文件中追加几行

$ echo ‘text-string’ | sudo tee -a

示例如下所示

pkumar@linuxtechi:~$ echo "deb http://ftp.de.debian.org/debian buster main contrib" | sudo tee -a /etc/apt/sources.list
deb http://ftp.de.debian.org/debian buster main contrib
pkumar@linuxtechi:~$

也可以使用如下方法

sudo sh -c 'echo "deb http://ftp.de.debian.org/debian buster main contrib" >> /etc/apt/sources.list'

深入了解 sudo

让我们挖掘更多关于 sudo 命令的信息来深入了解它。

$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 145040 Jun 13  2017 /usr/bin/sudo

如果仔细观察文件权限,sudo 上的 setuid 位是启用的。当任何用户运行这个二进制文件时,它将使用拥有该文件的用户的特权运行。在本例中,它是 root 用户。

当不使用 sudo 命令执行 id 命令时,会显示 linuxtechi 用户的 id。

$ id
uid=1002(linuxtechi) gid=1002(linuxtechi) groups=1002(linuxtechi)

当使用 sudo 命令执行 id 命令时,会显示 root 用户的 id。

$ sudo id
uid=0(root) gid=0(root) groups=0(root)

我的开源项目

开源在线网课系统

展开阅读全文

页面更新:2024-05-09

标签:在线   命令   特权   网管   先前   仓库   权限   密码   轻松   文件   用户   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top