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

sudo 命令:掌握系统权限控制,实现安全高效管理

一、命令简介

sudo​ 命令允许系统管理员授权普通用户执行特定命令,并以管理员身份运行这些命令,通常需要输入用户自己的密码。

sudo 全称是"substitute user do",意为“替用户做”,也就是“以另一个用户的身份执行命令”。

  • 优点

这种机制既提高了系统的安全性,又简化了权限管理。

  • 工作原理

当用户执行 sudo 命令时,系统会检查/etc/sudoers 文件,该文件定义了哪些用户可以执行哪些命令。如果用户被授权,sudo 会要求他们输入自己的密码,然后执行指定的命令。

  • 配置文件

sudo 的配置文件位于/etc/sudoers。你可以看到类似如下内容

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults        use_pty
root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d

%sudo ALL=(ALL:ALL) ALL ​表示:赋予 sudo ​用户组执行任何命令的权限。

  • 编辑配置文件

编辑这个文件需要使用 visudo​ 命令,它会进行语法检查,防止配置错误。

sudo visudo

第四章会详细讲解如何配置 sudoers 文件。

二、命令参数

典型示例

sudo apt update

选项:

  • -u, --user=用户​: 指定以哪个用户的身份来执行命令。
  • -l, --list​: 列出当前用户可以执行的命令。
  • -s, --set-home​: 设置 HOME 环境变量为目标用户的家目录。
  • -i, --login​: 以目标用户的环境变量登录。
  • -v, --validate​: 验证用户的密码,更新时间戳文件。
  • -h, --help​: 显示帮助信息。

三、命令示例

  1. 以 root 权限执行 apt update命令:
sudo apt update
  1. 以特定用户 john的身份执行 ls命令:
sudo -u john ls
  1. 更新 sudo时间戳
sudo -v

不仅限于 sudo -v​,只要执行了任意 sudo​ 命令并验证正确密码后,时间戳将更新:允许你在一段时间内继续执行 sudo​ 操作而无需再次输入密码。这是一种提高用户体验的机制。

四、sudoers 文件

sudoers​ 文件的配置规则用于定义哪些用户或用户组可以使用 sudo​ 命令以及他们能执行哪些命令。该文件有严格的语法要求,因此使用 visudo​ 编辑它以防止语法错误是非常重要的。

​sudoers 文件的基本语法结构

  1. 基本格式

    [用户] [主机]=[运行身份] [命令]
    
    • [用户]​:定义具有权限的用户或用户组。可以是单个用户名或 %​ 开头的用户组名称。
    • [主机]​:表示从哪些主机可以使用 sudo 权限,通常设置为 ALL​,表示从所有主机都可以执行。
    • [运行身份]​:用户以哪个身份执行命令,通常是 ALL​,也可以是 root​ 或其他用户。
    • [命令]​:指定用户可以运行的命令,可以是 ALL​ 表示所有命令,也可以限制特定命令路径。
  2. 具体示例

    • 允许用户 username​ 在所有主机上以任何用户身份运行所有命令:

      username ALL=(ALL:ALL) ALL
      
    • 允许用户 username​ 以 root​ 身份在所有主机上运行 /bin/ls​ 命令:

      username ALL=(root) /bin/ls
      
    • 允许用户 admin​ 在所有主机上以 root​ 身份运行所有命令,但不需要输入密码:

      admin ALL=(ALL) NOPASSWD: ALL
      
    • 允许用户组 admins​ 成员在所有主机上以 root​ 身份运行所有命令:

      %admins ALL=(ALL:ALL) ALL
      
    • 限制用户 user1​ 只能在 server1​ 主机上以 root​ 身份运行 /usr/bin/vim​:

      user1 server1=(root) /usr/bin/vim
      
  3. 常用关键字

    • ALL:用于表示任意主机、任意用户或任意命令。

    • NOPASSWD:用于表示在执行命令时不需要输入密码。

    • Cmnd_Alias:命令别名,简化复杂的命令集。例如:

      Cmnd_Alias WEBADMIN = /usr/bin/systemctl restart apache2, /usr/bin/systemctl status apache2
      

      然后,可以允许用户 webadmin​ 执行这些命令:

      webadmin ALL=(ALL) WEBADMIN
      
  4. 别名定义
    sudoers​ 文件允许使用别名来管理权限,常见别名包括:

    • User_Alias:用户别名。
    • Runas_Alias:运行身份别名。
    • Host_Alias:主机别名。
    • Cmnd_Alias:命令别名。

    示例:

    User_Alias ADMINS = alice, bob
    Host_Alias WEBSERVERS = web1, web2
    Cmnd_Alias SERVICE = /bin/systemctl restart
    ADMINS WEBSERVERS=(ALL) SERVICE
    

重要配置示例

  • 允许普通用户使用 root 权限执行所有命令:

    username ALL=(ALL:ALL) ALL
    
  • 允许用户组执行命令:

    %groupname ALL=(ALL:ALL) ALL
    
  • 允许用户执行特定命令:

    username ALL=(ALL) /usr/bin/ls, /usr/bin/cat
    
  • 允许用户无需密码执行命令:

    username ALL=(ALL) NOPASSWD: ALL
    

注意事项

关于安全的建议:

  • 仅为信任的用户和用户组授予 sudo​ 权限,尤其是使用 NOPASSWD​ 时。
  • 始终使用 visudo​ 编辑 sudoers​ 文件以避免语法错误。
  • 避免滥用 sudo​ 权限,仅在需要时使用,以确保系统的安全性和稳定性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安卓中有main函数吗?
  • Qwen2-VL论文阅读笔记
  • 智慧安防监控EasyCVR视频汇聚管理平台如何修改视频流分辨率?
  • 从零开始之AI面试小程序
  • 网站建设中,JavaScript为什么现在可以做后台了?
  • 【JavaEE】数据链路层协议和DNS
  • Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动
  • 【后端】【语言】【python】python常见操作
  • 【计网】从零开始掌握序列化 --- 基础知识储备与程序重构
  • Elasticsearch黑窗口启动乱码问题解决方案
  • Eigen之SelfAdjointEigenSolver
  • 【TS】TypeScript内置条件类型-ReturnType
  • 实时监控,动态调整 —— 淘宝商品详情API助力商家实现灵活经营
  • 优化算法(五)—梯度下降算法(附MATLAB程序)
  • 汽车售后诊断ECU参数分析
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • es的写入过程
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • IP路由与转发
  • JAVA_NIO系列——Channel和Buffer详解
  • java中的hashCode
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • log4j2输出到kafka
  • Median of Two Sorted Arrays
  • Mysql5.6主从复制
  • Mysql优化
  • PhantomJS 安装
  • PHP面试之三:MySQL数据库
  • Python - 闭包Closure
  • python学习笔记 - ThreadLocal
  • SpringCloud集成分布式事务LCN (一)
  • yii2权限控制rbac之rule详细讲解
  • 闭包,sync使用细节
  • 配置 PM2 实现代码自动发布
  • 如何编写一个可升级的智能合约
  • 使用权重正则化较少模型过拟合
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 大数据全解:定义、价值及挑战
  • 如何用纯 CSS 创作一个货车 loader
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​flutter 代码混淆
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​业务双活的数据切换思路设计(下)
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # 透过事物看本质的能力怎么培养?
  • #include到底该写在哪
  • #Linux(make工具和makefile文件以及makefile语法)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)