当前位置: 首页 > article >正文

sudo权限管理

su命令和sudo及runuser命令

  • sudo、su和su -的区别
    • su
    • su -
  • sudo
    • sudo -s
    • sudo -i
    • sudo -u以指定用户运行命令
    • sudo -l验证 SUDOERS 组成员
  • runuser命令
  • 配置visudo
    • 仅允许字符终端登陆(tty)--授权localhost
    • 允许图形和tty登陆--授权all
    • 用户组提权-示例配置
  • 在`sudoers.d`目录下创建授权文件--`推荐`
    • 五段式配置
    • 三段式配置
  • 检查sudoers配置是否有误
  • 如何在sudo`运行的命令中`防止`使用参数`
    • 结果验证

sudo、su和su -的区别

https://linux.cn/article-8404-1.html


su

参数解释
-m,-p执行su时不会改变环境变量
-s指定要执行的shell(bash csh tcsh 等)
-c变更账号为USER的使用者并在执行完command后变为原使用者
-f不需要读启动档,仅用于 csh 或 tcsh
  • su
    su命令在切换用户时,仅切换root用户身份,但shell环境仍为普通用户;
    root切换普通用户不需要密码;
    普通用户切换用户是需要输入密码的
# 切换用户,但保留当前用户的变量信息
su 用户名

su -

  • su -
    su –命令在切换用户时,用户身份和shell环境都会切换为root用户;
    su - 表示完全变更,不保留原用户的任何原始属性;
    是完全切换到新用户,包括环境变量也是变更的.
# 完全切换用户
su - 用户名

sudo

sudo命令可以允许普通用户执行管理员账户才能执行的命令

su命令有一个致命的问题:一定要输入密码,这时候用sudo命令;
如果其他同事用su命令切换你的账户,你必须得把密码告诉他,他才能切换成功;
如果即想其他用户完成这个工作,又不想要他完全变更到你的账号身份下,这时候用sudo命令可以解决这个问题.

sudo可以精确的控制其他用户可以提权某个命令进行放行;
sudo是个服务,需要编辑配置文件/etc/sudoers;
或者使用visduo命令进行配置sudo服务.

参数解释
-h显示版本号以及指令的使用说明
-k使使用者在下次执行sudo时询问密码
-l显示使用者的权限
-L显示sudos设置

sudo -s

参考: https://www.v2ex.com/t/885106#reply3
sudo -s 不会执行 profile ;会执行 rc.


sudo -i

-i 参数(即 sudo -i ),在 sudo 的 man page 里指明了,会加载 .profile,.bash_profile.login ,root变量将被shell读取 , 同时呢,会跳到 /root 目录。


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

sudo -u 用户名 要执行的命令

在这里插入图片描述

sudo -l验证 SUDOERS 组成员

# 验证 SUDOERS 组成员
sudo -l -U 用户名

在这里插入图片描述


runuser命令

用法:runuser [选项] -u <USER> COMMANDrunuser [选项] [-] [USER [参数]...]以有效 <USER> 用户 id 和组 id 运行 COMMAND 命令。如果未给出 -u,
将退而使用与 su(1) 兼容的语法并执行 shell。
-l、-c、-f、-s 与 -u 相互排斥。选项:-u, --user <用户>               用户名-m, -p, --preserve-environment  不重置环境变量-g, --group <>             指定主组-G, --supp-group <>        指定一个辅助组-, -l, --login                  使 shell 成为登录 shell-c, --command <命令>            使用 -c 向 shell 传递一条命令--session-command <命令>        使用 -c 向 shell 传递一条命令而不创建新会话-f, --fast                      向shell 传递 -f 选项(csh 或 tcsh)-s, --shell <shell>             若 /etc/shells 允许,则运行 shell-h, --help     显示此帮助并退出-V, --version  输出版本信息并退出

以指定用户运行某个命令

# root用户下指定admin执行命令
# runuser -l 指定用户 -c '要执行的命令'
## -l 指定用户
## -c 要执行的命令
runuser -l admin -c 'id'# 示例:
sudo runuser -l USER1 --group=GROUP1 -c "cd WD && ENVFILE_CONTENTS ENV COMMAND"

在这里插入图片描述


配置visudo

https://blog.51cto.com/chenfage/1830424
在这里插入图片描述
在大约99行添加配置信息
第一段 表示允许提权的用户
第二段 ALL=(ALL) 这里第一个ALL可以指定主机来源,参数有localhostIP地址,ALL
第三段 允许放行的命令(绝对路径),多个命令可以用逗号(,)隔开

例如:

# 允许lisi用户通过sudo 执行poweroff命令
## 没有NOPASSWD:表示要输入密码
lisi  ALL=(ALL)  /usr/sbin/poweroff# 允许bai用户执行iptables命令
## NOPASSWD:/usr/sbin/iptables表示执行iptables不需要输入密码
bai ALL=(ALL) NOPASSWD:/usr/sbin/iptables
代授权的用户或组来源机器= (授权角色)是否免密码:可以执行的命令
lisiALL= (ALL)/usr/sbin/poweroff
baiALL= (ALL)NOPASSWD:/usr/sbin/iptables

仅允许字符终端登陆(tty)–授权localhost

非ssh可执行的命令

# 用户名 本地登陆用localhost=命令绝对路径
## 没有NOPASSWD:表示要输入密码
## user1用户允许localhost登录,能通过sudo 运行yum命令,需要输入密码
user1 localhost=/usr/bin/yum
代授权的用户或组来源机器=(授权角色)可以执行的命令免密码
zhangsanlocalhost=/usr/bin/yum

允许图形和tty登陆–授权all

