前言
我们都知道Linux系统中,超级用户root具有超级管理权限。由于权限太大,如果管理不好,就会对系统安全带来严重隐患。在工作场景中,我们只在必要时才使用超级用户root的权限。一般的临时性处理都是以普通用户的身份完成的,那么,当普通用户需要超级用户的权限时,是怎么进行切换管理工作的呢?
这就不得不提到两个重要的用户身份切换命令su和sudo。下面我们就讲解这两个命令是如何完成用户切换工作的,达到系统管理目的的?
在Linux系统中,每个文件、目录和进程,都是归属于某一个用户的,没有其用户的许可,其它的普通用户时无法操作的,root除外。root用户的特权还表现在root可以超越任何用户和用户组来对文件或目录进行读取、修改或删除(在系统正常的许可范围内);对可执行程序的执行、终止;对硬件设备的添加、创建和移动等;也可以对文件和目录进行属主和权限进行修改。
su
描述:
切换用户身份的命令
语法:
su [选项] [-c 命令] [username]
选项:
选项 | 功能作用 |
---|---|
- | 单纯使用-,如“su -”,代表使用login-shell的变量文件读取方式来登录系统;若用户名没有写,则默认代表切换为root用户 |
-l | 与-类似,但后面需要加欲切换的用户账号,也是login-shell的方式 |
-m | -m与-p是一样的,表示使用目前的环境变量设置,而不读取新用户的配置文件 |
-c | 仅进行一次命令,所以-c后面可以加上命令 |
核心作用
比如:我们以普通用户Redhat登录到系统后,当要在系统执行useradd添加用户时,会发现Redhat用户没有这个权限,这个权限只能由root权限执行。
解决办法
- 退出Redhat用户,重新以root用户登录。
- 直接在Redhat用户下,使用su命令来切换到root下进行添加用户的工作,等工作完成后再退出root用户。
毫无疑问,上面两个方法,通过su命令切换是一种比较好的办法。
注解
通过su命令可以在用户之间切换,超级权限用户root向普通或虚拟用户切换不需要密码验证,其他普通用户之间或者普通用户切换到root,都需要切换用户的密码验证。
默认只是切换身份,并没有切换环境变量,环境变量依然是普通用户的,“”切换用户身份时,用户的环境变量也切换成新用户的环境变量,所以“”不能省略,不然有些操作无法执行。
sudo
su命令的缺陷
使用su命令切换用户身份虽然简单,但是,也有一些致命的缺点:
- 普通用户必须知道root密码才可以切换到root,这样root密码就泄露了。相当于把“刀把”交给了别人。
- 使用su命令切换身份,无法对切换后的身份做精细的控制,拿到超级权限的人可以为所欲为。甚至可以改掉root密码,让真正的管理员无法再拥有root权限。
问题解决
那么,怎么来解决最高管理员不泄露root密码,而又能让普通用户拥有一定的超级权限来管理系统,并且能让超级特权可控呢?这就要引出sudo命令。
sudo精髓所在
通过sudo命令,我们可以把某些超级用户权限分类有针对性(精细),授权给指定的普通用户,并且普通用户不需要知道root密码就可以使用得到的授权(管理员真正允许的root权限)。因此,毫不夸张的说,sudo命令相对于su命令来说,在系统用户的分权管理方面进步了很多,使得集权式管理在理论上的到了保证,从而使系统的安全性方面加强了很多。
sudo:使用超级用户来执行命令,一般指的是root用户,想要使用sudo首先得在/etc/sudoers中添加该用户,先利用su - 进入root用户,接着输入vim sudo命令编写sudoers文件。
详解说明
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #root代表的用户,ALL代表主机,括号里的ALL代表以什么身份运行,最后一个ALL代表要执行的命令;
redhat ALL=ALL) /usr/sbin/useradd
%redhat ALL=(ALL) ALL # %用户组 机器=(授权使用哪个角色的权限) ALL
参数代表含义
- 用户账号:系统哪个账号可以使用sudo这个命令。默认为root用户。
- 登陆者的来源主机:这个账号由哪台主机连接到本地Linux主机。默认值root可来自任何一台网络主机。
- 可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
- 可执行的命令:这个命令最好使用绝对路径编写。默认root可以切换任何身份且进行任何命令。
ALL是关键字,代表任何身份、主机或命令。