一.学习的内容
1、su命令
su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户:
![](https://i-blog.csdnimg.cn/blog_migrate/fd36dbb54a00b69f8aab7167da967453.png)
上面的su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。
另外,当从root管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成root管理员就需要进行密码验证了。
![](https://i-blog.csdnimg.cn/blog_migrate/de9f027e247de993c9d69616a887c1ac.png)
尽管像上面这样使用su命令后,普通用户可以完全切换到root管理员的身份来完成相应工作,但这将暴露root管理员的密码,从而增大了系统密码被黑客获取的概率;这并不是最安全的方案。
接下来将介绍如何使用sudo命令把特定命令的执行权限赋予指定用户,这样既可保证普通用户能够完成特定的工作,也可以避免泄露root管理员密码。我们要做的就是合理配置sudo服务,以便兼顾系统的安全性和用户的便捷性。
2、sudo服务
sudo命令用于给普通用户提供额外的权限。命令格式:sudo [参数] 用户名
使用 sudo 命令可以给普通用户提供额外的权限来完成原本只有root管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限(/etc/sudoers),以及可以在验证密码后的一段时间无须让用户再次验证密码。常见的sudo命令的可用参数如表3所示。
参数 | 作用 |
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
当然,如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。
visudo命令用于编辑、配置用户sudo的权限文件,语法格式为 “visudo [参数]”。
这是一条会自动调用vi编辑器来配置 /etc/sudoers 权限文件的命令,能够解决多个用户同时修改权限而导致的冲突问题。不仅如此,visudo命令还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错提醒。这要比用户直接修改文件更友好、安全、方便。
使用visudo命令配置权限文件时,其操作方法与Vim编辑器中用到的方法完全一致,因此在编写完成后记得在末行模式下保存并退出。在配置权限文件时,按照下面的格式在第101行(大约)填写上指定的信息。
谁可以使用 允许使用的主机 = (以谁的身份) 可执行命令的列表
谁可以使用:稍后要为哪位用户进行命令授权。
允许使用的主机:可以填写ALL表示不限制来源的主机,亦可填写如192.168.10.0/24这样的网段限制来源地址,使得只有从允许网段登录时才能使用sudo命令。
以谁的身份:可以填写ALL表示系统最高权限,也可以是另外一位用户的名字。
可执行命令的列表:可以填写ALL表示不限制命令,亦可填写如/usr/bin/cat这样的文件名称来限制命令列表,多个命令文件之间用逗号(,)间隔。
在Linux系统中配置服务文件时,虽然没有硬性规定,但从经验来讲新增参数的位置不建议太靠上,以免我们新填写的参数在执行时失败,导致一些必要的服务功能没有成功加载。一般建议在配置文件中找一下相似的参数,然后在相邻位置进行新的修改,或者在文件的中下部位置进行添加后修改。
![](https://i-blog.csdnimg.cn/blog_migrate/a5550f96ca67d4d5a722b8f1ca44cbcf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9505a830e927825771b8036d9753b16e.png)
在填写完毕后记得要先保存再退出,然后切换至指定的普通用户身份,此时就可以用sudo -l命令查看所有可执行的命令了(在下面的命令中,验证的是普通用户的密码,而不是root管理员的密码):
![](https://i-blog.csdnimg.cn/blog_migrate/ec0e46718c5ec650edde8c2cea099ce3.png)
作为一名普通用户,是肯定不能看到root管理员的家目录(/root)中的文件信息的,但是,只需要在想执行的命令前面加上sudo命令就行了:
![](https://i-blog.csdnimg.cn/blog_migrate/dfee17413bf300c6245fe2f3a3e26165.png)
但是考虑到生产环境中不允许某个普通用户拥有整个系统中所有命令的最高执行权(这也不符合前文提到的权限赋予原则,即尽可能少地赋予权限),ALL参数就有些不合适了。因此只能赋予普通用户具体的命令以满足工作需求,这也受到了必要的权限约束。如果需要让某个用户只能使用root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统会识别不出来。这时,可以先使用 which命令 找出命令所对应的保存路径:
![](https://i-blog.csdnimg.cn/blog_migrate/d3733514e72c50b46768edd047082360.png)
然后使用visudo命令继续编辑权限文件,将原先第101行所新增的参数作如下修改,且多个命令之间用逗号(,)间隔:
![](https://i-blog.csdnimg.cn/blog_migrate/79d34fbdac358c9d3d4f5cea6f787ee8.png)
在编辑好后依然是先保存再退出。再次切换到指定的普通用户,然后尝试正常查看某个系统文件的内容,此时系统提示(Permission denied)。这时再使用sudo命令就能顺利地查看文件内容了:
![](https://i-blog.csdnimg.cn/blog_migrate/68fcf2dea719ba2582245c15f52c78fd.png)
不知大家是否发觉在每次执行sudo命令后都会要求验证一下密码。虽然这个密码就是当前登录用户的密码,但是每次执行sudo命令都要输入一次密码其实也挺麻烦的,这时可以添加NOPASSWD参数,使得用户下次再执行sudo命令时就不用密码验证:
![](https://i-blog.csdnimg.cn/blog_migrate/57aa9705482bf683240e4311593bdc12.png)
这样,当切换到普通用户后再执行命令时,就不用再频繁地验证密码了。
![](https://i-blog.csdnimg.cn/blog_migrate/8dedc55ad5a5588e1ea6bbbea28e179e.png)
请仔细留意上面的用户身份变换,visudo命令只有root管理员才可以执行,普通用户在使用时会提示权限不足。