首页 > 系统相关 >Linux之sudo

Linux之sudo

时间:2024-02-12 17:55:06浏览次数:33  
标签:wheel sudo 用户 usr Linux 普通用户 root

【摘要】

生产环境中为了系统的安全性,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

标签:wheel,sudo,用户,usr,Linux,普通用户,root
From: https://www.cnblogs.com/OpenSourceSite/p/18013998

相关文章

  • Linux 中 使用awk数组根据基因的PAV矩阵计算基因的存在频率
     001、测试数据[b20223040323@admin1test]$lsx_gather_pav.txt[b20223040323@admin1test]$catx_gather_pav.txt##测试数据;每一行是一个个体;每一列是一个基因;矩阵中的0表示基因在这个个体中缺失,1表示基因在这个个体中存在01111......
  • Linux下指定so动态库的加载路径的5种方法
    搜索的先后顺序是:编译目标代码时指定的动态库搜索路径;环境变量LD_LIBRARY_PATH指定的动态库搜索路径;配置文件/etc/ld.so.conf中指定的动态库搜索路径;默认的动态库搜索路径/lib;默认的动态库搜索路径/usr/lib。将库文件放置在对应的路径中,运行时就可以搜索到了。例1:通过gcc......
  • Linux之parted
    【摘要】parted用于对磁盘(或RAID磁盘)进行分区及管理,与fdisk分区工具相比,支持2TB以上的磁盘分区,并且允许调整分区的大小。使用它你可以创建、清除、调整、移动和复制ext2、ext3、linux-swap、FAT、FAT32和reiserfs分区;也能创建、调整和移动苹果系统的HFS分区;还能检测jfs、ntfs......
  • Linux Bash Shell 脚本入门(2)——GNU
    ​LinuxBashShell脚本入门(2)——GNU目录LinuxBashShell脚本入门(2)——GNUGNU与LinuxGNUGNU的组成ShellGNOME桌面环境XWindow软件GNOME可点击内容,大部分来自维基百科,可以点击了解详情。GNU与LinuxGNUGNU操作系统起源于GNU计划,由理查德·斯托曼在麻省理工学院人工智能......
  • [转帖]linux参数之max_map_count
    https://www.cnblogs.com/duanxz/p/3567068.html “Thisfilecontainsthemaximumnumberofmemorymapareasaprocessmayhave.Memorymapareasareusedasaside-effectofcallingmalloc,directlybymmapandmprotect,andalsowhenloadingsharedlibr......
  • Linux之bond 和 team
    一、bond和team区别bond只能是双网卡绑定,team不需要手动加载相应内核模块和有更强的拓展性,最高可以绑定8块网卡。二、模式bond模式(1)mode=0(balance-rr)(平衡轮循环策略)链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。交换机需要配置静态链路聚合。特......
  • Linux Bash Shell 脚本入门(1)——Linux内核功能介绍
    ​LinuxBashShell脚本入门(1)——Linux内核功能介绍目录LinuxBashShell脚本入门(1)——Linux内核功能介绍前言Linux初探Linux系统架构linux内核系统内存管理软件程序管理硬件设备管理文件管理系统前言本文为《Linux命令行与shell脚本编程大全》第四版的读书笔记,突发奇想想......
  • Linux 中awk批量输出列
     001、方法1双文件[root@PC1test1]#lsa.txtcols.list[root@PC1test1]#catcols.list##列1358[root@PC1test1]#cata.txt##测试文件00100200300400500600700800901001101201301401501601701801902002102202302402......
  • Linux 中 字符串 与shell数组的转换
     001、字符串转换为shell数组[root@PC1test1]#str1="aabb100200500"##生成测试字符串[root@PC1test1]#echo$str1aabb100200500[root@PC1test1]#ay1=($str1)##字符串转换为数组[root@PC1test1]#echo${ay1[0]}......
  • archlinux flutter开发踩坑
    archlinuxflutter开发踩坑archlinux是个好东西,但是开发flutter坑不少。2023年5月我配置了flutter,后来用得不多,23年11月还尝试过但是失败,最近又要使用,就来解决下。20230210今天需要写一个手机app,突然发现构建不出来了,报错>Failedtocreateparentdirectory'/opt/flutter......