内容前导:
我们平时在Linux实验环境中,为了避免系统的一些安全限制,大部分情况下都是使用超级管理员账号root进行实验操作的。但在生产环境中,往往不能直接使用root账户去执行一切的操作,因为这会引起不当的安全问题。但是使用普通账户的话又会有很多的权限束缚,从而影响工作的进展。
那么今天我想给大家分享一下su命令及sudo服务,先给大家简单介绍一下:su命令可以解决切换用户身份的需求,可以在当前用户不退出的情况下,顺利地切换到其他用户;sudo命令可以给普通用户提供额外的权限完成只有root用户可以完成的操作。
学习内容:
1.切换用户登录格式:su - 用户名,没错,su命令及用户名之间有一个减号“-”,这里强烈建议大家在切换账号的时候加上,这意味这完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不保留原始信息。
2.另外,从root账户切换到其他账户是不需要输入密码的;但是从其他普通账户切换到root账户需要输入密码。
3.使用sudo命令可以给普通用户提供额外的权限来完成原本只有root管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限,以及可以在验证密码后的一段时间无须让用户再次验证密码。常见的参数如表所示。
参数 | 作用 |
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u | 以指定的用户身份执行命令 |
-k | 清空密码有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
4.visudo命令用于编辑、配置用户sudo的权限文件,语法格式为“visudo 【参数】”,这是一条会自动调用vi编辑器来配置/etc/sudoers权限文件的命令,能够解决多个用户同时修改权限而导致的冲突问题。不仅如此,visudo 命令还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错提醒。
实验输出:
实验一:使用su命令切换用户
[lisi@client2 ~]$ su - root
Password: 此处输入用户密码
[root@client2 ~]#
实验二:使用visudo命令配置lisi这个用户的sudo权限文件,在配置权限文件时,按照如下格式进行配置。
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表
step1:
[root@client2 ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lisi ALL=(ALL) ALL
step2:切换到普通用户,访问/root目录
[lisi@client2 ~]$ ls /root
ls: cannot open directory '/root': Permission denied
[lisi@client2 ~]$ sudo ls /root
[sudo] password for lisi:
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures sshwl Videos
Desktop Downloads Music Public Templates
可以看到,作为一名普通用户,是看不到/root目录的,但是只需要在想执行的命令前加上sudo即可。
实验三:考虑到生产环境中是不可能给普通用户开放所用的权限的,因此我们需要授权符合需要的权限即可,即最小授权原则 。例如我们普通用户lisi只能执行reboot命令,我们需要先用whereis命令查找reboot命令的绝对路径,然后写入sudo配置文件中。
//在没有配置前,lisi是无法执行reboot命令的。
[lisi@client2 ~]$ sudo reboot
[sudo] password for lisi:
Sorry, try again.
[sudo] password for lisi:
lisi is not in the sudoers file. This incident will be reported.
[root@client2 ~]# whereis reboot //先找出reboot的绝对路径
reboot: /usr/sbin/reboot /usr/share/man/man2/reboot.2.gz /usr/share/man/man8/reboot.8.gz
[root@client2 ~]# visudo //配置sudo配置文件过程
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lisi ALL=(ALL) /usr/sbin/reboot
[lisi@client2 ~]$ sudo reboot //lisi用户执行重启命令成功
[sudo] password for lisi:
Connection to client2 closed by remote host.
Connection to client2 closed
实验四:在每次执行sudo命令都要输密码,会不会太麻烦了,这是可以添加NOPASSWD参数,这样用户再下次执行时就不用密码验证了。
[root@client2 ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lisi ALL=(ALL) NOPASSWD:/usr/sbin/reboot
注意:
- 请大家注意visudo命令只有root管理员才可以执行,普通用户使用时权限不足,无法修改sudo配置文件。
- 如果只允许普通用户执行指定的命令,切记再配置文件里协商改命令的绝对路径,绝对路径用whereis查找。