Linux用户权限——sudoers的深入剖析

news2025/1/17 8:58:11

一、sudo权限的配置

        root账号登录系统不会记录root账号做了什么操作。

        su虽然不记录以root执行了哪些命令,但会创建一条日志记录谁在什么时候变成了root。而su切换为root身份,仍然有很大的无法受控的权限,因此sudo是一个更好的选择。

        sudo命令的意思是以其他用户身份执行命令,用户是否拥有sudo权限?拥有哪些权限?sudo执行时是否需要输入密码?这些都是通过/etc/sudoers文件进行配置和控制的。普通用户我们可以通过su命令切换到其他用户,但是需要知道其他用户的密码,如果是需要执行管理员命令则需要知道root密码。但是如果普通用户拥有sudo权限则可以只需要输入自己密码或者不输入密码完成管理员命令的执行。既保证了超级管理员的密码的安全性,又满足了普通用户执行特殊命令的需求,这就是/etc/sudoers文件的作用。

1. 编辑 sudo权限 命令

visudo
visudo 命令实际修改的是  /etc/sudoers 文件

2. /etc/sudoers 配置文件说明

[root/etc]# cat /etc/sudoers

[root@s142 etc]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或  
## ## 用户组所使用  
## This file must be edited with the 'visudo' command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using 
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名
 
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2
## User Aliases
#用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名  
# User_Alias ADMINS = jsmith, mikem
 
## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,  
## 可以通过sudo调用所有别名包含的命令,下面是一些示例
 
## Networking
#网络操作相关命令别名  
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
 /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, 
 /sbin/mii-tool
## Installation and management of software
#软件安装管理相关命令别名  
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#服务相关命令别名 
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级命令别名  
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相关命令别名 
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
...
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
##      user    MACHINE=COMMANDS
##  用户 登录的主机=(可以变换的身份) 可以执行的命令  
##

## Allow root to run any commands anywhere
## 允许root在任何地方运行任何命令
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software, service management apps and more.
## 允许“sys”用户组的成员运行 网络、软件、服务管理应用等命令。
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
## 允许“wheel”用户组的成员运行所有命令
%wheel  ALL=(ALL)       ALL

## Allows people in group wheel to run all commands without a password
## 允许“wheel”用户组的成员运行所有命令,且运行时不需要输入密码
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the cdrom as root
## 允许“users”组的成员运行 挂载、卸载光盘的命令
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
## 允许“users”组的成员在本机运行 /sbin/shutdown -h now 命令
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 读取 /etc/sudoers.d 目录下所有文件的内容作为配嵌入到此配置文件
## 注意,下面的 # 后面并不是注释
#includedir /etc/sudoers.d

为用户配置sudo权限

[用户名]    [被管理主机的IP]=([可以使用的身份])   [NOPASSWD: ][授权的命令]
[被管理主机的IP][可以使用的身份][授权的命令] 都可以使用  ALL 来表示不限制。
添加  [NOPASSWD: ] 选项可以使用户在使用sudo权限时不需要输入密码。
[授权的命令]要使用绝对路径,多条命令之间可用逗号( ,)分隔。
  • 例:
## Allow root to run any commands anywhere
## 允许root在任何地方运行任何命令
root    ALL=(ALL)       ALL

为用户组配置sudo权限

%[组名]    [被管理主机的IP]=([可以使用的身份])   [NOPASSWD: ][授权的命令]
[被管理主机的IP][可以使用的身份][授权的命令] 都可以使用  ALL 来表示不限制。
添加  [NOPASSWD: ] 选项可以使用户在使用sudo权限时不需要输入密码。
用户组 与 用户 的唯一区别是用户组前有个  %
  • 例:
## 允许“wheel”用户组的成员运行所有命令,且运行时不需要输入密码
%wheel        ALL=(ALL)       NOPASSWD: ALL

3. 注意事项

1) 赋予用户sudo权限时一定要谨慎,够用即可,不要赋予过高的权限

2) [授权的命令] 设置得越具体,用户获得的权限越小。

3) 严禁赋予普通用户 /usr/bin/passwd/usr/bin/vi/usr/bin/su/usr/bin/bash 命令的权限,拥此权限的用户可以修改root用户密码,然后为所欲为。

4) 权力越大,责任越大。

二、sudo 命令介绍

1. sudo [命令]:以 root 身份来执行命令

用户必须有相应命令的sudo权限

例子

  • 普通用户使用 less 命令查看 root 用户的历史命令
