旨在阐述CentOS中 su和sudo命令的基本用法和区别
知识储备
1.Linux中通常不建议以root身份直接登陆,太危险了!然而以普通用户身份登陆,在某些时候又受到权限压制,su和sudo就是良好的解决方案;
2.su通常用来临时切换到某个用户身份,来执行一些指令;切换方式有完全切换、不完全切换;
3.sudo通常用来以某个用户身份来执行某些指令,执行完毕后登陆身份还是自身,即supper do!
Su命令精要
su切换方式:
(1) su -l root 完全切换:会重新读取新身份的私人配置文件,环境变量PATH等等;
(2) su root 不完全切换:不会重新读取;
正常情况下,切换到新身份后,会一直保持该身份运行着,除非使用exit命令退出新身份;
几个要点:
- 可以使用 su -c command root切换到root身份运行完指令command后自动退出root身份,这点和sudo有点类似哦,详情man su;
- 普通用户切换到任何用户都需要输入密码,只有root切换到普通用户无需密码;
- su -,su -l,su --login 都表示完全切换,会读取私人的小配置!
sudo命令精要
sudo的功能大致有:
(1)授权指定用户在指定主机上运行指定的命令『who、where、do what』
(2)详细记录用户基于sudo执行命令的相关日志信息
(3)sudo具有时效性认证:即用户第一次执行sudo会要求输入密码验证身份,这个凭据会保存一段时间,默认是5分钟,5分钟内不需要再次输入密码,“检票系统”
sudo命令:
被授权用户应该以sudo命令来运行被授权运行的命令:
su - 不加 默认是su到管理员,需要root密码
sudo [OPTIONS] COMMAND
sudo su - 无需管理员密码 哈哈,理解一下 挺有意思
-l: 查看当前用户可执行的sudo命令;
-k: 清除此前记忆下的“令牌”;
-u USERNAME COMMAND:以指定用户运行COMMAND命令;
sudo的配置文件:/etc/sudoers
前面所说,sudo可以定义哪些用户,在哪些主机上,做哪些指令。这些定义其实保存在配置文件/etc/sudoers上,建议使用专用的编辑器编辑,即visudo命令『有语法检查等功能』
sudo配置文件语法
sudoers配置文件语法很简单,如下
例如,指定普通用户centos,允许在任何主机上以root身份执行fdisk命令
但是,如果要为多个用户、不同组用户指定授权,一条条添加是否显得太过麻烦呢?尤其是当一个用户可以通过sudo执行多条command命令的时候。其实可以使用 别名的方式 来授权,具体用法如下:
例如,指定允许用户centos,用户组apache,允许在任何主机上以root身份执行fdisk,useradd系统管理命令,和wget,ifconfig等网络管理命令。那么该如何定义呢?
几个要点:
- 别名的名字,必须而且一定是大写字符串
- 别名之间可以相互嵌套,比如说User_Alias A = apache,B 这里的B是另外一个User_Alias
- 合理规划好别名,合理嵌套好别名!
- 前面提到sudo有“检票系统”,那么一个授权的命令究竟是否需要检票,是根据该命令的标签来决定的,比如下面
这意味着centos这个用户通过sudo 可以在任何主机上以root身份运行fdisk命令(需要检票,出示一次票据后默认可以维持5分钟哦),而运行wget是无需出示票据的
5. 请注意,授权的CMD1 CMD2 这些可sudo执行的命令,建议使用绝对路径!
6. 使用visudo修改后配置文件后,立即生效
练习:
1、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;
授权前:
修改sudo配置文件:
#visudo centos ALL=(root) /sbin/fdisk, /sbin/mkfs.ext4
授权后:
2、授权gentoo用户可以运行逻辑卷管理的相关命令;
和逻辑卷相关的命令有
显示相关pvs、vgs、lvs
扫描相关pvscan、vgscan、lvscan
创建相关pvcreate、vgcreate、lvcreate
编辑sudo配置文件:
#visudo Cmnd_Alias VGCMDS= /sbin/pvs, /sbin/vgs, /sbin/lvs, /sbin/pvscan, /sbin/vgscan, /sbin/lvscan, /sbin/pvcreate, /sbin/vgcreate, /sbin/lvcreate centos ALL=(root) VGCMDS
这里遇到的一些问题:
- 在定义Cmnd_Alias时,我尝试了/sbin/{vgs,lvs}的写法,发现不能识别,失败!
- 在验证的时候,总是不成功,最后发现没有清空凭据,sudo -k
- 调查发现vgs、lvcreate等等VG相关命令,其实本质都是指向/sbin/lvm的软链接,但是无需授权/sbin/lvm 也是可以执行这些VG指令的