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.hqwc.cn/news/419276.html

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

相关文章

[陇剑杯 2021]简单日志分析

[陇剑杯 2021]简单日志分析 题目做法及思路解析(个人分享) 问一:某应用程序被攻击,请分析日志后作答: 黑客攻击的参数是______。(如有字母请全部使用小写)。 题目思路: 分析…

Haxe-UnrealEngine5

Haxe-UnrealEngine5 结论 UE C header > External/**.hx.hx > .h/.cpp,和 UE C 一起编译使用 hxcpp 来调试 .hx good: 理论上不仅限反射代码走 UE C,无需维护 backend,比如 Lua Binding理论上接近 UE C 的性能 bad&…

71.工作中redis的常用场景总结

文章目录 一、简介二、统计访问次数三、缓存四、分布式锁五、限流六、排行榜七、作为Session的存储器,存用户登录状态八、位统计九、生成全局ID 一、简介 Redis作为一种优秀的基于key/value的缓存,有非常不错的性能和稳定性,无论是在工作中&…

台达PLC程序远程上下载 远程在线调试原来是使用了博达V900远程透传模块

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条,用于实现网络连接和连接PLC一台台达PLC及其编程软件ISPSoft一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡,WIFI联网则将WIFI天线插入USB口) …

Python圣诞主题绘图:用turtle库打造冬日奇妙画面【第31篇—python:圣诞节】

文章目录 Python圣诞主题绘图导言代码结构概览详细解析drawlight函数tree函数xzs函数drawsnow函数五角星的绘制 完整代码代码解析总结 Python圣诞主题绘图 导言 圣诞季节是个充满欢乐和创意的时刻。在这个技术博客中,我们将深入探讨如何使用Python的turtle库创建一…

实战 | OpenCV两种不同方法实现粘连大米粒分割计数(步骤 + 源码)

导 读 本文主要介绍基于OpenCV的两种不同方法实现粘连大米分割计数,并给详细步骤和源码。源码和图片素材见文末。 背景介绍 测试图如下,图中有个别米粒相互粘连,本文主要演示如何使用OpenCV用两种不同方法将其分割并计数。 方法一:基于分水岭算法 基于分水岭算法…

助力焊接场景下自动化缺陷检测识别,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建工业焊接场景下缺陷检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景,在我们前面的博文开发实践中也有一些相关的实践,感兴趣的话可以自行移步阅读即可: 《轻量级模型YOLOv5-Lite基于自己的数据集【焊接质量检测】从零构建模型超详细教程》 《基于DeepLabV3Pl…

maven常见的报错集合及解决

文章目录 maven常见的报错集合及解决第一种版本号报错,电脑系统全局搜索 lastUpdated后缀相关文件--》全选删除2 第二种maven工程是灰色--》使用号解决重新识别maven工程 3 本地的jar,安装第三方的jar包替换掉上图黄色标记部分(注意是否有错误…

maven 基本知识/1.17

maven ●maven是一个基于项目对象模型(pom)的项目管理工具,帮助管理人员自动化构建、测试和部署项目 ●pom是一个xml文件,包含项目的元数据,如项目的坐标(GroupId,artifactId,version )、项目的依赖关系、构建过程 ●生命周期&…

视频怎么添加字幕?这几款工具很实用

视频怎么添加字幕?现在,视频已经成为人们获取信息和娱乐的主要方式之一。然而,很多时候,我们想要更深入地理解视频内容,或者为听力障碍者提供帮助,就需要添加字幕。那么,如何为视频添加字幕呢&a…

QWT 6.2.0编译的库及头文件 :已经打包成3rdparty/qwt,可以直接在你的工程里cmake导入外部库,直接使用

qwt 6.2.0打包好的库及其头文件 链接:https://pan.baidu.com/s/1yDFLUxxxR8sDfMKalA8fVw?pwdo8gg 提取码:o8gg cmake工程导入编译好的qwt 6.2.0外部库 新建CMake Qt项目 # 在生成你的应用add_executable之前添加qwt外部库,你可以在你的…

Django随笔

关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app,在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中(改成中文) LA…