[vagrant~]$ sudo less /root/.bash_history
cat report.md | grep -v ID | awk '$4 >= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 <= 99 {print $2}'
cat report.md | grep -v ID | awk '$4 == 100 {print $2}'
sed -n '2p' report.md
sed -n '2,4p' report.md
sed '2,4d' report.md
cat -n report.md
sed '1a Begin' report.md
sed '1i Begin' report.md
sed '1a Begin' report.md
sed '1a End' report.md
sed '1c Hello World' report.md
sed '5c Hello World' report.md
... 省略 ...

2. sudo su:切换到root用户

用户必须有 /usr/bin/su命令的sudo权限
一旦切换成功,用户可以以root身份执行任何命令

例子

  • 普通用户使用 sudo su 命令切换到 root 用户,然后修改root用户的密码
[vagrant/tmp]$ sudo su

[root/tmp]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

3. sudo -s <shell>:切换到root用户的shell

可以不加  <shell>,会使用默认 shell
用户必须有相应shell命令的sudo权限,例如  /usr/bin/bash
一旦切换成功,用户可以以root身份执行任何命令

例子

  • 普通用户使用 sudo -s /usr/bin/bash 命令切换到 root 的shell,然后修改root用户的密码
[vagrant/tmp]$ sudo -s /usr/bin/bash

[root/tmp]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
  • 可以不加 <shell>,会使用默认 shell
[vagrant/tmp]$ sudo -s

[root/tmp]# exit

4. sudo -l:列出目前用户可用的sudo权限的指令

例子

[vagrant~]$ sudo -l
...省略部分内容...
用户 vagrant 可以在本机上运行以下命令:
    (ALL) /usr/bin/bash, /usr/bin/su, /usr/bin/less

三、sudo权限的应用

1. 授权普通用户可以重启服务器

  • 执行 visudo,然后添加如下内容
user1 ALL=(ALL) /sbin/shutdown -r now
  • 切换到user1账号,查看user1可用的sudo权限的指令
[user1@10 ~]$ sudo -l
...省略部分内容...
用户 user1 可以在 10 上运行以下命令:
    (ALL) /sbin/shutdown -r now

2. 授权普通用户可以添加其他用户

功能分析

要想添加其他用户,必须拥有添加用户和设置密码的权限,即 /usr/sbin/useradd 和 /usr/bin/passwd 两个命令的sudo权限

若用户完全拥有 /usr/bin/passwd 的sudo权限,则可以通过 sudo passwd 命令或者 sudo passwd root 命令修改 root 密码,这样就会变得非常不安全。

因此,需要严格限制用户对 /usr/bin/passwd 的权限:

