关于Linux sudo授权的那点事

news2024/12/28 4:24:06

sudo可以让我们以其他用户的身份执行命令,而只需要自己的密码(甚至不需要密码)。这比su切换用户需要目标用户的密码要方便。

从授权角度来审视,sudo比su的授权粒度要细很多,su属于大放权,例如:su - root,就直接拥有了root的所有权限。而sudo只有被授权的command才能被切换身份执行;更加安全,也便于进行权限管理。

 授权语法

授权用户|%组    主机名=[(允许转换至的用户或组)]   [NOPASSWD:]命令动作

  • 主机名:这里可以设置IP地址,其含义个人一直没有弄特别清楚,有说这是“登录者的来源主机名”,用以过滤哪些client可以登录后sudo,但是这里设置成client IP并不正确,而设置成服务器的IP或者主机名,其效果和ALL并没有区别。例如:我服务器是多网卡多IP,我设置了192.168.xx.220=(ALL),不管我用该服务器的哪个IP登录均可执行sudo命令。
  • (允许转换至的用户或组):这一部分可以不写,缺省为ALL,即:ALL=,同ALL=(ALL)。ALL=(ALL)与ALL=(root)授权并不相同,之所以会给我们效果一致的假象,是因为我们在使用sudo时没有指定用户身份,缺省是使用root身份执行命令。如果授权ALL=(root),而我们执行sudo -u user1 执行命令,那么肯定是会执行失败的,因为我们无权使用user1的身份执行命令。

注:这里我要啰嗦两句,很多资料并没有介绍转换至组的情况(man sudoers有介绍),大多都是用户可以提权到xx用户,拥有xx用户的权限,并执行被授权的命令。转换组权限也是可以的,具体操作如:user001 ALL=(:root) command_list。这么配置之后,执行sudo cat /etc/shadow是不被允许的,因为root组的权限不够的。

  • [NOPASSWD:]命令动作:命令动作是可以指定命令的参数和子命令的;NOPASSWD:不配置,执行sudo需要密码。
  • 命令的指定必须以绝对路径;
jen             ALL, !SERVERS = ALL
  • 多个命令以逗号分割;
pete            HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root*
  • 命令太多可以换行,以\结尾:
john    ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\
                   /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root
  • 可以使用!禁止某些命令执行:
bill    ALL = ALL, !SU, !SHELLS
  • 设置某些命令不可执行,可以如是:
aaron   shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

配置方式

  • 使用visudo命令添加授权
  • 在/etc/sudoers.d/创建子文件,添加授权

配置案例

案例一

使用visudo命令添加授权;允许user1用户转换root身份,免密执行/usr/bin/test,/usr/bin/ls,/usr/bin/systemctl list-unit-files命令

user1 ALL=NOPASSWD:/usr/bin/test,/usr/bin/ls,/usr/bin/systemctl list-unit-files

案例二

在/etc/sudoers.d/创建子文件,添加授权;允许user1切换到oot身份,仅可免密执行passwd -S username,查看用户的状态,其他超权命令皆不允许执行,包括:passwd username,修改用户密码。

注:仅授权passwd -S权限,不能只写/usr/bin/passwd -S,否则不生效。

touch /etc/sudoers.d/00-user1 
vi /etc/sudoers.d/00-user1 
user1 ALL=NOPASSWD:/usr/bin/passwd -S [A-Za-z]*

高级配置

别名类型包括如下四种:
Host_Alias  定义主机名别名;
User_Alias  用户别名,别名成员能够是用户,用户组(前面要加%号)
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许转换至的用户;
Cmnd_Alias  定义命令别名;

注:这里我还要啰嗦两句,因为Runas_Alias并不像User_Alias清晰的说明是User的别名;所以Runas_Alias中配置的不一定是用户,看我们怎么引用;例如:

Runas_Alias     ADMINGRP = adm, oper

  • 如果%opers          ALL = (: ADMINGRP) /usr/sbin/这么引用,adm, oper指的是用户组;
  • 如果%opers          ALL = (ADMINGRP) /usr/sbin/这么引用,adm, oper指的是用户;

配置举例

1、user1、user2以及group1下的所有用户,均拥有转换用户身份,以执行SYDCMD、DSKCMD命令列表中命令的权限;

2、user3仅拥有转换为root身份,以执行DSKCMD命令列表中命令的权限。

