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命令来验证是否生效

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多列匹配,根据对应状态、排序字段

多列匹配,根据对应状态、排序字段 数据: 查询:

Golang leetcode28 找出字符串中第一个匹配项的下标 KMP算法详解

文章目录 找出字符串中第一个匹配项的下标 leetcode28 串的模式匹配问题暴力求解使用KMP模式匹配算法KMP算法简述 KMP算法的代码实现 找出字符串中第一个匹配项的下标 leetcode28 串的模式匹配问题 暴力求解 func strStr(haystack string, needle string) int { L : len(need…

大模型笔记【3】 gem5 运行模型框架LLama

一 LLama.cpp LLama.cpp 支持x86,arm,gpu的编译。 1. github 下载llama.cpp https://github.com/ggerganov/llama.cpp.git 2. gem5支持arm架构比较好,所以我们使用编译LLama.cpp。 以下是我对Makefile的修改 开始编译: make UNAME…

用pandas实现用前一行的excel的值填充后一行

今天接到一份数据需要分析,数据在一个excel文件里,内容大概形式如下: 后面空的格子里的值就是默认是前面的非空的值,由于数据分析的需要需要对重复的数据进行去重,去重就需要把控的cell的值补上,然后根据几…

2024 前端高频面试题之 JS 篇

JS 篇(持续更新中) 1、什么是原型、原型链?2、什么是继承?说一说有哪些?继承组合的原理及优点?3、new 操作符具体干了什么?4、js 有哪些方法改变 this 指向?5、bind 有哪些实现的注意…

时空预测网络ST-Resnet 代码复现

ST-ResNet(Spatio-Temporal Residual Network)是一种用于处理时空数据的深度学习模型,特别适用于视频、时间序列等具有时空结构的数据。下面是一个简单的使用PyTorch搭建ST-ResNet的示例代码。请注意,这只是一个基本的示例&#x…

一文了解国密算法SSL证书

国密算法是中国国家密码管理局发布的一组密码算法标准,用于替代国际上的一些加密算法。在SSL证书中,使用国密算法的证书通常称为"国密SSL证书"。 国密SSL证书与传统的SSL证书在加密算法上有所不同。传统SSL证书通常使用的是RSA或者ECC&#xf…

QQ失效的图片怎么恢复?这3种方法送给大家!

在我们使用QQ时,难免会遇到QQ图片失效的情况。或许是因为误删了聊天记录,又或许是因为没有及时保存而导致失效。 那么,面对这些失效的图片,我们该如何恢复呢?qq失效的图片怎么恢复?今天,小编将…

一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 了解kmalloc、vmalloc、malloc

大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 移步飞书获得更好阅读体验: Docs Hello,大家好我是硬核王同学,是一名刚刚工作一年…

开源无代码应用程序生成器Saltcorn

什么是 Saltcorn ? Saltcorn 是一个无需编写任何代码即可构建数据库 Web 应用程序的平台。它配备了一个吸睛的仪表板,丰富的生态系统、视图生成器以及支持主题的界面,使用直观的点击、拖放用户界面来构建整个应用程序。 软件的特点&#xff1…

上位机图像处理和嵌入式模块部署(流程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,传统图像处理的方法,一般就是pccamera的处理方式。camera本身只是提供基本的raw data数据,所有的…

SpringBoot - SpringBoot手写模拟SpringBoot启动过程

依赖 建一个工程,两个Module: 1. springboot模块,表示springboot框架的源码实现 2. user包,表示用户业务系统,用来写业务代码来测试我们所模拟出来的SpringBoot 首先,SpringBoot是基于的Spring,所以我…

140:leaflet加载here地图(v2软件多种形式)

第140个 点击查看专栏目录 本示例介绍如何在vue+leaflet中添加HERE地图(v2版本的软件),并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 v3版本和v2版本有很大的区别,关键是引用方法上,请参考文章尾部的API链接。 直接复制下面的 vue+leaf…

spring boot学习第八篇:kafka监听消费

为了实现监听器功能 pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…

开发者的瑞士军刀!一款适用于开发者的工具集合!

大家好&#xff0c;我是 Java陈序员。 俗话说“工欲善其事必先利其器”&#xff0c;有一个好的工具可以事半功倍。 编程开发亦是如此。 今天&#xff0c;给大家介绍一款离线的 Windows 应用程序&#xff0c;该应用涵盖常见的开发工具集合&#xff0c;旨在提高工作效率&#…

【Coding】寒假每日一题Day.5.三国游戏

题目来源 题目来自于AcWing平台&#xff1a;https://www.acwing.com/problem/content/description/4968/。 以blog的形式记录程序设计算法学习的过程&#xff0c;仅做学习记录之用。 题目描述 输入输出格式与数据范围 样例 思路 思路参考自题解&#xff1a;https://www.acwi…

Maven 打包时,依赖配置正确,但是类引入出现错误,一般是快照(Snapshot)依赖拉取策略问题

问题描述&#xff1a; 项目打包时&#xff0c;类缺少依赖&#xff0c;操作 pom.xml -> Maven -> Reload project &#xff0c;还是不生效&#xff0c;但是同事&#xff08;别人&#xff09;那里正常。 问题出现的环境&#xff1a; 可能项目是多模块项目&#xff0c;结构…

css中>>>、/deep/、::v-deep的作用和区别,element-ui自定义样式

文章目录 一、前言1.1、/deep/1.2、::v-deep1.3、>>> 二、区别三、总结四、最后 一、前言 1.1、/deep/ 在style经常用scoped属性实现组件的私有化时&#xff0c;要改变element-ui某个深层元素&#xff08;例如.el-input__inner&#xff09;或其他深层样式时&#xf…

深度学习基础之数据操作

深度学习中最常用的数据是张量&#xff0c;对张量进行操作是进行深度学习的基础。以下是对张量进行的一些操作&#xff1a; 首先我们需要先导入相关的张量库torch。 元素构造&#xff08;初始化&#xff09; 使用arange创造一个行向量&#xff0c;也就是0轴&#xff08;0维&a…

中断——外部中断EXIT

终端可以分成外部中断和内部中断吗 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 野火中断章节有这样一句话 【F103在内核水平上搭载了一个异常响应系统&#xff0c; 支持为数众多的系统异常和外部中断。 其中系统异常有8个&#xff…