Linux之sudo
【摘要】
生产环境中为了系统的安全性,Linux主机的root权限是只能管理器使用,普通用户不具有root权限,但是可以通过sudo获取root权限执行一些操作。
一、知识要点
- 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好像也一样。)
- 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 定义命令别名;
- 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的更多相关文章
- Linux中sudo配置
Linux下的sudo及其配置文件/etc/sudoers的详细配置. 1.sudo介绍 sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的ro ...
- linux 使用sudo开放普通用户权限
整理一下以前写的东东,刚才又忘了- ---------------------------------------------------------------------------------- ...
- linux su,sudo命令
linux su 命令 建议大家切换用户的时候 使用 su - root 这样,否则可能发现某些命令执行不了 关于su .su - 及 sudo的区别 请往下看 1.命令作用 su的作用是变更为其它使 ...
- Linux 中 sudo、su命令
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认为一次时长15分钟.su : 切换到某某用户模式,提 ...
- Linux scp sudo
command line - scp to remote server with sudo - Super Userhttps://superuser.com/questions/138893/scp ...
- linux 创建sudo账号.md
内容来源自网络 方案一 root登录 ssh root@server_ip_address 新增用户 adduser username 设置密码 passwd username 输入两次密码 修改帐户 ...
- linux下sudo命令
[userld@redhat2 root]$ sudo ls We trust you have received the usual lecture from the local System Ad ...
- Linux 系统sudo命令
Linux系统中有许多的系统命令和服务为了安全性考虑,因此只有root超级用户才可以去使用.如果普通用户需要做此类操作,则可以使用su - 命令(减号(-)指完全切换到新的用户,即把环境变量信息也变更 ...
- 【Linux】sudo用户权限管理
权力下放 一.权力分配- sudo Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的"权力",让 他们执行一些只有超级用户或其他特 ...
- linux设置sudo不要密码
linux下,普通用户,sudo时需要密码 改成没密码, vi /etc/sudoers 在 root ALL=(ALL) ALL后加一行 sysusr ALL=(ALL) NOPASSWD: ALL ...
随机推荐
- Langchain 介绍与入门
官方介绍 LangChain 是一个利用LLM开发应用程序的框架.它让应用程序具备: 上下文感知能力:将LLM连接到上下文源(提示说明.少量示例.用以形成其响应的内容等) 推理:依靠LLM进行推理(例 ...
- Java 求数值型数组中的最大元素 最小值 平均值 总和等 要求:随机数是 两位数
1 /* 2 * 3 * 算法考查:求数值型数组中的最大元素 最小值 平均值 总和等 4 * 要求:随机数是 两位数 5 * [10,99] 6 * 公式:(int)(Math.random()*(9 ...
- 来也科技收购Mindsay背后:新旧势力交锋智能自动化备受关注
来也科技收购Mindsay背后:新旧势力交锋智能自动化备受关注 来也科技收购Mindsay背后:历程一波三折,意义非同寻常 来也科技收购Mindsay,国产RPA正式进军国际市场 收购Mindsay来 ...
- Socket编程:htons()、htonl()、ntohs()、ntohl()
前言 在计算机网络学到Socket编程的时候,自己在Linux下用C语言试验了一番,发现了这四个古怪的函数:htons().htonl().ntohs().ntohl(). 查阅资料得知,这是涉及到网 ...
- Vue3学习(二十三)- 保存文档内容正常显示
写在前面 情人节已经接近尾声了,虽然跟我没什么关系,但是我还是很渴望,能遇到一个良人相伴一生. 现在时间: 内心异常平静,相对吵闹我更喜欢安静的晚上,没人打扰,enjoy自己独处的时间! 保存内容显示 ...
- C++串口通讯解决方案
这篇文章只是笔记性质,没有实际的原创内容,主要是做一下方案的备份. 串口通讯使用开源的 CSerialPort 类,我使用的是Windows版本分支: CSerialPort 跨平台 CSerialP ...
- AAC编解码移植之基本简介
一 概念 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术.由Fraunhofer IIS.Dolby Laborato ...
- python中bytes转int的实例(bytearray to short int in python)
python很多数据都是bytes格式的,经常需要转换成int或者short,笔者实际项目有需求,这里就做个笔记吧. 实例一: bytes转short:(无符号类型) import struct ba ...
- python json实例解析
python和json python这个语言的流行程度不用我说了,估计大家都知道吧.在字符串处理领域,json真是神一样的存在.最近一个项目中用到了,才感觉到它的威力.感觉非常有必要做一个记录和总 ...
- SpringBoot+内置Tomcat配置,参数调优,最大并发量,最大连接数
最近在研究这块的信息,记录下一些大神的文章: SpringBoot 最大连接数及最大并发数是多少???https://blog.csdn.net/weixin_44421461/article/det ...