User_Alias SYSADER=user1,user2,%group1
User_Alias DISKADER=user3
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
   
   SYSADER  ALL= SYDCMD,DSKCMD
   DISKADER ALL= (OP) DSKCMD

查看用户的sudo权限

未拥有sudo权限

~]$ sudo -l

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] user001 的密码:
对不起,用户 user001 不能在 fusionos-11-113 上运行 sudo。

拥有sudo权限

user001用户拥有转换到root和user003执行/usr/bin/passwd -S [A-Za-z]*, /usr/bin/cat命令的权限,转换到其他用户将被拒绝

~]$ sudo -l
……

用户 user001 可以在 fusionos-11-113 上运行以下命令:

    (root, user003) NOPASSWD: /usr/bin/passwd -S [A-Za-z]*, /usr/bin/cat

user001用户拥有转换到root组执行/usr/bin/passwd -S [A-Za-z]*, /usr/bin/cat的权限。用户转用户并执行command,我们好理解,用户转组其实是用户获取目的组的权限,并执行命令

~]$ sudo -l
……

用户 user001 可以在 oracle11g-209 上运行以下命令:
    (user001 : root) NOPASSWD: /usr/bin/passwd -S [A-Za-z]*, /usr/bin/cat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32——PWR电源控制的低功耗模式

1、理论知识 本节主要学习配置低功耗模式:防止在空闲时候耗电(关闭/唤醒哪些硬件很重要) 虽然STM32外部需要使用3.3V供电,但内部核心电路CPU、外设和存储器使用1.8V供电即可,这3者需要与外界交流时才需要3.3V供电 从上…

第一课,认识C++,和计算机对话

一,编程是什么?C是什么? 编程是编写代码来实现需要的功能,C就是用来编程的语言,计算机没法直接听懂人类的语言,需要用编程语言C来和计算机交流。 二,编程能做哪些事情? ①让机器人…

openwrt系统通过ZeroTier插件实现远程管理

OpenWrt是一款开源的路由器系统,可以自由安装各种插件,但由于是非商业化的系统,没有统一的云管理平台,所以远程管理相对麻烦,需要借助于第三方服务器。当然如果家里宽带有独立公网ip,还可以通过ddns实现远程…

只用一个 HTML 元素可以写出多少形状?——不规则图形篇(序)

上一篇章,我们的不规则图形篇发了之后,我一个朋友说我“良心发现”了,不提供新的知识点了,而是实实在在的一些案例直接丢给大家。 的确,前面的每一个篇章,我都有引入新的知识点。 规划这个系列&#xff0…

某系统接入网关任意文件读取漏洞

当你征服一座山峰时,它已经在你脚下了,你必须再找一座山峰去征服,否则,你只有下山,走下坡路了 漏洞描述 某系统接入网关存在任意文件读取漏洞,攻击者通过构造请求可以读取服务器任意文件 漏洞复现 访问…

“智能安全新防线:深信达软加密狗的全面防护功能解析“

在智能安全设备领域,深信达的CBS赛博锁以其独特的软加密狗技术,为设备提供了全面的安全保障。CBS赛博锁通过以下几个核心功能来保障智能设备的安全性: 1. **许可管理**:CBS赛博锁通过硬件唯一身份ID和许可授权管理,确保…

云匹面粉直供小程序的设计

管理员账户功能包括:系统首页,个人中心,用户信息管理,种植基地管理,云匹小麦采收管理,云匹面粉加工,面粉分类管理,云匹面粉管理,系统管理 微信端账号功能包括&#xff1…

Redis数据的持久化是如何做的?(面试版)

在Redis中提供了两种数据持久化的方式:RDB、AOF RDB快照 RDB全称Redis Database Backup file(Redis快照),也被叫做Redis数据快照。简单来说就是创建快照来获取内存中某个时间点上的副本。当Redis实例故障重启后,从磁盘读取快照文件&#xf…

[java][代码]使用java在mongodb上传下载文件

建立java项目新建lib包&#xff0c;导入jar包 3.链接mongdo数据库代码 /** * 1.获取连接 * 2.上传文件 * 3.下载文件 * 4.删除文件 * */ public static GridFS GetMongoGridFS(){ List<ServerAddress> adds new ArrayList<>(); ServerAddress serverAddress new…

