当前位置: 首页 > article >正文

【运维实战】Linux 中设置 sudo ,8个有用的 sudoers 配置!

在Linux及其他类Unix操作系统中,只有 root 用户能够执行所有命令并进行关键系统操作,例如安装更新软件包、删除程序、创建用户与用户组、修改重要系统配置文件等。

但担任 root 角色的系统管理员可通过配置sudo命令,允许普通系统用户执行特定命令及完成上述重要系统操作。另一种不推荐的方式是直接共享 root 用户密码,使普通用户能通过su命令获取 root 账户权限。

sudo的功能是依据安全策略,允许授权用户以 root(或其他用户)身份执行命令,其工作机制如下

1)读取并解析/etc/sudoers文件,核查调用用户及其权限;

2)提示输入密码(通常为当前用户密码,也可设置为目标用户密码。若配置NOPASSWD标签则可跳过此步骤);

3)接着sudo创建子进程,在其中调用setuid()切换至目标用户;

4)最后在该子进程中执行指定的shell或命令。

下文将通过 8 个/etc/sudoers文件配置示例,展示如何利用默认条目修改sudo命令行为。

[admin@monitor ~]$ sudo cat /etc/sudoers
[sudo] admin 的密码:
1.设置安全 PATH

为了确保系统的安全性,sudo 提供了配置选项来管理 PATH 环境变量,以防止潜在的安全风险。

它的重要性如下:

1)防止恶意路径注入:如果用户能够通过 PATH 环境变量注入恶意路径,可能会导致执行非预期的命令或脚本,从而引发安全问题。

2)隔离用户和 root 的路径:通过设置安全的 PATH,可以确保 sudo 命令运行时使用的是系统定义的安全路径,而不是用户可能修改的路径。

要设置安全的 PATH,需要在 sudoers 文件中添加以下内容:

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

这样,secure_path 指定了 sudo 命令运行时使用的路径。

如果需要定义 exempt_group,可以添加类似以下的行:

Defaults:%exempt_group !secure_path

这样,属于 exempt_group 的用户在使用 sudo 时,将不受 secure_path 的限制,而是使用它们自己的 PATH 环境变量。

2.启用TTY用户登录会话的sudo权限

若需限制 sudo 仅能在真实终端(tty)会话中调用,而禁止通过cron计划任务或cgi-bin脚本等方式执行,可添加如下配置项:

Defaults  requiretty
3.通过伪终端(pty)执行sudo命令

某些情况下,攻击者可能利用 sudo 运行恶意程序(如病毒或恶意软件),这些程序会派生后台进程并持续驻留在用户的终端设备上,即使主程序已执行完毕。

为防止此类情况,可通过use_pty参数强制 sudo 始终在伪终端中执行命令(无论是否启用I/O日志功能),配置示例如下:

Defaults  use_pty
4.配置自定义sudo日志文件

默认情况下,sudo 通过syslog(3)记录日志。如需指定自定义日志文件,可使用logfile参数配置:

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

若需在日志中记录主机名和四位数的年份,可分别添加log_hostlog_year参数:

Defaults log_host, log_year, logfile="/var/log/sudo.log"  
5.记录sudo 命令的输入/输出

通过 log_input 和 log_output 参数,可以让 sudo 在伪终端(pseudo-tty)中运行命令,并分别记录所有用户输入和屏幕输出。

默认的 I/O 日志目录是 /var/log/sudo-io,如果启用了会话序列号,日志会存储在该目录下。也可以使用 iolog_dir 参数自定义日志目录。

Defaults   log_input, log_output

支持一些转义序列,例如 %{seq},它会扩展为单调递增的 36 进制序列号(例如 000001),每两位数字用于形成一个新的目录层级,例如在以下示例中的 00/00/01

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log
6.设置 sudo 用户提示信息

通过 lecture 参数可向使用 sudo 的用户显示系统密码使用规范提示。该参数支持以下三种配置方式:

  • always:每次执行 sudo 命令时都显示提示

  • once:仅在用户首次执行 sudo 时显示提示(默认值)

  • never:不显示提示

配置示例:

Defaults lecture="always"  

如需自定义提示内容,可通过 lecture_file 参数指定包含提示信息的文件路径:

Defaults lecture_file="/path/to/custom_message"  
[imoonrong@backup2 ~]$ sudo ll我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:#1) 尊重别人的隐私。#2) 输入前要先考虑(后果和风险)。#3) 权力越大,责任越大。[sudo] imoonrong 的密码:
7.自定义 sudo 密码错误提示信息

当用户输入错误的 sudo 密码时,系统默认会显示"sorry, try again"提示。可以通过 badpass_message 参数修改该提示内容,配置示例如下:

Defaults  badpass_message="Password is wrong, please try again"
或者
Defaults  badpass_message="密码错误,请重新输入"
8.增加 sudo 密码尝试次数限制

passwd_tries 参数用于指定用户尝试输入密码的次数。默认值为 3,现在将尝试次数修改为 5:

Defaults passwd_tries=5

若要设置密码超时时间(默认为 5 分钟),可以使用 passwd_timeout 参数,添加以下行(比如,设为2分钟):

Defaults passwd_timeout=2

上面介绍了 8 条配置 sudoers 的实践技巧,那么 su 和 sudo 之间有何区别,以及如何在 Linux 中配置 sudo,接下来会进一步介绍。

http://www.lryc.cn/news/2393474.html

相关文章:

  • Ad Hoc
  • 江科大SPI串行外设接口hal库实现
  • [网页五子棋][对战模块]前后端交互接口(建立连接、连接响应、落子请求/响应),客户端开发(实现棋盘/棋子绘制)
  • 【ArcGIS Pro微课1000例】0071:将无人机照片生成航线、轨迹点、坐标高程、方位角
  • Ubuntu Zabbix 钉钉报警
  • threejs顶点UV坐标、纹理贴图
  • STM32 RTC实时时钟\BKP备份寄存器\时间戳
  • springcloud---gateway
  • Axure设计案例——科技感立体柱状图
  • app获取相册权限是否意味着所有相片都可随时读取?
  • 2025年05月29日Github流行趋势
  • 第十一节:第一部分:正则表达式:应用案例、爬取信息、搜索替换
  • 跟我学c++中级篇——动态库的资源处理
  • 新能源集群划分+电压调节!基于分布式能源集群划分的电压调节策略!
  • 端午安康 | 以匠心,致长远
  • 漫画Android:事件分发的过程是怎样的?
  • 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)解题报告 | 珂学家
  • 什么是MCP技术,跟http技术有什么区别
  • 如何用ChatGPT提升学术长文质量
  • BKP(备份寄存器)和 RTC(实时时钟)
  • springboot配置cors拦截器与cors解释
  • 【EdgeYOLO】《EdgeYOLO: An Edge-Real-Time Object Detector》
  • Python打卡 DAY 38
  • 调试技巧总结
  • ubuntu安装blender并配置应用程序图标
  • 基于LBS的上门代厨APP开发全流程解析
  • Redisson学习专栏(三):高级特性与实战(Spring/Spring Boot 集成,响应式编程,分布式服务,性能优化)
  • 华为欧拉系统中部署FTP服务与Filestash应用:实现高效文件管理和共享
  • 基于Docker和YARN的大数据环境部署实践最新版
  • 【大模型】Bert