【摘要】

生产环境中为了系统的安全性,Linux主机的root权限是只能管理器使用,普通用户不具有root权限,但是可以通过sudo获取root权限执行一些操作。

一、知识要点

  1. wheel组

在Linux中wheel组就类似于一个管理员的组。

通常在LUNIX下,即使我们有系统管理员root的权限,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。

但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户--这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户,但如果不对一些相关的配置文件进行配置,这个管理员组内的用户与普通用户也没什么区别--就像警察下班后,没有带枪、穿这便衣和普通人(用户)一样,虽然他的的确确是警察。根据应用的实例不同应用wheel组的方法也不同。这里对于服务器来说,我们希望的是剥夺被加入到wheel组用户以外的普通用户通过su命令来登录为root的机会(只有属于wheel组的用户才可以用su登录为root)。这样就进一步增强了系统的安全性。具体步骤如下:

1)修改 /etc/pam.d/su 文件

找到“#auth required /lib/security/$ISA/pam_wheel.so use_uid ”这一行,将行首的“#”去掉。

2)修改 /etc/login.defs 文件,

在最后一行增加“SU_WHEEL_ONLY yes”语句。

然后,用“usermod -G wheel 用户名”将一个用户添加到wheel组中。

然后,用刚刚被添加到wheel组的用户登录,并执行su命令登录为root用户…这时,输入了正确的root密码可以正常的登录为root用户。但是,如果换成一个不属于wheel组的用户时,执行了su命令后,即使输入了

正确的root密码,也无法登录为root用户--普通用户登录为root用户的权限被完全剥夺了(会收到“密码错误”的提示)。这样无疑提高了系统的安全性

(以上步骤基于CentOS,并适用于Fedora Core和RHEL。。。而且,我试着回忆以前的操作,印象中FreeBSD好像也一样。)

  1. sudo提权原理

在Linux中,有时为了让普通用户获得root的执行权限,除了之前讲过的su -永久提权方法,还有一种常用的方法,就是sudo。因为普通用户每次使用su -方法,都需要输入root的密码,不是非常方便,而sudo的好处是可以通过组的方式批量赋予普通用户权限。

sudo的工作过程如下:

(1)当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限

(2)确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认

(3)若密码输入成功,则开始执行sudo后续的命令

二、配置sudo提权

  • 配置方式
visudo 	            编辑sudo配置文件
vi /etc/sudoers 授权文件

1、为sudo机制启用日志记录,以便跟踪sudo执行操作

#visudo
%wheel ALL=(ALL) ALL,!/bin/su ,!/usr/bin/passwd #不包含/bin/su
Defaults logfile="/var/log/sudo"

2.实现test用户sudo授权

#visudo
User_Alias USERADMINS=test
Runas_Alias OP=root
Cmnd_Alias USERCMD=/usr/bin/cat,/usr/sbin/useradd,/usr/bin/more
USERADMINS ALL=(OP) USERCMD
Defaults logfile=/var/log/sudo.log

注意:

配置文件中可以通过定义别名的方式定义主机别名、用户别名、命令别名以及目的用户别名。

Host_Alias  定义主机别名;

User_Alias  用户别名,别名成员可以是用户,用户组(前面要加%号)

Runas_Alias  用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户;

Cmnd_Alias  定义命令别名;

  1. yunwei用户sudo授权
#visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yunwei ALL=(root) NOPASSWD:ALL,!/sbin/shutdown,!/sbin/init,!/bin/rm -rf /

解释说明:

1)第一个字段yunwei指定的是用户:可以是用户名,也可以是别名。每个用户设置一行,多个用户设置多行,也可以将多个用户设置成一个别名后再进行设置。

2)第二个字段ALL指定的是用户所在的主机:可以是ip,也可以是主机名,表示该sudo设置只在该主机上生效,ALL表示在所有主机上都生效!限制的一般都是本机,也就是限制使用这个文件的主机;一般都指定为"ALL"表示所有的主机,不管文件拷到那里都可以用。比如:10.1.1.1=...则表示只在当前主机生效。

3)第三个字段(root)括号里指定的也是用户:指定以什么用户身份执行sudo,即使用sudo后可以享有所有root账号下的权限。如果要排除个别用户,可以在括号内设置,比如ALL=(ALL,!oracle,!pos)。

4)第四个字段ALL指定的是执行的命令:即使用sudo后可以执行所有的命令。除了关机和删除根内容以外;也可以设置别名。NOPASSWD: ALL表示使用sudo的不需要输入密码。

5)也可以授权给一个用户组

%admin ALL=(ALL) ALL 表示admin组里的所有成员可以在任何主机上以任何用户身份执行任何命令

三、普通用户加入wheel,有sudo权限

1、创建用户并加入wheel组

useradd  opsadmin
usermod -aG wheel opsadmin
grep wheel /etc/group

2、授权普通用户登录ssh权限

vim /etc/ssh/sshd_config

AllowGroups wheel
Allowusers opsadmin systemctl restart sshd
echo 123 | passwd --stdin opsadmin

3、sudo配置

# visudo

