su - run a shell with substitute user and group IDs
su -l USERNAME
su命令和su - 命令有本质的区别,前者只是切换了root身份,但shell仍然是普通用户的shell;而后者连同用户和shell环境都切换成root了。只有切换了shell环境才不会导致环境变量引用错误。
sudo: sudo这个命令设计初的主要目的是为了使某些用户具有特定的权限,从而完成其他普通用户无法实现的功能。
1、授权指定用户在指定主机上运行指定的管理命令;
2、详细记录用户基于sudo执行命令的相关日志信息;
3、“检票系统”:时效性认证;用户第一次执行sudo时会要求输入密码来验正用户身份,成功后用户会获得一个有固定存活时长的“令牌”:5分钟;
如何实现sudo的功能?我们通过授权文件/etc/sudoers
注意:仅管理员拥有编辑权限;而且不建议使用编辑器编辑;有专用的编辑工具visudo
直接visudo后面不接任何参数,会直接打开/etc/sudoers:
/etc/sudoers:
包含的内容:别名定义、授权
授权:
WHO HOST=(WHOM) COMMAND
例如:centos ALL=(root) /usr/sbin/useradd
WHO HOST=(WHOM) NOPASSWD: CMND1, CMND2
PASSWD: 标签后的所有命令在使用时都需要“检票”;
NOPASSWD: 标签后的所有命令在使用时都无需“检票”;
别名:
别名名称:必须使用全大写字符;
WHO: User_Alias
HOST: Host_Alias
WHOM: Runas_Alias
COMMAND:Cmnd_Alias
User_Alias:
User_Alias NAME = item1, item2, ...
item:
用户名:如centos
%组名:如netadmins,是为系统组;
#UID:如#500
$#GID: 如$#501
Host_Alias NAME = item1, item2, ...
ALL: 所有主机
item:
hostname
ip
network
Host_Alias 可以嵌套
例如:Host_Alias MYNET = 127.0.0.1, 172.16.0.0/16
Runas_Alias NAME = item1, item2, ...
ALL: 所有用户
Cmnd_Alias:
Cmnd_Alias NAME = item1, item2, ...
item:
命令文件路径
目录(意味授权此目录下的所有命令)
"sudoedit" (编辑sudoers文件)
sudo命令:被授权用户应该以sudo命令来运行被授权运行的命令
sudo [OPTIONS] COMMAND
-l: 查看当前用户可执行的sudo命令
-k: 清除此前记忆下的“令牌”
-u USERNAME COMMAND:以指定用户运行COMMAND命令
1、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理
- [[email protected] ~]# useradd centos
- [[email protected] ~]#echo 123 |passwd --stdin centos
- [[email protected] ~]#visudo 添加如下内容
centos ALL=(root) /sbin/fdisk, /sbin/mkfs, /sbin/mke2fs
- 使用[[email protected] ~]$ sudo -l
- 使用[[email protected] ~]$ sudo fdisk /dev/sda1命令验证
2、授权gentoo用户可以运行逻辑卷管理的相关命令
由于此题涉及的命令过多,所以此处使用Command Aliases功能。
[[email protected] ~]$ sudo pvs 验证没有问题
PV VG Fmt Attr PSize PFree
/dev/sda6 myvg lvm2 a-- 20.00g 10.00g
su&sudo