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

Linux命令-sudo(以其他用户身份执行命令)

Linux命令-sudo(以其他用户身份执行命令)

    • 快速参考
    • 基本用法
    • 常用选项
    • Sudoers 配置
      • sudoers 语法
      • 实用配置示例
    • 安全审计
    • sudo vs su
    • 常见问题

sudo(SuperUser DO)是 Linux 系统中默认的权限提权工具,允许授权用户以 root 或其他用户的身份执行命令。它是系统安全策略的执行者,通过/etc/sudoers配置文件实现细粒度的权限控制。相比susudo更安全——用户使用自身密码认证,所有操作均有审计日志。

快速参考

sudo[选项]命令[参数...]

sudo默认以 root 身份执行命令。通过/etc/sudoers配置可以精确控制谁可以在哪些主机上以哪个用户的身份执行哪些命令。

基本用法

# 以 root 身份执行命令(默认)sudoapt-getupdate# 以指定用户身份执行sudo-upostgres psql# 以 root 身份启动登录 Shellsudo-i# 以 root 身份启动指定 Shellsudo-s/bin/bash# 列出当前用户的 sudo 权限sudo-l# 刷新 sudo 时间戳(延长免密时间)sudo-v# 使 sudo 时间戳过期(下次需要密码)sudo-k# 编辑文件(推荐使用 sudoedit)sudo-e/etc/apt/sources.list# 等同于 sudoedit /etc/apt/sources.list# 保留当前 HOME 环境变量sudo-Hcommand# 非交互模式(密码从 stdin 读取)echo"mypassword"|sudo-Sapt-getupdate# ⚠️ 安全风险:密码明文出现在脚本/历史记录中!

常用选项

选项说明
-u USER以指定用户身份执行
-g GROUP以指定组身份执行
-i登录 Shell(模拟完整登录)
-s指定 Shell 运行
-l列出当前用户权限
-v验证/刷新时间戳
-k使时间戳立即失效
-b后台运行命令
-e编辑文件(sudoedit)
-E保留环境变量
-H将 HOME 设为目标用户的家目录
-n非交互(不提示密码)
--标记选项结束,之后的参数原样传递

Sudoers 配置

关键警告永远不要直接编辑/etc/sudoers!始终使用visudo
visudo在保存前会进行语法检查,避免因语法错误导致所有 sudo 命令失效。

# 编辑主配置文件sudovisudo# 编辑用户特定配置(推荐)sudovisudo-f/etc/sudoers.d/webadmins

sudoers 语法

# 基本格式:用户 主机=(以谁的身份) 命令 # 用户 主机 = (运行身份) 命令列表 root ALL = (ALL) ALL admin ALL = (ALL) ALL # 组授权(% 前缀表示组) %sudo ALL = (ALL) ALL %wheel ALL = (ALL) ALL # 无需密码执行 deploy ALL = (ALL) NOPASSWD: /usr/bin/systemctl restart nginx # 限制可执行的命令 operator ALL = (root) /usr/bin/systemctl, /usr/bin/journalctl # 仅允许以特定用户执行 app ALL = (www-data) /usr/bin/php, /usr/local/bin/composer # 命令别名 Cmnd_Alias SERVICES = /usr/bin/systemctl restart *, /usr/bin/systemctl stop * Cmnd_Alias PKG_MGMT = /usr/bin/apt-get, /usr/bin/apt webadmin ALL = (root) SERVICES, PKG_MGMT # 禁止危险命令(! 取反) joe ALL = (ALL) ALL, !/usr/bin/su, !/usr/bin/passwd root # 要求 tty(避免后台脚本注入 sudo) Defaults requiretty # 日志记录 Defaults logfile="/var/log/sudo.log" # 设置 sudo 密码超时(分钟) Defaults timestamp_timeout=15 # 密码尝试次数 Defaults passwd_tries=3 # 防止配置被下级目录覆盖 Defaults !includedir

实用配置示例

# 开发团队配置cat>/etc/sudoers.d/developers<<'EOF' # 允许开发团队重启服务 %developers ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx %developers ALL=(root) NOPASSWD: /usr/bin/systemctl restart php*-fpm %developers ALL=(root) NOPASSWD: /usr/bin/systemctl restart redis # 允许查看日志 %developers ALL=(root) /usr/bin/journalctl, /usr/bin/tail # 不允许切换到 root %developers ALL=(ALL) ALL, !/usr/bin/su -, !/usr/bin/su root EOF# 数据库管理员配置cat>/etc/sudoers.d/dba<<'EOF' # DBA 以 postgres/mysql 用户操作数据库 %dba ALL=(postgres) NOPASSWD: /usr/bin/psql, /usr/bin/pg_dump, /usr/bin/pg_restore %dba ALL=(mysql) NOPASSWD: /usr/bin/mysql, /usr/bin/mysqldump EOF# CI/CD 部署用户配置cat>/etc/sudoers.d/cicd<<'EOF' # 部署用户只能执行部署相关操作 deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart app-server deploy ALL=(root) NOPASSWD: /usr/local/bin/deploy.sh deploy ALL=(root) NOPASSWD: /bin/chown -R www-data\:www-data /var/www/* Defaults:deploy !requiretty EOF