%wheel  ALL=(ALL)       ALL,!/usr/bin/chattr,!/usr/bin/passwd,!/usr/sbin/visudo,!/usr/sbin/useradd,!/usr/sbin/adduser,!/usr/sbin/userdel,!/usr/sbin/deluser

Defaults     logfile=/var/log/sudo.log

四、参考

https://blog.csdn.net/cyx1834265118/article/details/107618223

https://blog.csdn.net/cbbbc/article/details/51712797

https://blog.csdn.net/besidemyself/article/details/7382780

Linux之sudo的更多相关文章

  1. Linux中sudo配置

    Linux下的sudo及其配置文件/etc/sudoers的详细配置. 1.sudo介绍 sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的ro ...

  2. linux 使用sudo开放普通用户权限

    整理一下以前写的东东,刚才又忘了- ---------------------------------------------------------------------------------- ...

  3. linux su,sudo命令

    linux su 命令 建议大家切换用户的时候 使用 su - root 这样,否则可能发现某些命令执行不了 关于su .su - 及 sudo的区别 请往下看 1.命令作用 su的作用是变更为其它使 ...

  4. Linux 中 sudo、su命令

    sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认为一次时长15分钟.su : 切换到某某用户模式,提 ...

  5. Linux scp sudo

    command line - scp to remote server with sudo - Super Userhttps://superuser.com/questions/138893/scp ...

  6. linux 创建sudo账号.md

    内容来源自网络 方案一 root登录 ssh root@server_ip_address 新增用户 adduser username 设置密码 passwd username 输入两次密码 修改帐户 ...

  7. linux下sudo命令

    [userld@redhat2 root]$ sudo ls We trust you have received the usual lecture from the local System Ad ...

  8. Linux 系统sudo命令

    Linux系统中有许多的系统命令和服务为了安全性考虑,因此只有root超级用户才可以去使用.如果普通用户需要做此类操作,则可以使用su - 命令(减号(-)指完全切换到新的用户,即把环境变量信息也变更 ...

  9. 【Linux】sudo用户权限管理

    权力下放 一.权力分配- sudo Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的"权力",让 他们执行一些只有超级用户或其他特 ...

  10. linux设置sudo不要密码

    linux下,普通用户,sudo时需要密码 改成没密码, vi /etc/sudoers 在 root ALL=(ALL) ALL后加一行 sysusr ALL=(ALL) NOPASSWD: ALL ...

随机推荐

  1. 如何实现十亿级离线 CSV 导入 Nebula Graph

    本文首发于 Nebula Graph Community 公众号 本次实践是基于业务需求及后续扩展,通过技术选型确定了 Nebula Graph 图数据库,首先需要验证 Nebula Graph 数据 ...

  2. Nebula Graph|信息图谱在携程酒店的应用

    本文首发于 Nebula Graph Community 公众号 对于用户的每一次查询,都能根据其意图做到相应的场景和产品的匹配",是携程酒店技术团队的目标,但实现这个目标他们遇到了三大问题 ...

  3. C++ STL容器 set类型

    C++ STL容器 set类型 set是C++引入的二叉树数据结构 特点: 自动将元素排序 插入和删除查找logn 必须元素支持严格的弱顺序 不能改变元素的值 代码 using Group = std ...

  4. python 打包 exe文件

    操作步骤: 先安装pyinstaller,在终端中输入pip install pyinstaller即可. 打包程序: pyinstaller --console --onefile 7.py 在di ...

  5. Advanced .Net Debugging 3:基本调试任务(对象检查:内存、值类型、引用类型、数组和异常的转储)

    一.介绍 这是我的<Advanced .Net Debugging>这个系列的第四篇文章.今天这篇文章的标题虽然叫做"基本调试任务",但是这章的内容还是挺多的.由于内容 ...

  6. Chrome Audio Capture - 录音插件 功能很简单,就是点击录音 文本转语音用

    Chrome Audio Capture - 录音插件 功能很简单,就是点击录音 文本转语音用

  7. 2023中山市第三届香山杯网络安全大赛初赛wp

    序 被带飞了 PWN move 先往变量 sskd 写入 0x20 字节,往第二个输入点输入 0x12345678 即可进入到第三个输入点,存在 0x8 字节的溢出.思路是在第一个输入点布置 rop ...

  8. WINDOWS.H already included. MFC apps must not #include Windows.h

    做C++.C#和C++/CLI的混合编程有一段时间了,填了不少的坑. 今天又遇到一错误,想着挺容易就解决,估计是大脑疲惫,折腾许久才找到原因. 错误: 错误 C1189 #error: WINDOWS ...

  9. JS(数组)

    一 数组的概念 问:之前学习的数据类型,只能存储一个值.如果我们想存储班级中所有学生的姓名,那么该如何存储呢?答:可以使用数组(Array).数组可以把一组相关的数据一起存放,并提供方便的访问(获取) ...

  10. 在 Google Colab 中使用 JuiceFS

    Google Colaboratory(Colab)是一个由 Google 提供的云端 Jupyter 编程笔记本,直接通过浏览器即可进行 Python 编程.Colab 充分利用谷歌的闲置云计算资源 ...