LINUX常用工具之sudo权限控制

一、Sudo基本介绍

sudo是Linux 中用于允许特定用户以超级用户或其他特权用户的身份执行特定的命令或任务。sudo 提供了一种安全的方法,使用户能够临时获取额外的权限,而不需要以完全超级用户的身份登录系统。sudo也可以用了设置黑名单命令清单,控制用户不允许执行一些命令。

默认情况下/etc/sudoers 是不能被任何人直接编辑的,因为它的权限是 440,虽然也可以对其赋予写权限后再编辑,但推荐使用 visudo 命令编辑该文件。

sudo的执行过程:

1、sudo 会读取和解析 /etc/sudoers 文件,查找调用命令的用户及其权限

2、然后提示调用该命令的用户输入密码(通常是用户密码,但也可能是目标用户的密码,或者也可以通过 NOPASSWD 标志来跳过密码验证)

3、 之后,sudo 创建一个子进程,调用 setuid() 来切换到目标用户

4、接着,它会在上述子进程中执行参数给定的shell 或命令

二、sudo基本用法

1、授权配置格式

USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS

• USER/GROUP 表示需要被授权的用户或者组,如果是组则,需要以 % 开头

• HOST 表示允许从哪些主机登录的用户运行 sudo 命令,ALL 表示允许从任何终端、机器访问

• (USER[:GROUP]) 表示使用 sudo 可切换的用户或者组,组可以不指定,ALL 表示可以切换到系统的所有用户

• NOPASSWD 如果指定,则该用户或组使用 sudo 时不必输入密码

• COMMANDS 表示运行指定的命令,ALL 表示允许执行所有命令

配置示例:

# 允许 sudo 组执行所有命令

%sudo ALL=(ALL:ALL) ALL

# 允许用户执行所有命令,且无需输入密码

huoty ALL =(ALL) NOPASSWD: ALL

# 仅允许用户执行 echo, ls 命令

huoty ALL =(ALL) NOPASSWD: /bin/echo /bin/ls

# 运行本机的用户执行关机命令

huoty localhost=/sbin/shutdown -h now

# 允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令

%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom


2、使用Defaults 配置,可以改变 sudo 命令的行为

# 指定用户尝试输入密码的次数,默认值为3

Defaults passwd_tries=5

# 设置密码超时时间,默认为 5 分钟

Defaults passwd_timeout=2

默认sudo 询问用户自己的密码,添加 targetpw 或 rootpw 配置可以让 sudo 询问 root 密码

Defaults targetpw

# 指定自定义日志文件

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

# 要在自定义日志文件中记录主机名和四位数年份,可以加上 log_host 和 log_year 参数

Defaults log_host, log_year, logfile="/var/log/sudo.log"

# 保持当前用户的环境变量

Defaults env_keep += "LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR"

Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

# 安置一个安全的 PATH 环境变量

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


3、别名设置

• Host_Alias 主机别名

• Cmnd_Alias 命令别名

• User_Alias 用户别名,可以是用户,用户组

• Runas_Alias 目的用户别名

配置示例:

# 主机别名

Host_Alias FILESERVERS = fs1, fs2

Host_Alias MAILSERVERS = smtp, smtp2

# 用户别名

User_Alias ADMINS = huoty, kong

# 命令别名

Cmnd_Alias SHUTDOWN = /sbin/reboot, /sbin/poweroff

Cmnd_Alias PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/iptables

Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /bin/mount, /bin/umount

Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

# 允许 ADMINS 用户执行包管理和关机命令

ADMINS ALL = PKGMGMT, SHUTDOWN

# 允许 sys 用户组中的用户使用 NETWORKING 等所有别名中配置的命令

%sys ALL = NETWORKING, PKGMGMT, SERVICES, STORAGE, DELEGATING, PROCESSES


4、sudo 常用参数

• -l 列出当前用户所拥有的权限

• -E 保持当前用户的环境变量

• -H 设置 HOME 环境变量为目标用户的主目录

• -u 以指定用户运行命令

• -k 结束密码有效期限,即下次再执行时需要重新输入密码

