乐趣区

关于linux:10个关于-Linux-Sudo-命令的小贴士

sudo (superuser do) 它容许受权用户作为另一个用户执行命令。另一个用户能够是普通用户或超级用户,大多数时候咱们应用它来执行具备更高权限的命令。

sudo 命令与安全策略联合应用,默认安全策略是 sudoers,并且能够通过 /etc/sudoers 文件配置。它的平安政策是高度扩大的,能够制订和散发本人的策略作为插件。

和 su 命令有何不同?

在 GNU / Linux 中,能够应用 su 或者 sudo 命令运行晋升特权的命令

su (switch user),应用 su 命令,咱们能够切换到 root 用户执行命令,然而这种办法有一些毛病。

  • 咱们须要与另一个用户共享 root 明码
  • 因为根用户是超级用户,咱们无奈提供受控拜访
  • 咱们无奈审计用户正在做什么

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

  • 不须要泄露 root 用户的明码,普通用户应用本人的明码执行更高权限的命令。
  • 能够管制 sudo 用户的拜访权限,这意味着咱们能够限度用户只执行某些命令。
  • 记录了 sudo 用户的所有流动。

容许 sudo 拜访

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

1) 编辑 /etc/sudoers 文件

$ sudo visudo

2) 增加以下行以容许 linuxtechi 用户拜访 sudo

linuxtechi ALL=(ALL) ALL

在下面的命令中:

  • linuxtechi 示意用户名
  • 第一个 ALL 示意运行从任何机器 / 终端拜访 sudo
  • 第二个 (ALL) 示意 sudo 命令容许以任何用户执行
  • 第三个 ALL 示意 sudo 命令能够用 root 身份执行

应用晋升的权限执行命令

要以更高的权限执行命令,只需在命令前加上 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 %

在下面的命令中:

  • Colon (:) indicates we are in Vim’s ex mode
  • Exclamation (!) mark indicates that we are running shell command
  • sudo and tee are the shell commands
  • Percentage (%) sign indicates all lines from current line

应用 sudo 执行多个命令

咱们能够应用它执行多个命令,只需应用分号 (;) 分隔命令,如下所示

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

在下面的命令中:

  • Double hyphen (–) stops processing of command line switches
  • bash indicates shell name to be used for execution
  • Commands to be executed are followed by –c option

在没有明码的状况下运行 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 <path_of_file>

示例如下所示

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)

我的开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)
退出移动版