根据数据库设计开发一套通用的电子商务平台

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(9 分) 【问题 3】(7 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于数据库设计的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某制造企业为拓展网上销售业…

如何从零开始在 Vue 3 项目中引入 Element Plus

如果想在 Vite 生成的 Vue 3 下项目中&#xff0c;从头开始使用 Element Plus UI 库&#xff0c;并成功展示到页面&#xff0c;可以按照如下步骤操作&#xff1a; 1. 创建 Vue 3 项目&#xff08;如果还没有&#xff09; 使用 vite 创建 npm create vitelatest my-vue-app -…

vue3 内置的特殊属性ref

Vue 3 中的数据绑定是通过模板语法实现的。开发者可以在模板中使用特殊的语法来绑定数据&#xff0c;例如使用双花括号 {{}} 来显示数据&#xff0c;或者使用 v-bind 指令来绑定属性。 当数据发生变化时&#xff0c;Vue 会自动更新绑定的数据在模板中的显示&#xff0c;实现页面…

CSS盒子模型【怪异盒模型、定位看这一篇就够了!!!】

目录 盒子模型 width和height属性 width属性 height属性 width和height的特性 边框属性 边框的三要素小属性 四个方向的边框的三要素小属性 边框应用场景-制作三角形 单独设置四个圆角 盒子水平居中 盒子模型占位计算 盒模型可视宽高 盒模型实际占位 box-sizing怪…

启动Application 报错:no mapping for GET /(已解决)

根据以上内容&#xff0c;帮助我顺利解决了此问题 自己的错误&#xff1a;因为我使用的是框架嘛&#xff0c;然后生成了一个SpringBoot项目后&#xff0c;resources下面就会有一个static的类&#xff0c;用于存放静态资源类&#xff0c;后面我把静态资源放在里面&#xff0c;但…

大脑可视化:多种方式实现fMRI的ROI的绘图

前言 在探索神经科学的深邃领域中&#xff0c;我们常常面临着如何将复杂的脑区数据以一种清晰、直观的方式呈现给同行和公众的挑战。随着功能性磁共振成像&#xff08;fMRI&#xff09;技术的发展&#xff0c;我们拥有了更多工具来揭示大脑的奥秘。本文旨在介绍一系列笔者学习的…

一键安装!系统之家Win7纯净版镜像文件:无捆绑软件!

今日系统之家小编给大家带来做到真正纯净的Win7纯净版系统&#xff0c;该版本系统将捆绑软件都删除了&#xff0c;系统特别干净&#xff0c;安装后整体操作体验感很好。系统运作速度也快&#xff0c;兼容性出色&#xff0c;也没有蓝屏问题的出现&#xff0c;时刻都能放心使用。…

数据结构学习:单链表

单链表简介 将线性表中的个元素分布在存储器的不同存储块&#xff0c;每个部分称为节点&#xff0c;通过地址或指针建立元素之间的联系。 节点的示意图如下&#xff0c; 节点的data域存放数据元素 ,而next域是一个指针&#xff0c;指针指向的直接后继所在的节点。 一个链表的…

sql-labs31-34关通关攻略

第三十一关 一.判断闭合 1“” 二.查询数据库 http://127.0.0.1/Less-31/?id-1%22)%20union%20select%201,2,database()--http://127.0.0.1/Less-31/?id-1%22)%20union%20select%201,2,database()-- 三.查表 http://127.0.0.1/Less-31/?id-1%22)%20union%20select%201,…

机器学习之 贝叶斯算法 及朴素贝叶斯分类器的代码实现(给我点赞的都发财,谢谢)

贝叶斯算法简介 贝叶斯算法是一种基于概率论的统计学方法&#xff0c;广泛应用于机器学习领域。它基于贝叶斯定理&#xff0c;用于计算后验概率。贝叶斯定理可以表述为&#xff1a; 其中&#xff1a; P(A∣B) 表示在事件 B 发生的情况下事件 A 发生的概率&#xff0c;称为后…

发现一个通用的滑块验证码缺口识别库 captcha-recognizer (两行代码识别滑块验证码缺口)

文章目录 前言安装与使用安装使用示例 识别效果展示总结 前言 滑块验证码缺口位置是滑块验证码验证的关键&#xff0c;在此本文介绍一个滑块验证码的通用识别库&#xff0c;基于深度学习实现通用的滑块验证码的识别。并封装为易用的Python库&#xff0c;传入图片即可识别出缺口…