在 Linux 中设置 sudo 的十条 sudoers 实用配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

在 Linux 和其他的类 Unix 操作系统中,只有 root 用户可以运行所有的命令,才能在系统中执行那些需要鉴权的操作,比如安装、升级和移除软件包、创建用户和用户组、修改系统重要的配置文件等等。

然而,系统管理员,比如说 root 用户,可以通过 sudo 命令 和一些配置选项来给普通用户进行授权,从而让该普通用户可以运行某些命令已经上述的那些相当重要的系统级操作。

另外,系统管理员还可以分享 root 用户密码 (这个做法是不值得提倡的),这样普通用户就可以通过 su命令来转化为 root 用户角色。.

sudo 允许已授权用户按照指定的安全策略、以 root 用户 (或者是其他的用户角色) 权限来执行某个命令。

  1. sudo 会读取和解析 /etc/sudoers 文件,查找调用命令的用户及其权限。
  2. 然后提示调用该命令的用户输入密码 (通常是用户密码,但也可能是目标用户的密码,或者也可以通过 NOPASSWD 标志来跳过密码验证)。
  3. 这之后, sudo 会创建一个子进程,调用 setuid() 来切换到目标用户。
  4. 接着,它会在上述子进程中执行参数给定的 shell 或命令。

以下列出十个 /etc/sudoers 文件配置,使用 Defaults 项修改 sudo 命令的行为。


 
 
  1. $ sudo cat /etc/sudoers

/etc/sudoers 文件:


 
 
  1. #
  2. # This file MUST be edited with the 'visudo' command as root.
  3. #
  4. # Please consider adding local content in /etc/sudoers.d/ instead of
  5. # directly modifying this file.
  6. #
  7. # See the man page for details on how to write a sudoers file.
  8. #
  9. Defaults env_reset
  10. Defaults mail_badpass
  11. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  12. Defaults logfile="/var/log/sudo.log"
  13. Defaults lecture="always"
  14. Defaults badpass_message="Password is wrong, please try again"
  15. Defaults passwd_tries=5
  16. Defaults insults
  17. Defaults log_input,log_output

Defaults 项的类型


 
 
  1. Defaults parameter, parameter_list ### 对任意主机登录的所有用户起作用
  2. Defaults@Host_List parameter, parameter_list ### 对指定主机登录的所有用户起作用
  3. Defaults:User_List parameter, parameter_list ### 对指定用户起作用
  4. Defaults!Cmnd_List parameter, parameter_list ### 对指定命令起作用
  5. Defaults>Runas_List parameter, parameter_list ### 对以指定目标用户运行命令起作用

在本文讨论范围内,我们下面的将以第一个 Defaults 作为基准来参考。parameter 参数可以是标记 (flags)、整数值或者是列表 (list)。

值得注意的是,标记 (flag) 是指布尔类型值,可以使用 ! 操作符来进行取反,列表 (list) 有两个赋值运算符:+= (添加到列表) 和 -= (从列表中移除)。


 
 
  1. Defaults parameter
  2. Defaults parameter=值
  3. Defaults parameter -=值
  4. Defaults parameter +=值
  5. Defaults !parameter

1、 安置一个安全的 PATH 环境变量

该 PATH 环境变量应用于每个通过 sudo 执行的命令,需要注意两点:

  1. 当系统管理员不信任 sudo 用户,便可以设置一个安全的 PATH 环境变量。
  2. 该设置将 root 的 PATH 和用户的 PATH 分开,只有在 exempt_group 组的用户不受该设置的影响。

可以添加以下内容来设置:


 
 
  1. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2、 允许 tty 用户会话使用 sudo

该设置允许在一个真实的 tty 中进行调用 sudo,但不允许通过 cron 或者 cgi-bin 脚本等方法来调用。添加以下内容来设置:


 
 
  1. Defaults requiretty

3、 使用 pty 运行 sudo 命令

少数情况下,攻击者可以通过 sudo 来运行一个恶意程序 (比如病毒或者恶意代码),这种恶意程序可能会分叉出一个后台运行的进程,即使主程序完成执行,它仍能够运行在用户的终端设备上。

为了防止出现这样的情况,你可以通过 use_pty 参数来设置 sudo 使用伪终端来运行其他命令,而不必管 I/O 日志的开启状态。如下:


 
 
  1. Defaults use_pty

4、 创建 sudo 日志文件

默认下,sudo 通过 syslog(3) 来记录到日志。但是我们可以通过 logfile 参数来指定一个自定义的日志文件。如下:


 
 
  1. Defaults logfile="/var/log/sudo.log"

使用 log_host 和 log_year 参数可以对应记录日志主机名和 4 位数年份到自定义日志文件。如下:


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

下面是自定义 sudo 日志文件的例示:

创建 sudo 日志文件

创建 sudo 日志文件

5、 记录 sudo 命令的输入/输出

log_input 和 log_output 参数可以让 sudo 命令运行在伪终端,并可以对应地记录所有的用户输入和输出到屏幕上。

默认的 I/O 日志目录为 /var/log/sudo-io,如果存在会话序列号,它将被存储到该目录。你可以通过iolog_dir 参数来指定一个目录。


 
 
  1. Defaults log_input, log_output

这其中支持转义字符,像 %{seq} —— 以 36 为基数的单调递增序列,比如 000001,这里每两个数字都分别用来形成一个新目录。请看下边例示 00/00/01:


 
 
  1. $ cd /var/log/sudo-io/
  2. $ ls
  3. $ cd 00/00/01
  4. $ ls
  5. $ cat log

记录 sudo 命令的输入/输出

记录 sudo 命令的输入/输出

cat 命令 来查看该目录的其余部分。

6、 为 sudo 用户提示命令用法

如下,使用 lecture 参数可以在系统中为 sudo 用户提示命令的用法:

参数属性值有三个选择:

  1. always – 一直提示
  2. once – 用户首次运行 sudo 时提示 (未指定参数属性值时的默认值)
  3. never – 从不提示

 
 
  1. Defaults lecture="always"

此外,你还可以使用 lecture_file 参数类自定义提示内容,在指定的文件中输入适当的提示内容即可:


 
 
  1. Defaults lecture_file="/path/to/file"

为 sudo 用户提示命令用法

为 sudo 用户提示命令用法

7、 输入错误的 sudo 密码是显示自定义信息

当某个用户输错密码时,会有一个对应的信息显示在屏幕上。默认是“抱歉,请重新尝试。(sorry, try again)”,你可以通过 badpass_message 参数来修改该信息:


 
 
  1. Defaults badpass_message="Password is wrong, please try again"

8、 增加 sudo 密码尝试限制次数

passwd_tries 参数用于指定用户尝试输入密码的次数。

默认为 3。


 
 
  1. Defaults passwd_tries=5

增加 sudo 密码尝试限制次数

增加 sudo 密码尝试限制次数

使用 passwd_timeout 参数设置密码超时 (默认为 5 分钟),如下:


 
 
  1. Defaults passwd_timeout=2

9、 在输错密码时让 sudo 羞辱用户

使用了 insults 参数之后,一旦你输出了密码,sudo 便会在命令窗口中显示羞辱你的信息。这个参数会自动关闭 badpass_message 参数。


 
 
  1. Defaults insults

在输错密码时让 sudo 羞辱用户

原文发布时间为:2017-01-25

本文来自云栖社区合作伙伴“Linux中国”

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
22天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
154 7
|
2月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
2月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
87 9
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
85 5
|
2月前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
219 2
|
2月前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
2月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
186 3
|
3月前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
102 2
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
206 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
848 6