如何设置和管理 Sudo 权限

什么是须藤?

归功于: XKCD

Sudo 是一个 Linux 程序,旨在允许用户在有限的时间范围内使用 root 权限并记录 root 活动。 基本思想是在允许用户完成任务的同时,给予用户尽可能少的权限。 “须藤”一词的意思是 代替 SER,和 . 它是一个用于基于系统配置文件管理用户权限的程序。 它允许用户以另一个用户的权限运行程序,默认情况下,超级用户。 该程序适用于大多数基于 UNIX 和 Linux 的操作系统。

句法

这 sudo 命令最常被这样调用。

[[email protected] ~]# sudo <command>

安全

许多专家表示,我们不应该以默认方式使用提升的 root 权限。 这是由于使用此提升的权限级别时可能发生的安全和错误相关问题。 由于 root 用户拥有创建、修改或删除设置、文件和文件夹的完全权限,因此 root 用户犯下的任何错误都将产生全球影响。

许多人认为, sudo 命令处理访问限制,但事实正好相反。 Sudo 允许我们以提升或超级用户权限(以 root 身份)运行命令和程序。 通过使用 sudo 配置、程序和命令本身是为特定用户配置的。 与窗户相比, sudo 类似于使用“运行方式”选项。 此外,我们需要注意的是,在某些条件下,可以使用该用户配置中指定的任何人的权限运行程序或命令。

在 Ubuntu 中, sudo command 总是默认设置的,因为在我们创建 root 密码之前没有 root 密码。 初始用户(在安装期间创建)可以通过 sudo 因为他们将充当 root 用户。 Ubuntu 的开发人员特意以这种方式创建了这个系统,以便新用户在使用服务器时可以开始使用正确的安全实践。

安装

这 sudo 程序默认安装在几乎所有 Linux 发行版中。 没有的发行版是 Arch Linux、Gentoo 和 BSD 发行版系列。

如果我们需要安装 sudo 在 Debian/Ubuntu 中,我们将使用以下命令。

apt-get install sudo

如果我们需要安装 sudo 在 CentOS 中,我们会使用这个命令。

yum install sudo

配置

须藤

这 sudo.conf 文件包含配置信息 sudo 前端。 它包含与安全策略和日志记录选项相关的插件变量。

这是一个示例 sudo.conf 文件。

# # Sample /etc/sudo.conf file # # Format: #   Plugin plugin_name plugin_path plugin_options ... #   Path askpass /path/to/askpass #   Path noexec /path/to/sudo_noexec.so #   Debug sudo /var/log/sudo_debug [email protected] #   Set disable_coredump true # # Sudo plugins: # # The plugin_path is relative to ${prefix}/libexec unless fully qualified. # The plugin_name corresponds to a global symbol in the plugin #   that contains the plugin interface structure. # The plugin_options are optional. # # The sudoers plugin is used by default if no Plugin lines are present. Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so  # # Sudo askpass: # # An askpass helper program may be specified to provide a graphical # password prompt for "sudo -A" support.  Sudo does not ship with its # own askpass program but can use the OpenSSH askpass. # # Use the OpenSSH askpass

插件

这 sudo 配置还支持使用插件,如果需要,可以在不改变原始功能的情况下增加其功能 sudo 功能。 用户可以创建第三方插件来满足特定需求。

日志记录

我们可以在 /etc/ 中添加一个变量sudo.conf 文件,它将所有用户交互记录到文件或其他输出中。 Sudo 日志记录分为 4 个部分。

  • 调试
  • 程序
  • 日志文件位置
  • 子系统和级别

我们可以配置日志记录以包含以下信息。

  • 记录什么 sudo 做了 – /var/log/auth.log
  • 调试任何问题 sudo – /var/log/sudo_debug
  • 捕捉一个完整的 sudo 会话-/var/log/sudo-一世

要配置此选项,我们将添加以下参数。

Defaults log_host, log_year, logfile="/var/log/sudo.log"

默认情况下, sudo 日志被写入系统日志文件。 此外,我们可以指定将日志输出发送到何处。

Defaults log_input, log_output

这个参数告诉 sudo 写入用户会话的文本。 有一个命令日志、标准输入/输出通道(stdin、stderr、stdout)的消息,以及一个带有 tty/pty 的日志。

调试

可以设置此选项以在发生某些事件时捕获问题。

其他设置

Sudo 可以启用其他设置,例如:

  • Disable_coredump
  • 开发者模式
  • Group_source

仅举几例。

苏多尔

后 sudo 安装后,我们将首先编辑位于此处的配置文件。

/etc/sudoers

最初,所有程序的默认设置都包含在一个 sudoers 文件中。 后来,程序开发人员添加了使用 include 语句的选项,这允许选择维护默认或基本 sudoer 文件,同时允许将更细粒度的配置额外集成到主 sudoers 文件中。 主要配置为 sudo 命令位于 /etc/sudoers 文件。 在这个文件中是单独的变量或配置,它们定义了某些用户或组如何访问命令。 额外的配置可以存储在 /etc/sudoers.d 目录。 sudoers.d 目录中的配置文件包含在 sudoers 文件中,使用

#includedir /etc/sudoers.d 

多变的。 我们可以在 /etc/sudoers.d 目录中为一个用户或一组用户创建一个配置,这将被视为 sudoer 文件的一部分。