• -- 停止解析命令行参数,即之后命令不再作为其控制餐宿


查看sudo 命令文件的信息如下:

$ ls -l /usr/bin/sudo

-rwsr-xr-x 1 root root 155008 Mar 13 2015 /usr/bin/sudo

可以发现sudo 上启用了 setuid 位,即当任何用户运行这个二进制文件时,其将以 root 用户的权限运行。

sudo 存在一个曲线是,其无法使用 Shell 的内置命令。如 history 等:

$ sudo history

sudo: history: command not found

解决这个问题的办法是,临时切换到root shell,并在那里执行任何命令,包括 Shell 的内置命令:

$ sudo bash

当前用户的命令别名不会被应用到sudo。如果需要这样,可以在 ~/.bashrc 或者 /etc/bash.bashrc 中加入:

alias sudo='sudo '

如果希望使用sudo 一次执行多个命令,可以使用 bash -c,如:

$ sudo -- bash -c 'pwd; hostname; whoami'

 

三、Sudo黑名单配置

1、sudo的用户权限配置

a) /etc/sudoers文件:

默认的配置用户操作sudo命令权限的文件、也就是说可以在这个文件中通过配置来制定用户是否具有sudo权限、和哪些命令可以使用sudo权限。如果要通过编辑这个文件来实现用户的sudo赋权操作必须使用命令:visudo 来修改sudoers文件。

b) /etc/sudoers.d文件夹:

通过cat /etc/sudoers查看sudoers文件内容,你会发现有一行说明:最好不要修改此文件、通过操作sudoers.d文件夹来实现普通用户的sudo命令赋权过程。


2、黑名单配置步骤

1) 在/etc/sudoers.d 文件夹下新建一个文件,名称无所谓,如:user1

visudo -f /etc/sudoers.d/user1

2) 编辑user1文件:添加


可以先将/sbin、/usr/sbin/ 中的命令先全部做策略限制。


3)修改策略文件权限为400

chmod 400 /etc/sudoers.d/user1

4)策略文件配置完成后,测试是否有语法错误。


5) 用user1账户登录,执行sudo命令来验证是否生效

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

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

相关文章

ROS第 13 课 TF 坐标系广播与监听的编程 实现

文章目录 第 13 课 TF 坐标系广播与监听的编程 实现1.机器人的坐标变换2.创建功能包3.编程方法3.1 编写广播和监听程序3.2 运行程序 第 13 课 TF 坐标系广播与监听的编程 实现 1.机器人的坐标变换 在进行编程前,先需要了解机器人的坐标变换。这里以运行海龟案例来…

有关软件测试的,任何时间都可以,软件测试主要服务项目:测试用例 报告 计划

有关软件测试的,任何时间都可以,软件测试主要服务项目: 1. 测试用例 2. 测试报告 3. 测试计划 4. 白盒测试 5. 黑盒测试 6. 接口测试 7.自动…

Vuex的基础使用

