学习用户权限管理,之前先了解组的概念:
组就是一个逻辑概念。逻辑上将多个用户捆绑成一个组,当我们操作组的时候就相当于在操作组下的所有用户。
组的信息存放在那里?
/etc/group
/etc/gshadow
查看用户属于哪个组
groups username
一.组的使用,组的创建、删除、修改 groupadd groupdel groupmod
组的分类:
基本组:创建时指定组,就叫基本组 (只能有1个)
私有组:创建时没有指定组,默认创建与用户同名的组 (只有有1个)
附加组:对于用户来说,可以有N多个。 (可以多个)
注意:
1.首先得有组。
2.再进行加入。
1.使用groupadd命令新增组,
groupadd [-g GID] groupname
#创建基本组, 不指定gid
[root@bgx ~]# groupadd no_gid
#创建基本组, 指定gid为5555
[root@bgx ~]# groupadd - g 5555 yes_gid
#创建系统组,gid从201-999
[root@bgx ~]# groupadd -r sys_gid
2.使用groupmod命令修改组
# -g 修改组gid
[root@bgx ~]# groupmod -g 1111 no_gid
#-n 修改组名称
[root@oldboy ~]# groupmod yes_gid -n active_gid
----------------------------------------------------------------
3.groupdel删除组。
**
如果要删除基本组,需要先删除基本组中的用户才可以删除该组。
[root@oldboy ~]# useradd ttboy -g active_gid
[root@oldboy ~]# useradd ggboy -G active_gid
[root@oldboy ~]# grep "active_gid" /etc/group
active_gid:x:12345:ggboy
[root@oldboy ~]# groupdel active_gid
groupdel:不能移除用户“ttboy”的主组
#移除主要的成员,就能删除该组
[root@oldboy ~]# userdel ttboy
[root@oldboy ~]# groupdel active_gid
[root@oldboy ~]# id ggboy
uid=6009(ggboy) gid=12346(ggboy) 组=12346(ggboy)
就像拆迁一样,必须将主要人员都清理完毕,否则就不能拆房子 (强拆-->国家不允许)
主要用户 组 强拆-->系统不允许
注意:删除一个组,必须确保该组的主要成员已经移除该组,就可以正常删除。
(附加进来的成员无需考虑在内。)
二.切换用户身份
su - username属于登陆式shell,
su username属于非登陆式shell, 区别在于加载的环境变量不一样。
#su -username 登录时携带环境变量
/etc/profile.d/1.sh
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
#su username 登录时加载部分环境变量
[root@oldboy ~]# bash
/etc/profile.d/1.sh
/etc/bashrc
/root/.bashrc
#1.普通用户使用su切换root
[xuliangwei@node1 ~]$ su
密码: #输入root的密码
[root@node1 xuliangwei]# pwd
/home/xuliangwei
#2.普通用户使用su -切换到root,
会加载root的环境变量
[xuliangwei@node1 ~]$ su -
密码:
[root@node1 ~]# pwd
/root
#3.以某个用户的身份执行某个服务,使用命令su -c username
[root@bgx ~]# su - xuliangwei -c 'ifconfig'
[root@bgx ~]# su - xuliangwei -c ' ls ~ '
面如果想要进行高与自己权限的操作是就需要切换高权限用户的账号,非常不安全
那么,我们在生产环境中,如何利用普通用户的身份,获取权限呢? —————>>> sudo (你必修在有权限的组里)
1.快速配置sudo方式 [先体验一下]
[root@node1 ~]# usermod bgx -G wheel
[root@node1 ~]$ sudo tail -f /var/log/secure #sudo审计日志
—————>>> 思考:将用户提权后能干什么呢?
sudo功能预览:
1.切换普通用户
[root@bgx ~]# su - xuliangwei
2.检查普通用户能提权的命令
[xuliangwei@xuliangwei ~]$ sudo -l User xuliangwei may run the following commands on this host: (ALL) ALL
3.普通用户正常情况下是无法删除opt目录的
[xuliangwei@xuliangwei ~]$ rm -rf /opt/ rm: cannot remove `/opt: Permission denied
使用sudo提权,需要输入当前普通用户的密码确认操作。 [xuliangwei@xuliangwei ~]$ sudo rm -rf /opt 通过体验,我们先在开始给组陪住sudu
三. sudo配置方式1
oldxu oldqiang = 运维 oldli oldguo = dba
1.需要真实创建这四个用户
[root@oldboy opt]# useradd oldxu
[root@oldboy opt]# useradd oldqiang
[root@oldboy opt]# useradd oldli
[root@oldboy opt]# useradd oldguo
2,全程进入sudo 编辑配置
[root@bgx ~]# visudo
- 使用sudo定义分组
这个系统与group没什么关系(这是sudo的组,虚拟的组。写在sudo空白处就行)
User_Alias OPS = oldxu,oldqiang 定义虚拟组成员
User_Alias DBA = oldli,oldguo
- 定义可执行的命令组, 便于后续调用 复制粘贴就行
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
3.使用sudo开始分配权限
OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,STORAGE,DELEGATING,PROCESSES
DBA ALL=(ALL) SOFTWARE,PROCESSES
4.登陆对应的用户使用 sudo -l 验证权限
四, sudo配置方式2
4.1 正对个人用户授权
visudo 编辑配置sudo功能的工具。 visudo编辑配置/etc/sudoers
测试:
visudo 编辑配置sudo功能的工具。 visudo编辑配置/etc/sudoers
测试:
[root@oldboy ~]# visudo 回车
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
#添加
oldboy ALL=(ALL) /usr/sbin/useradd
让oldboy用户,在所有主机,所有角色上,拥有useradd权限。
[root@oldboy ~]# su - oldboy
下面命令添加不了用户,权限不够。
[oldboy@oldboy ~]$ useradd kkk
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
带着上方宝剑才能生效,命令前加sudo命令。
[oldboy@oldboy ~]$ sudo useradd kkk
[oldboy@oldboy ~]$ grep kkk /etc/passwd
kkk:x:1005:1013::/home/kkk:/bin/bash
测试添加gongli,并且授权添加用户和删除用户。
[root@oldboy ~]# useradd gongli
[root@oldboy ~]# echo 123456|passwd --stdin gongli
Changing password for user gongli.
passwd: all authentication tokens updated successfully.
[root@oldboy ~]# su - gongli
[gongli@oldboy ~]$ useradd xiaogongli
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
[gongli@oldboy ~]$ logout
[root@oldboy ~]# which useradd
/usr/sbin/useradd
[root@oldboy ~]# which userdel
/usr/sbin/userdel
[root@oldboy ~]# visudo
#102行
gongli ALL=(ALL) /usr/sbin/useradd, /usr/sbin/userdel
[root@oldboy ~]# grep -n gongli /etc/sudoers
102:gongli ALL=(ALL) /usr/sbin/useradd, /usr/sbin/userdel
[root@oldboy ~]# visudo -c
/etc/sudoers: parsed OK
[gongli@oldboy ~]$ sudo -l #查看自己有什么sudo权限。
User gongli may run the following commands on oldboy:
(ALL) /usr/sbin/useradd, /usr/sbin/userdel
[gongli@oldboy ~]$ sudo useradd xiaogongli
[gongli@oldboy ~]$ grep xiaogong /etc/passwd
xiaogongli:x:1008:1008::/home/xiaogongli:/bin/bash
[gongli@oldboy ~]$ userdel -r xiaogongli
userdel: Permission denied.
userdel: cannot lock /etc/passwd; try again later.
[gongli@oldboy ~]$ sudo userdel xiaogongli
[gongli@oldboy ~]$ grep xiaogong /etc/passwd
4.2 针对系统中真实的组来进行操作
oldxu oldqiang = 运维
oldli oldguo = dba
1.添加两个真实的系统组, OPS DBA
[root@www ~]# groupadd OPS
[root@www ~]# groupadd DBA
2.添加两个用户, OPS(oldxu oldqiang) DBA(oldli oldguo)
[root@oldboy ~]# usermod oldxu -G OPS
[root@oldboy ~]# usermod oldqiang -G OPS
[root@oldboy ~]# usermod oldguo -G DBA
[root@oldboy ~]# usermod oldli -G DBA
3.记得添加密码
[root@oldboy ~]# echo "1" | passwd --stdin oldxu
[root@oldboy ~]# echo "1" | passwd --stdin oldguo
[root@oldboy ~]# echo "1" | passwd --stdin oldli
[root@oldboy ~]# echo "1" | passwd --stdin oldqiang
4.在sudo中配置规则
[root@www ~]# visudo
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
%OPS ALL=(ALL) SOFTWARE
%DBA ALL=(ALL) SOFTWARE,PROCESSES
5.检查sudo是否配置有错
[root@www ~]# visudo -c
/etc/sudoers: parsed OK
6.检查oldxu,和oldguo的sudo权限
[oldguo@oldboy ~]$ sudo -l
[sudo] password for oldguo:
User oldguo may run the following commands on oldboy:
(ALL) /bin/rpm, /usr/bin/yum, /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
[oldxu@oldboy ~]$ sudo -l
[sudo] password for oldxu:
User oldxu may run the following commands on oldboy:
(ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum, /sbin/service, /usr/bin/systemctl start,
/bin/mount, /bin/umount, /bin/chown, /bin/chmod, /bin/chgrp, /bin/nice, /bin/kill,
/usr/bin/kill, /usr/bin/killall
PS:
只要我们能使用sudo操作 VIm/ rm /su - 命令就能绕过root。 所以sudo,并不能完全的解决所有的权限问题,仅仅是相对的。
(需要有一个操作审计平台,来监督每个人的操作。 jumpserver )