安全审计

# 查看 sudo 执行日志sudogrep"sudo"/var/log/auth.logsudogrep"sudo"/var/log/secure# RHEL/CentOS# 自定义 sudo 日志位置# 在 /etc/sudoers 中添加:Defaultslogfile="/var/log/sudo.log"# 查看最近的 sudo 操作tail-f/var/log/auth.log|grepsudo# 审计用户 sudo 行为cat/var/log/auth.log|grep"COMMAND"|awk'{print $NF}'|sort|uniq-c|sort-rn# 查看谁在使用 sudowho-u|awk'{print $1}'|whilereaduser;doecho"$user:$(sudo-l-U"$user"2>&1)"done

sudo vs su

特性sudosu
密码要求自身密码目标用户密码
审计日志详细(每条命令)仅记录切换
权限粒度精确到命令全部或没有
密码共享无需需要
时间控制支持超时
配置文件/etc/sudoers/etc/pam.d/su
推荐场景日常使用救援模式

常见问题

# 问题 1: "xxx is not in the sudoers file"# 将用户加入 sudo 组usermod-aGsudousername# Debian/Ubuntuusermod-aGwheel username# RHEL/CentOS# 问题 2: sudo 不要求密码(检查配置)sudo-l|grepNOPASSWD# 问题 3: sudo 命令未找到(环境变量被重置)# 在 sudoers 中添加安全路径Defaultssecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# 问题 4: visudo 语法错误后恢复# 如果因为错误配置导致 sudo 不可用:# 使用 pkexec 或救援模式恢复pkexec visudo# 问题 5: sudo 密码超时设置# 查看当前超时时间sudo-V|grep"Authentication timestamp timeout"

安全准则

  1. 原则:最小权限——只给用户完成工作所需的最小 sudo 权限
  2. 禁止NOPASSWD: ALL——这是等同于 root 的无密码访问
  3. 强制使用visudo编辑 sudoers
  4. 配置审计日志,定期审查 sudo 使用记录
  5. 为服务用户(如 deploy)配置精确的命令白名单
http://www.jsqmd.com/news/1380694/

相关文章:

  • 买了网站主机后如何建设网站:从零基础到上线的实战避坑指南
  • Gradle构建JDK版本不匹配:从原理到项目级配置解决方案
  • Unity动态数据可视化实战:基于XCharts实现实时折线图
  • 为什么运维团队需要会记忆的 AI 助理,而不只是机器人
  • 2026年聊城商务数据分析师怎么报名?中山优才教育报考指南 - 学历提升热点资讯
  • Windows 10 C盘扩容终极指南:无损调整分区,告别空间不足
  • 2026年天津标书代写机构精选推荐|先进制造港口经济电子标全流程服务 - 安华招标
  • Linux网络编程核心流程解析
  • 豆顶顶 GEO:助力太仓本地企业挖掘自然搜索线索
  • 电机控制入门:从核心原理到PID三环调试实战
  • 2026精选昆明冷藏库工程服务能力与选型参考 - 装修教育财税推荐2026
  • # 开题报告框架:把课题构想搭成研究生开题报告框架:选题背景与意义、研究现状、研究内容与问题、方法、进度安排、预期成果
  • 彻底解决IDEA占用C盘空间!IntelliJ IDEA2025.3 配置+缓存无损迁移D盘(百分百保留所有设置)
  • 【Docker】LXC容器
  • RoSA: Enhancing Parameter-Efficient Fine-Tuning via RoPE-aware Selective Adaptation in Large Lang...
  • 2026年5mm浮筑隔音垫选购全指南:从原理到选型避坑全解析 - 广华节能科技有限公司
  • 32岁Java转AIInfra从头学两年还值得去吗
  • Fuzzing 测试分层:解析函数、工具链与崩溃复现
  • 电动车托运怎么寄便宜?2026年跨城寄车指南来了 - 快递物流资讯
  • Linux命令-sum(计算文件校验和)
  • MyBatis-Plus雪花算法深度解析:原理、配置与实战避坑指南
  • CRC32硬件实现与Matlab建模:从LFSR原理到并行计算优化
  • 制药防爆车间磁力泵国产厂家选型指南,上海伯特深度测评 - 生活动态圈
  • 二叉树翻转:递归与迭代解法详解及应用场景
  • Pin 与 Tokio 任务诊断:模型适合辅助归类,不负责定论
  • 漏洞研究环境的输入边界:配置、样本与第三方响应
  • 陕西省武校都教什么功夫|安康市、商洛市、兴平市文武学校课程设置盘点推荐 - 圣龙武术朱老师
  • GEO 培训哪家口碑好:【沐晞甄选】润物无声 - 17328623207
  • 霍尼韦尔SSC系列压力传感器选型指南:I²C/SPI接口集成与工程实践
  • 数据结果描述:把统计结果/图表数据写成规范的结果段落,客观陈述,不过度解读,数字照原文。