在使用之前要先了解Vuex的组成结构,跟对应的使用关系。 在上图的结构图中可以看到四个组成部分,首先是Components(组件)、Actions(行动)、Mutations(变化)、state(状态/数…

Vue——计算属性

文章目录 计算属性computed 计算属性 vs methods 方法计算属性完整写法 综合案例:成绩案例 计算属性 概念:基于现有的数据,计算出来的新属性。依赖的数据变化,自动重新计算 语法: ①声明computed配置项中,一个计算属性…

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…

链表中倒数第k个结点(附带源码)

目录 代码部分: 核心:看图 代码部分: struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code here// write code hereif (k 0){return NULL;}else{struct ListNode* slow pListHead, * fast pListHead;//…

Linux内核pinctrl子系统驱动框架

一. 简介 本文简单了解一下Linux内核代码中, pinctrl子系统的驱动实现。 注意:本文会涉及到 Linux 驱动分层与分离、平台设备驱动等还未讲解的知识 ,所以,也不会影响后续的实验。 二. Linux内核pinctrl子系统驱动 1. probe函…

【数学建模】数据处理与可视化

文章目录 数值计算工具NumPy数组的创建、属性和操作数组的运算、通用函数和广播运算Numpy.random模块的随机数生成文本文件和二进制文件存取 文件操作文件基本操作文件管理方法 数据处理工具PandasSeries和DataFrame外部文件存取 Matplotlib可视化基础用法可视化应用可视化综合…

2023年DevOps国际峰会暨 BizDevOps 企业峰会(DOIS北京站):核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展,软件开发的模式和流程也在不断地演变。在众多软件开发方法中,DevOps已成为当下热门的软件开发运维一体化模式。特别是在中国,随着越来越多的企业开始认识到DevOps的价值,这一领域的研究与实践活动日益活跃。本…

反序列化字符串逃逸(下篇)

这里承接上篇文章反序列化字符串逃逸&#xff08;上篇&#xff09;-CSDN博客带大家学习反序列化字符串逃逸减少&#xff0c;没有看过的可以先去看看&#xff0c;不会吃亏。 例题&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); function filter($name…

Linux_清理docker磁盘占用

文章目录 前言一、docker system 命令1. docker system df&#xff08;本文重点使用&#xff09;2. docker system prune&#xff08;本文重点使用&#xff09;3. docker system info4. docker system events 二、开始清理三、单独清理Build Cache四、单独清理未被使用的网络 前…

nginx虚拟主机

虚拟主机指的就是一个独立的站点配置&#xff0c;是nginx默认支持的一个功能&#xff0c;它能够有自己独立的域名&#xff0c;独立的ip&#xff0c;独立的端口配置&#xff0c;能够配置完整的www服务&#xff0c;列如网站搭建&#xff0c;邮件服务器代理等等。并且nginx支持多虚…

回归预测 | Python基于Encoder-TCN-BIGRU-Decoder多变量回归预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.支持多输入&#xff0c;单输出&#xff01; 2.使用了多种可视化方法&#xff0c;代码编写过程中也对各段代码进行封装&#xff0c;方便解读和调试&#xff01; 3.适合于风电数据&#xff0c;光伏数据&#xff0c;环…

设计模式篇---中介者模式

文章目录 概念结构实例总结 概念 中介者模式&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 就好比世界各个国家之间可能会产生冲突&#xff0c;但是当产…

深入数仓离线数据同步:问题分析与优化措施

一、前言 在数据仓库领域&#xff0c;离线数仓和实时数仓是常见的两种架构类型。离线数仓一般通过定时任务在特定时间点&#xff08;通常是凌晨&#xff09;将业务数据同步到数据仓库中。这种方式适用于对数据实时性要求不高&#xff0c;更侧重于历史数据分析和报告生成的场景…

Excel新建文件打开后提示文件扩展名与文件格式不匹配

环境&#xff1a; Win10专业版 excel2016 问题描述&#xff1a; Excel新建文件打开后提示文件扩展名与文件格式不匹配 解决方案&#xff1a; 1.调出注册表编辑器&#xff0c;按层点击文件夹&#xff1a;HKEY_CURRENT_USER/Software/Microsoft/Office/12.0/Excel/Securit…

利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装后不能调用pytorch和paddlepaddle框架

问题现象&#xff1a; 之前安装后不能在添加pytorch和paddlepaddle框架 原因&#xff08;疑似&#xff09;&#xff1a; 在终端中显示pytorch和paddle在C盘但是安装是安装在J盘 解决办法&#xff1a; 卸载、删除文件重新安装后可以看到文件位置在J盘中 但是选择时还是显示C…

【cucumber】cucumber-reporting生成测试报告

原始的cucumber report 比较粗糙 我们可以通过cucumber-reporting 插件对报告进去优化 在pom.xml里面添加cuccumber-reporting 插件 <!-- 根据 cucumber json文件 美化测试报告--><dependency><groupId>net.masterthought</groupId><artifactId>…

设计模式—行为型模式之观察者模式

设计模式—行为型模式之观察者模式 观察者模式(Observer Pattern)&#xff1a;定义对象间的一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#…

Java 基于 SpringBoot+Vue 的社区团购系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…