文件结构

让我们打开 /etc/sudoers 文件以查看其中包含的内容。 我们将使用 nano 编辑器查看文件。 在 ubuntu 中,默认文件包含以下信息。

[[email protected] ~]# nano /etc/sudoers
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults        env_reset Defaults        mail_badpass Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"  # Host alias specification  # User alias specification  # Cmnd alias specification  # User privilege specification root    ALL=(ALL:ALL) ALL  # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL  # Allow members of group sudo to execute any command %sudo   ALL=(ALL:ALL) ALL  # See sudoers(5) for more information on "#include" directives:  #includedir /etc/sudoers.d

有广泛的 参数配置 可以添加哪些内容,但我们会尽量关注最相关的内容,以便我们对这个系统的工作方式有一个深入的了解。 应该注意的是,如果需要对文件进行编辑,则应使用“visudo”命令。 此外,sudoers 文件的格式必须在语法上正确才能使程序正常运行。

默认值

在 sudoers 文件中,有些部分以“默认值”开头。 这些是预选的变量,其中程序没有指定替代方案。 这些设置对所有用户都是通用的。

Defaults        env_reset Defaults        mail_badpass Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

默认值 env_reset:此设置会导致在新的最小环境中执行命令。

默认值 mail_badpass: 如果用户正在运行,则此设置将邮件发送给 mailto 用户 sudo 没有输入正确的密码。

默认安全路径:此设置指示用于运行的每个命令的“路径” sudo. 如果我们不明确信任运行的用户 sudo,我们可以使用这个变量来有一个替代的 PATH 环境变量来限制。

别名

配置中使用了四种类型的别名规范。

# Host alias specification # User privilege specification # Cmnd alias specification # User privilege specification root    ALL=(ALL:ALL) ALL
  • Host_Alias – 主机名、IP 地址、网络或网络组的列表
  • User_Alias – 此选项指定一组用户
  • Cmnd_Alias – 命令和目录的列表或组此别名将包括定义目录中的任何文件,但不包括任何子目录中的文件
  • Runas_Alias – 这个别名几乎和用户别名一样,但是我们可以通过 uid 来指定用户

我们应该关注的主要选项是以下参数。

# User privilege specification   root   ALL=(ALL:ALL) ALL

为了更好地定义此设置,我们将进一步解释。

  • 第一个 ALL 是允许使用的用户 sudo 命令。
  • 第二个 ALL 定义了在其上的主机(服务器) sudo 可以就业。
  • 第三个 ALL 是您运行命令的用户。
  • 最后一个 ALL 定义了允许的命令。

此选项表示任何用户都可以从任何终端执行命令,充当 ALL(或任何)用户,并且 run 可以运行任何或所有命令。

通过运行命令 sudo,用户将需要输入密码。 这创造了一个 sudo 在 X 分钟内不会再次请求密码的用户会话。 会话生存期由服务器管理员通过 sudo 配置。 如果用户需要注销或结束 sudo session,他们可以使用下面的命令。

[[email protected] ~]# sudo -k

15 个 Sudo 示例

这里有一些 sudo 你可以使用的例子。

重新启动系统。

[[email protected] ~]# sudo shutdown -r now

列出用户 bob 的 public_html 文件夹中的文件。

[[email protected] ~]# sudo -u bob ls /home/bob/public_html

重新验证或延长当前用户的时间范围 sudo 会议。

[[email protected] ~]# sudo -v

-k 标志(kill)基本上结束了 sudo 该用户的会话。

[[email protected] ~]# sudo -k

在vim中以用户身份打开和编辑文件后,使用这个 sudo vim中的命令以root用户身份保存文件而不会丢失我们的更改,

[[email protected] ~]# vim /etc/file.conf  :w !sudo tee %

以 root 身份运行历史文件中的第 251 个命令。

[[email protected] ~]# sudo !251

您是否忘记以 root 身份运行最后一个命令? 使用以下命令再次轻松地重新运行它。

[[email protected] ~]# sudo !!

读取受保护的文件。

[[email protected] ~]# sudo cat /etc/passwd

将 repo 附加到我们的 /etc/apt/sources.list

[[email protected] ~]# sudo sh -c 'echo "deb https://us.archive.ubuntu.com/ubuntu/ focal universe" >> /etc/apt/sources.list'

备份我们的 /etc/apt/sources.list。

[[email protected] ~]# sudo cp /etc/apt/sources.list /etc/apt/sources.list.bk

列出过去 60 分钟内修改过的文件

[[email protected] ~]# sudo find / -mmin 60 -type f

限制进程的 CPU 使用量

[[email protected] ~]# sudo cpulimit -p pid -l 50

在文件上设置不可变标志。

[[email protected] ~]# sudo chattr +i <file>

利用 sudo 运行多个命令。

[[email protected] ~]# sudo -s <<< 'apt update -y && apt upgrade -y'

切换到超级用户帐户。

[[email protected] ~]# sudo su

结论

在本教程中,我们学习了 sudo 是,它是如何配置的,并审查了它如何将特定权限分配给用户。

您想了解有关服务器上可用内容的更多信息吗? 给我们打电话 800.580.4985,或打开一个 聊天 或立即与我们联系,与我们知识渊博的技术支持专家或经验丰富的系统管理员交谈!