ssh和localhost登录都可以执行

# 用户名  要执行的命令		免密码
## user1用户允许本地和ssh登录,能通过sudo允许yum命令不需要输入密码
user1 ALL=/usr/bin/yum NOPASSWD:ALL
代授权的用户或组来源机器=(授权角色)可以执行的命令免密码
user1ALL=/usr/bin/yumNOPASSWD:ALL

用户组提权-示例配置

用户组提权配置只需要在用户组前加上%

# %组名	ALL=(主机来源)	命令绝对路径
%gourp 	ALL=(ALL)		/usr/bin/yum
%组名来源机器=(授权角色)可以执行的命令免密码
%sudoALL=(ALL)/usr/bin/yumNOPASSWD:ALL

sudoers.d目录下创建授权文件–推荐

sudoers.d目录下文件权限一定要0440

# sudoers.d目录下文件设为0440
chmod 0440 /etc/sudoers.d/*

示例:

# 创建hadoop用户
## -d 指定用户登入时的起始目录
## -m 自动创建用户的登入目录
sudo useradd -d /home/hadoop -m hadoop# 配置hadoop用户的权限
echo "hadoop ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/hadoop# 配置hadoop的sudo配置文件权限
sudo chmod 0440 /etc/sudoers.d/hadoop

在这里插入图片描述

代授权的用户或组来源机器= (授权角色)免密码:可以执行的命令
hadoopALL = (root)NOPASSWD: ALL

五段式配置

# 给devops创建授权文件,设置文件权限0400
cd /etc/sudoers.d && touch devops && chmod 0440 devops && vim devops# 将配置文件添加到devops文件中,当执行sudo updatedb命令时免密码
devops ALL=(ALL) NOPASSWD:/usr/bin/updatedb
代授权的用户或组来源机器=(授权角色)可以执行的命令免密码
devopsALL=(ALL)/usr/bin/updatedbNOPASSWD: /usr/bin/updatedb

第一段: 表示允许提权的用户,%sudo代表sudo组
第二段: ALL=(ALL) 这里第一个ALL可以指定主机来源,参数有localhostIP地址,ALL
第三段:表示sudo可以切换到什么用户。ALL表示所有用户
第四段:表示sudo可以切换到哪些组下的用户。ALL表示所有组
第五段:表示sudo之后能够执行的命令(绝对路径)。NOPASSWD:ALL表示执行任意命令都不需要密码

代授权的用户或组来源机器=(授权角色)可以执行的命令免密码
devopsALL=(ALL)NOPASSWD: ALL

三段式配置

第一段: 表示允许提权的用户,%sudo代表sudo组
第二段: ALL=(ALL) 这里第一个ALL可以指定主机来源,参数有localhostIP地址,ALL
第三段: 允许放行的命令(绝对路径),多个命令可以用逗号(,)隔开

# 允许执行所有sudo命令不需要输入密码
devuser ALL=(ALL) NOPASSWD:ALL
代授权的用户或组来源机器= (授权角色)免密码:可以执行的命令
devopsALL= (ALL)NOPASSWD: ALL

检查sudoers配置是否有误

https://www.linuxcool.com/visudo

# 检查文件格式是否有误
visudo -c /etc/sudoers.d/devops

在这里插入图片描述

# 严格检查sudoers文件
visudo -s

如何在sudo运行的命令中防止使用参数

参考: https://linux.cn/article-15106-1.html

visudoroot用户身份编辑/etc/sudoers文件.
命令行后添加 ""防止使用参数

# 命令行后添加 ""防止使用参数
user1   ALL=(root)      /usr/bin/ls ""# 用户设为ALL命令行后添加 ""防止使用参数
ALL   ALL=(root)      /usr/bin/ls ""
代授权的用户或组来源机器= (授权角色)免密码:可以执行的命令
user1ALL = (root)/usr/bin/ls “”

在这里插入图片描述


结果验证

在这里插入图片描述

http://www.lryc.cn/news/2417732.html

相关文章:

  • 是不是都把SELinux给忘了?
  • git命令归纳整理及如何使用
  • JDBC连接数据库小白级教程
  • 设计模式学习(三):Adapter适配器模式
  • JavaFX17 现代 Java 客户端权威指南(七)
  • Unity-3D游戏开发套件指南(入门篇)-免费资源
  • 如何快速而准确地进行 IP 和端口信息扫描:渗透测试必备技能
  • PID超详细教程——PID原理+串级PID+C代码+在线仿真调参
  • 一文彻底搞懂 TSL 流程
  • 计算机网络一篇文章就能掌握,拓扑结构图文解析,协议详解等
  • Java中indexOf()的用法
  • 一文搞懂AOP 通俗易懂
  • NTFS(微软专用文件系统)
  • vault-服务器密码/证书管理工具
  • Content-type的几种常见类型及php://input的使用
  • STM32之RCC(1)
  • ASP是什么?
  • 爬虫解析——Xpath的安装及使用(五)
  • OpenCore 黑苹果安装教程
  • sonar小白式入门
  • 深度学习简介与MLP多层感知机
  • Linux命令200例:find用来查找文件和目录,不可错过的15个例子
  • AcWing 算法基础课笔记 1.基础算法
  • thmeleaf模板引擎使用总结
  • 这篇文章带你认识一款优秀国产云原生数据库 ,它就是《阿里 PolarDB》数据库
  • MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
  • HINT的30个用法
  • ARP协议详解:了解数据包转发与映射机制背后的原理
  • Source Insight 4.0使用和解决问题
  • 神经网络模型训练中的相关概念:Epoch,Batch,Batch size,Iteration