user ALL=(ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root

/usr/bin/passwd [A-Za-z]* 表示 passwd 命令后附加的第一个字符只能是大小写字母。 
!/usr/bin/passwd "" 表示 passwd 命令后不能什么都不加。 
!/usr/bin/passwd root 表示 passwd 命令后不能加 root。

三条语句的缺一不可,且顺序不能颠倒。

实例

  • 执行 visudo,然后添加如下内容
user1   ALL=(ALL)    /usr/sbin/useradd
user1   ALL=(ALL)    /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
  • 切换到user1账号,查看user1可用的sudo权限的指令
[user1@10 ~]$ sudo -l
...省略部分内容...
用户 user1 可以在 10 上运行以下命令:
    (ALL) /usr/sbin/useradd
    (ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
  • 添加用户user2,并为其设置密码
[user1@10 ~]$ sudo useradd user2

[user1@10 ~]$ sudo passwd user2
更改用户 user2 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

[user1@10 ~]$ grep user2 /etc/passwd
user2:x:1006:1007::/home/user2:/bin/bash
  • 尝试以 passwd 和 passwd root 两种方式修改 root 用户的密码,全部失败
[user1@10 ~]$ sudo passwd
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd。

[user1@10 ~]$ sudo passwd root
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd root。
  • 添加用户2_user,尝试为其设置密码,失败。因为 /usr/bin/passwd [A-Za-z]* 决定 passwd 命令后附加的第一个字符只能是大小写字母。
[user1@10 ~]$ sudo useradd 2_user

[user1@10 ~]$ sudo passwd 2_user
对不起,用户 user1 无权以 root 的身份在 10.0.2.15 上执行 /bin/passwd 2_user。

四、visudo命令简介

1、使用语法
用法:
#visudo [-chqsV] [-f sudoers]

2、参数说明
参数    参数说明
-c, --check    检查sudoers配置文件
-f, --file=sudoers    修改sudoers配置文件
-h, --help    获取命令帮助
-q, --quiet    静默输出
-s, --strict    严格语法检查
-V, --version    查看命令版本
四、visudo命令使用示例
1、查看命令版本
[root@s142 ~]# visudo -V
visudo version 1.8.23
visudo grammar version 46

2、获取命令帮助
[root@s142 ~]# visudo -h
visudo - safely edit the sudoers file

3、检查sudoers文件
[root@s142 ~]# visudo -c
/etc/sudoers: parsed OK

4、修改sudoers文件
[root@s142 ~]# cd /etc/
[root@s142 etc]# visudo -f sudoers

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.

5、严格执行语法检查编辑
  实际上我们可以直接编辑/etc/sudoers文件,直接编辑不会进行语法检查。使用visudo -s可以执行sudoers文件的编辑,编辑国产中实际编辑的是/etc/sudoers.tmp文件,编辑完成后必须wr保存后才会存入sudoers文件。保存前会进行语法检查,如果语法检查失败,会进程错误提示,告知是哪一行有语法错误。如果强制保存会有危险。这就是visudo方式编辑sudo文件的好处。

[root@s142 etc]# visudo -s

在这里插入图片描述

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

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

相关文章

【面试题】JavaScript 的 8 种数据类型总结

JavaScript 数据类型 本文将介绍 JavaScript 的 8 种数据类型&#xff0c;结合代码对每种数据类型进行总结归纳。 一、数据类型 最新的 ECMAScript 标准定义了 8 种数据类型&#xff1a; 1.七种基本数据类型&#xff1a; 布尔值&#xff08;Boolean&#xff09;&#xff0…

Apache配置ssl常见错误问题汇总

对于站长来说&#xff0c;部署SSL证书来迁移到HTTPS是一个现实和重要的问题&#xff0c;那么&#xff0c;对于Apache系统来说&#xff0c;如何部署SSL证书实现HTTPS协议呢&#xff1f;下面小编为大家总结了几个比较常见的Apache配置ssl错误问题汇总。 Apache配置ssl常见错误一…

LEAP模型应用于工业、交通、建筑、电力、煤炭、炼油、经济、林业等各领域碳排放预测及建模分析

查看原文>>>LEAP软件&#xff08;使用说明LEAP的模拟练习碳排放相关模板&#xff09;IPCC收录的各种燃料CO2排放系数 目录 第一章 &#xff1a;LEAP建模理论基础 第二章&#xff1a;基于LEAP模型的能源需求预测模型构建 第三章&#xff1a;基于LEAP模型的能源供应…

基于Chatbot UI 实现ChatGPT对话-V1.2

基于Chatbot UI 实现ChatGPT对话-V1.0 前端基于开源项目&#xff1a;chatbot-ui进行二次开发&#xff0c;感兴趣的小伙伴可以自行研究。 本项目搭建初衷&#xff1a;在无法科学上网的情况下&#xff0c;实现ChatGPT对话。还有规避官方聊天时&#xff0c;长时间无链接导致的问题…

Linux网络服务----DNS

文章目录 一 、DNS 概念1.1 DNS的简介1.2 DNS 数据结构分布1.3 DNS 域名解析方式1.4 DNS的查询方式 二 、操作实验2.1 主dns服务器配置正向和反向解析2.2 设置从dns服务器正向和反向解析2.3 配置DHCP 一 、DNS 概念 1.1 DNS的简介 域名解析&#xff1a;是互联网的一项服务。它…

fisco bcos Caliper部署错误

fisco bcos Caliper部署错误 错误1、Depolying error: Error: Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given错误2&#xff1a;Depolying error: TypeError: secp256k1.sign is not a function 错误1、Depolyin…

中国传统的家庭观念,家庭养老一直是中国式养老的主要组成部分

哈喽大家好&#xff0c;本期小编为大家带来中国式养老的发展分析。中国的养老产业在不断的变革和进步&#xff0c;养老需求增加迅速。相关部门大力促进养老服务发展的同时&#xff0c;一些创新型企业也正在推出更加智能化和个性化的养老产品和服务。与此同时&#xff0c;养老行…

CCF-CSP-4-5

csp 2013-12-4 有趣的数2013-12-5 Im stuck10%2014-3-4 无线网络2014-3-5任务调度2014-9-4最优配餐2014-9-5拼图2014-12-4 最优灌溉2014-12-5货物调度2015-3-1 网络延时2015-3-5 最小花费2015-9-4 高速公路2015-9-5 最佳文章2015-12-4 送货2015-12-5 矩阵2013-12-4 有趣的数

简单介绍十几款常用的画架构图流程图的软件

简单介绍十几款常用的画架构图流程图的软件 draw.io draw.io是开源免费的在线画图工具&#xff0c;还提供桌面版本。 特性&#xff1a; 实时协作&#xff1b;支持在线离线版本&#xff1b;存储支持多种方式&#xff1a;Google Drive, OneDrive, GitHub, GitLab, Dropbox等&…

通识哈夫曼树及其应用,一起来构造属于自己的哈夫曼树

1.哈夫曼树的背景 哈夫曼&#xff08;霍夫曼、赫夫曼&#xff09;David Albert Huffman(August9,1925-October7,1999)。计算机科学的先驱&#xff0c;以他的哈夫曼编码闻名&#xff0c;在他的一生中&#xff0c;对于有限状态自动机&#xff0c;开关电路&#xff0c;异步过程和信…

ML | Python中的数据预处理

预处理是指在将数据提供给算法之前对数据进行的转换。数据预处理是一种用于将原始数据转换为干净数据集的技术。换句话说,无论何时从不同来源收集数据,它都是以原始格式收集的,这对于分析是不可行的。 数据预处理的需要 为了从机器学习项目中的应用模型中获得更好的结果,数…

SpringCloud:ElasticSearch之搜索结果处理

搜索的结果可以按照用户指定的方式去处理或展示。 1.排序 elasticsearch默认是根据相关度算分&#xff08;_score&#xff09;来排序&#xff0c;但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#xff1a;keyword类型、数值类型、地理坐标类型、日期类型等。 1.…

【ChatGPT】AI 发展如此火热,程序员的发展呢?

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、AI 已来&#xff0c;ChatGPT 你用上了吗&#x1f33e;二、AI 之路&#xff0c;这是社会在发展&#x1f331;三、AI 时代&#xff0c;程序员应该怎么做&#x1f334; 一、AI 已来&#xff0c;ChatGPT 你用上…

增加最优传输过程中遇到的问题

最近&#xff0c;正在使用最优传输&#xff0c;在使用的过程中遇到了一下问题&#xff0c;简单记录一下这些问题。该文章仅用于记录学习&#xff0c;不做其他用途&#xff0c;参考的文章均声明。 修改代码过程中&#xff0c;遇到的错误总结 Question 1. 描述&#xff1a; lin…

C++数据结构:二叉树的前序、中序、后序遍历的非递归实现

目录 一. 前序遍历的非递归实现 二. 中序遍历的非递归实现 三. 后序遍历的非递归实现 一. 前序遍历的非递归实现 我们知道&#xff0c;前序遍历的访问顺序为&#xff1a;根节点 -> 左子树 -> 右子树。如图1.1所示的二叉树&#xff0c;我们要通过非递归实现前序遍历&am…

车载网络 - Autosar网络管理 - 网络管理简介

一、什么是CAN网络管理及它的作用 现在的车辆是由大量的ECU节点组成的&#xff0c;为了能使各ECU能够正确并及时地进行CAN通信&#xff0c;需要有一套机制来统一协调总线上各节点的休眠唤醒&#xff0c;这套机制就是CAN网络管理&#xff08;NM&#xff09;。 网络管理的目的是保…

系统集成项目管理工程师 笔记(第四章:项目管理一般知识)

文章目录 4.1.2 项目目标 1764.1.3 项目的特点 1784.1.9 项目干系人 1894.1.11 事业环境因素 1924.1.12 组织过程资产 1924.2.3 组织结构 1944.2.4 PMO在组织结构中的作用 199PMO类型&#xff08;支持型、控制型、指令型&#xff09;项目经理和PMO的区别 4.4 典型的信息系统项目…

图片存储方案-七牛云存储

1.引语 在实际开发中&#xff0c;我们会有很多处理不同功能的服务器。例如&#xff1a; 应用服务器&#xff1a;负责部署我们的应用 数据库服务器&#xff1a;运行我们的数据库 文件服务器&#xff1a;负责存储用户上传文件的服务器 分服务器处理的目的是让服务器各司其职…

tail:查看日志命令工具

文章目录 1. Windows下tail查看日志命令工具下载、使用方法2. baretail【windows端替代tail的工具】3. Tail4win【windows端替代tail的工具】4. MobaXterm【windows端替代tail的工具】5. tail 命令介绍 1. Windows下tail查看日志命令工具下载、使用方法 tail工具下载 链接&am…

中文改写神器下载-中文改写神器

自动文章生成器 随着人工智能技术的快速发展&#xff0c;自动文章生成器已经成为了一个越来越流行的营销推广工具。这种工具可以根据您提供的关键词和主题&#xff0c;在几秒钟之内生成高质量的文章&#xff0c;为企业加快文章产出速度&#xff0c;提高品牌知名度提供了优秀的…