sudo权限管理
问题:请问Linux系统中默认情况下有几个超级管理员用户?一个管理员管理系统方便吗?
答:默认只有root这一个管理员账号。一个账号管理系统很不方便。

问题:如何在linux系统中指定多个管理员账号?
答:方案一:用普通用户账号远程登录到服务器,然后用su - root临时切换到root账号去管理系统。但是普通用户切换到root用户需要知道root的密码,这样不安全。
方案二:用sudo功能,通过sudo程序提供的visudo命令来指定某些普通用户能够以root身份执行系统管理的某些命令。其实visudo修改的是/etc/sudoers配置文件。用rpm -ql sudo查询sudo软件安装后的所有文件名列表。用rpm -qc sudo查询sudo软件的所有配置文件名列表。

练习:创建普通用户ak,设置登录密码为01,用visudo设置让ak用户能以root身份执行任何命令。
实施方案:
useradd ak
echo 01 | passwd --stdin ak
visudo 执行如下操作
root ALL=(ALL) ALL 找到此行,ALL是所有。
ak ALL=(root) ALL 添加此行,让ak用户在所有地方以root身份执行所有命令。
#格式说明:who where=(Whom) command 理解为:谁 在哪里=(以谁的身份) 执行什么命令

测试sudo功能:
su - ak
useradd zk 提示“权限不够”
sudo useradd zk 用sudo功能,回车后输入ak的密码,临时让ak用户以root身份执行命令
id zk 查看zk用户的id号
sudo userdel -r zk 删除zk用户
exit 退出ak用户

sudo的特点:
1、 用sudo执行命令时,第1次必须输入普通用户的密码。输入密码后自动拥有sudo操作的入场券(票据)。
2、 密码的票据有效时间为10分钟。
3、 sudo配置文件中支持别名功能,包括命令别名、用户别名、主机别名这些功能。

sudo的别名功能的作用:
1、用户别名:把用户按管理功能的不同,来分成不同的类别。
2、命令别名:把命令按管理功能的不同,来分成不同的类别。
3、主机别名:把主机按管理功能的不同,来分成不同的类别。

sudo别名的定义
Cmnd_Alias命令别名
查看sudo的命令别名:grep -n Cmnd /etc/sudoers
说明:grep 中的-n是显示行号。

命令别名定义的语句: Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping
格式说明:Cmnd_Alias 别名=/路径/命令,/路径/命令, ...
用途:可以将不同功能的命令定义成不同的别名,命令按功能可分为用户管理、SOFTWARE软件管理、permissions权限管理、磁盘分区管理(storage存储管理)、进程管理(process)、services服务管理、networking网络管理等,然后将命令别名授权给不同管理权限的用户。
问:如何查询某个命令的路径? 答:which 命令,例如which useradd

User_Alias命令别名
查看sudo的用户别名:grep -n User /etc/sudoers
用户别名定义的语句:User_Alias ADMINS = jsmith, mikem
用户别名定义的命令 别名=用户1,用户2,用户n
用户别名的作用:是将多个普通用户定义一别名(类似于群组),在sudo授权时采用用户别名来代表这些用户。

练习:创建普通用户ak、bk、ck,设置登录密码均为01,用visudo给这几个用户设置别名为ADMINS, 用visudo设置让这些用户都能以root身份执行任何命令。
useradd ak
useradd bk
useradd ck
echo 01 | passwd --stdin ak
echo 01 | passwd --stdin bk
echo 01 | passwd --stdin ck
visudo 在文件中对应的位置添加如下内容
User_Alias ADMINS = ak,bk,ck 添加此行,定义ADMINS为ak、bk、ck用户的别名
root ALL=(ALL) ALL 找到此行,ALL是所有。参考行号为92行。
ADMINS ALL=(root) ALL 添加此行,允许ADMINS用户在所有地方以root身份执行所有命令。

测试sudo功能:
su - bk
useradd zk
sudo useradd zk
id zk
sudo userdel -r zk
exit
参考bk用户的测试对ck用户进行测试,如果ck有权限创建、删除用户,说明ADMINS用户别名有效。

Host_Alias命令别名
查看sudo的命令别名:grep -n Host /etc/sudoers
13:# Host_Alias FILESERVERS = fs1, fs2
格式说明:Host_Alias 主机别名=主机名1,主机名2,计算机名3

sudoers配置文件中的其他选项:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 命令路径的环境变量

NOPASSWD:用sudo时免密码执行此代码后的命令。例如:
ADMINS ALL=(root) ALL,NOPASSWD:/sbin/useradd,/sbin/userdel,!/bin/cat /etc/hosts
说明:!表示取反,例如!/bin/cat /etc/hosts是不允许用sudo执行这条命令。

sudo的日志文件:
/var/log/secure:用grep sudo /var/log/secure查看文件中sudo关键键的内容。
时间 主机名 程序 用户 命令终端 工作目录 以root身份 执行的命令
Jan 3 23:10:31 node1 sudo: bk : TTY=pts/1 ; PWD=/home/bk ; USER=root ; COMMAND=/sbin/useradd zk
Jan 3 23:10:31 node1 sudo: bk : TTY=pts/1 ; PWD=/home/bk ; USER=root ; COMMAND=/sbin/useradd zk

sudo命令
功能:以别的用户的身份去执行命令,通常是让普通用户以root的身份去执行系统管理的命令。
用法:sudo [选项] 命令
选项:-l 列(list)出此用户能用sudo执行的命令
-u 用户名 :让当前用户临时以指定用户的身份执行命令。如sudo -u ak useradd user1