第十三章 用户组与提权

1.组的基本管理
[root@rlb ~]# head -2 /etc/group
root❌0:
bin❌1:bin,daemon

// /etc/group由':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组的名称
2.组的密码(存在/etc/gshadow)
3.组GID信息
4.仅显示附加成员,基本成员不显示

[root@rlb ~]# head -2 /etc/gshadow
root:::
bin:::bin,daemon

// /etc/gshadow由 ':' 分割, 分割为4个字段,每个字段的具体含义如下:
字段名称
1.组名称
2.组密码	!:没有密码
3.组管理员
4.仅显示附加成员,基本成员不显示

组的分类
1.基本组
2.附加组

2.shell的分类
1.登录式shell
2.非登录式shell
3.交互式shell
4.非交互式shell

3.环境变量加载顺序

1)登录式shell
/etc/profile			age=10
/etc/profile.d/*.sh		age=11
~/.bash_profile 		age=12
~/.bashrc				age=13
/etc/bashrc				age=14

2)非登录式shell
.bashrc
/etc/bashrc
/etc/profile.d/*.sh

如果有需求,所有用户都需要加载的环境变量,和登录式shell 非登录式shell都支持,把环境变量放在:
/etc/bashrc
/etc/profile.d/*.sh

总结:
1.登录式shell,会加载5个地方的环境变量
2.非登录式shell,会加载3个地方的环境变量
2.如果环境变量中配置冲突,最后一个加载的会把之前的冲突的配置覆盖

4.切换用户
su -

5.用户提权
1)sudo
-l:查看sudo的权限
usermod oldboy1 -G wheel

2)sudo配置免密码
	#1.普通用户执行sudo不需要输入密码配置
	[root@rlb ~]# visudo
	rlb ALL=(ALL) /bin/rm, /bin/cp  #默认
	rlb   ALL=(ALL)  NOPASSWD:/bin/rm, /bin/cp  #修改后
	
	#2.默认普通用户无权删除
	[rlb@rlb ~]$ rm -f /root/002
	rm: cannot remove `/root/002': Permission denied
	
	#3.验证sudo免密码执行权限
	[rlb@rlb ~]$ sudo rm -f /root/002

3)sudo配置组
	//如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置

	%rlb  ALL=(ALL)     NOPASSWD:/bin/rm, /bin/cp  #新增组
	//group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。
	
	//创建用户加入该组
	[root@rlb ~]# groupadd rlb
	[root@rlb ~]# useradd rlb1 -g rlb
	[root@rlb ~]# useradd rlb2 -g rlb
	
	//root用户建立目录
	[root@rlb ~]# mkdir /root/rlb_sudo
	
	//切换用户并删除测试
	[root@rlb ~]# su - rlb1
	[rlb1@rlb ~]$ rm -rf /root/rlb_sudo
	rm: cannot remove `/root/rlb_sudo': Permission denied
	
	//使用sudo
	[rlb1@rlb ~]$ sudo rm -rf /root/rlb_sudo

6.sudo企业案例
1)优化ssh禁止root用户登录
[root@oldboyedu ~]# vim /etc/ssh/sshd_config
修改禁止root用户登录
原来:
#PermitRootLogin yes
修改成:
PermitRootLogin no

修改ssh的端口
原来:
#Port 22
修改成:
Port 52013

2)重启ssh服务
[root@oldboyedu ~]# systemctl restart sshd

3)关闭防火墙
[root@oldboyedu ~]# systemctl stop firewalld

4)visudo
User_Alias USER_SU = rlb1,rlb2,rlb
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD:SU

深入理解 sudo 与 su 之间的区别
两个命令的最大区别是:
sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。
另外一个区别是其默认行为。
sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,
同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。

Linux su 命令
su 命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。
换句话说,这个工具可以让你在不登出当前用户的情况下登录为另外一个用户。
su 命令经常被用于切换到超级用户或 root 用户(因为在命令行下工作,经常需要 root 权限),
但是 - 正如前面所提到的 - su 命令也可以用于切换到任意非 root 用户。

如何使用 su 命令切换到 root 用户,如下只需在终端直接输入su即可:
su
不带命令行参数的 su 命令
如上,su 命令要求输入的密码是 root 用户的密码。所以,一般 su 命令需要输入目标用户的密码。
在输入正确的密码之后,su 命令会在终端的当前会话中打开一个子会话。

su -
还有一种方法可以切换到 root 用户:运行 su - 命令
su - 命令
那么,su 命令与 su - 命令之间有什么区别呢?
前者在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,
而后者则是创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),
相当于使用 root 用户正常登录(从登录屏幕登录)。
sudo vs. su
现在,我们已经讨论了关于 su 命令的基础知识,是时候来探讨一下 sudo 和 su 命令之间的区别了。

关于密码
两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。
很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。
在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。
此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,
然后再告知所有其他用户新的 root 密码。
而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 sudo 命令要求输入的是其他用户自己的密码,
所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。

默认行为
两个命令之间的另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。
因此,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,
于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。
关于为什么不鼓励以 root 用户身份进行工作的详细内容,请参考这里[3]。

日志记录
尽管 sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,
但是它们会使用 sudoer所配置的用户名来记录是谁执行命令。
而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。

灵活性
sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。
换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。

sudo su
大概是因为使用 su 命令或直接以 root 用户身份登录有风险,所以,
一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。
鼓励用户在需要 root 权限时使用 sudo 命令。
然而,您还是可以成功执行 su 命令,而不用输入 root 用户的密码。
运行以下命令:
sudo su
由于你使用 sudo 运行命令,你只需要输入当前用户的密码。所以,一旦完成操作,
su 命令将会以 root 用户身份运行,这意味着它不会再要求输入任何密码。
PS:如果你想在系统中启用 root 用户帐户(强烈反对,因为你可以使用 sudo 命令或 sudo su 命令),
你必须手动设置 root 用户密码,可以使用以下命令:
sudo passwd root

posted @ 2019-10-24 21:04  lianbingrong  阅读(133)  评论(0编辑  收藏  举报