Linux su 和 sudo 命令的常用选项、配置和日志(用户的切换和让普通用户以 root 身份执行指定的命令)

内容目录:
内容一:su 命令
1.1 什么是 su 命令
1.2 su 命令的格式
1.3 su 命令案例 
1.3.1 从普通用户切换为 root 账户身份(如果没有普通账户则需要先创建)
1.3.2 以普通身份创建文件(如果没有普通账户则需要先创建),以 root 身份重启服务

内容二: sudo 命令的语法、选项和简单使用
2.1 sudo 命令格式
2.2 sudo 命令选项
2.3 sudo 命令的简单使用
2.3.1 以 root 用户进行查看
2.3.2 指定某一个用户进行查看
2.3.3 以 root 权限执行上一条命令
2.3.4 以特定用户身份进行编辑文本

内容三:sudo 配置文件的格式和 sudo 命令免输密码的配置
3.1 sudo 程序相关文件
3.2 sudo 的用户sudo权限的格式和配置
3.2.1 sudo 的用户sudo权限的配置文件
3.2.2 sudo 配置用户权限的项配置格式
3.3 设置输入 sudo 命令时不需要输入密码
3.4 注意,只添加某一条 sudo 命令不用输入密码的方法 

内容四:单个用户的 sudo 文件配置和相应的 sudo 命令
4.1 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其执行 systemctl 命令
4.1.1 修改 /etc/sudoers 的方式
4.1.2 为 zhumingyu 授予相关脚本的执行权限,允许通过 systemctl 工具来管理系统服务
4.2 切换为 zhumingyu 用户,并验证单个用户的 sudo 执行权限
4.3 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其通过 sudo 方式添加/删除/修改除 root 以外的用户账号
4.3.1 位 zhumingyu 用户授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*
4.4 切换为 zhumingyu 用户,验证 sudo 权限
4.4.1 可以通过 sudo 方式来添加/删除/修改普通用户
4.4.2 但是不能修改 root 用户的密码

内容五:多个用户的 sudo 文件配置和相应的 sudo 命令(允许 wheel 组成员以特权执行所有命令)
5.1 wheel 组成员以特权执行所有命令的高危性
5.2 wheel 组成员以特权执行所有命令的实现(如果没有普通用户则先创建该账户)

内容六:为sudo机制启用日志记录,以便跟踪sudo执行操作
6.1 修改/etc/sudoers配置,添加日志设置
6.2 以 root(默认有所有权限)执行 sudo 操作
6.3 确认日志记录已生效

具体的内容:
内容一:su 命令
1.1 什么是 su 命令
su(Substitute User) 命令可以快速切换账户身份,普通用户切换账户身份时需要输入密码,root 使用 su 命令切换任何身份都不需要密码

1.2 su 命令的格式
# su - (账户名称)
# su - (账户名称)-c '命令'  

1.3 su 命令案例 
1.3.1 从普通用户切换为 root 账户身份(如果没有普通账户则需要先创建)
[zhumingyu@eternalcenter ~]# whoami
zhumingyu

[zhumingyu@eternalcenter ~]# su - #切换账户,默认切换为 root 账户
密码: #输入root的密码
[root@eternalcenter ~]# whoami #确认结果
root

1.3.2 以普通身份创建文件(如果没有普通账户则需要先创建),以 root 身份重启服务
[root@eternalcenter ~]# su - zhumingyu -c "touch /tmp/test.txt" #管理员切换普通用户
[root@eternalcenter~]# ll  /tmp/test.txt
[zhumingyu@eternalcenter ~]# su - -c "systemctl restart sshd" #以管理员重启服务
密码:
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
active: active (running) since 五 2019-01-19 09:59:40 CST; 1 months 5 days ago

内容二: sudo 命令的语法、选项和简单使用
2.1 sudo 命令格式
sudo(选项)(参数)

2.2 sudo 命令选项
选项  说明
-b  在后台执行指令
-h  显示帮助
-H  将HOME环境变量设为新身份的HOME环境变量
-k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l  列出目前用户可执行与无法执行的指令
-p  改变询问密码的提示符号
-s <shell>	 执行指定的shell
-u <用户>  以指定的用户作为新的身份,若不加上此参数,则预设以root作为新的身份
-v  延长密码有效期限5分钟
-V  显示版本信息

2.3 sudo 命令的简单使用
2.3.1 以 root 用户进行查看
$ sudo ls

2.3.2 指定某一个用户进行查看
# sudo -u zhumingyu ls -l

2.3.3 以 root 权限执行上一条命令
$ sudo !!

2.3.4 以特定用户身份进行编辑文本
$ sudo -u zhumingyu vi ~www/index.html #以 zhumimngyu 用户身份编辑 home 目录下www目录中的 index.html 文件

内容三:sudo 配置文件的格式和 sudo 命令免输密码的配置
3.1 sudo 程序相关文件
/etc/sudoers
/etc/init.d/sudo
/etc/pam.d/sudo
/var/lib/sudo
/usr/share/doc/sudo
/usr/share/lintian/overrides/sudo
/usr/share/bash-completion/completions/sudo
/usr/bin/sudo
/usr/lib/sudo

3.2 sudo 的用户sudo权限的格式和配置
3.2.1 sudo 的用户sudo权限的配置文件
sudo 的用户sudo权限的配置文件是 /etc/sudoers ,可以直接使用 vim 命令编辑,但建议直接使用 visudo 他可以直接判断是否有各式错误 

3.2.2 sudo 配置用户权限的项配置格式
sudo 配置用户权限的项遵循这样的格式: who where whom command ,说白了就是哪个用户在哪个主机以谁的身份执行那些命令,那么这个 where, 是指允许在那台主机 ssh 连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:
root ALL=(ALL:ALL) ALL

其中:
root 表示 root 用户。
ALL 表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。
(ALL:ALL) 是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。
ALL 表示任何命令。
那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令

3.3 设置输入 sudo 命令时不需要输入密码
执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo 时避开输入密码的交互过程
那么需要如何设置呢?其实很简单,只需要在配置行中添加 NOPASSWD: 格式如下:
zhumingyu ALL=(ALL) NOPASSWD:ALL

3.4 注意,只添加某一条 sudo 命令不用输入密码的方法 
zhumingyu ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd
表示: 用户 zhumingyu 能在所有可能出现的主机上, 提权到 root 下执行 /bin/chown , 不必输入密码; 但运行 /usr/sbin/useradd 命令时需要密码.这是因为 NOPASSWD :只影响了其后的第一个命令: 命令1

内容四:单个用户的 sudo 文件配置和相应的 sudo 命令
4.1 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其执行 systemctl 命令
4.1.1 修改 /etc/sudoers 的方式
修改 /etc/sudoers 可以直接使用 vim 编辑该文件,或使用 visudo 命令修改该文件,建议直接使用 visudo 他可以直接判断是否有各式错误

4.1.2 为 zhumingyu 授予相关脚本的执行权限,允许通过 systemctl 工具来管理系统服务
(如果没有 zhumingyu 账户可以先创建该账户)
[root@eternalcenter ~]# useradd softadm
[root@eternalcenter ~]# vim /etc/sudoers #修改文件后,需要使用 wq 强制保存
.. ..
zhumingyu  ALL=(ALL) /usr/bin/systemctl #授权 zhumingyu 以 root 身份执行 systemctl 命令( ALL 包括 root )

4.2 切换为 zhumingyu 用户,并验证单个用户的 sudo 执行权限
[root@eternalcenter ~]# su - zhumingyu
[zhumingyu@eternalcenter ~]$ sudo -l
… …
[sudo] password for zhumingyu: #输入 zhumingyu 的口令
.. ..
用户 zhumingyu 可以在该主机上运行以下命令:
    (ALL) /usr/bin/systemctl
[zhumingyu@eternalcenter ~]$ systemctl start httpd #不用 sudo 时启动服务失败
Authentication is required
.. ..
[zhumingyu@eternalcenter ~]$ sudo systemctl restart httpd #通过 sudo 启动服务成功

4.3 修改 /etc/sudoers 配置,为单个用户配置 sudo 权限,允许其通过 sudo 方式添加/删除/修改除 root 以外的用户账号
4.3.1 位 zhumingyu 用户授予用户管理相关命令的执行权限,例外程序以!符号取反,放在后面。在执行相关程序时,可以利用通配符*
[root@eternalcenter ~]# useradd zhumingyu
[root@eternalcenter ~]# vim /etc/sudoers
.. ..
zhumingyu ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwd root,/usr/sbin/user*,!/usr/sbin/user* * root

4.4 切换为 zhumingyu 用户,验证 sudo 权限
4.4.1 可以通过 sudo 方式来添加/删除/修改普通用户
[zhumingyu@eternalcenter ~]$ sudo -l
.. ..
用户 zhumingyu 可以在该主机上运行以下命令:
    (root) /usr/bin/passwd, !/usr/bin/passwd root, /usr/sbin/user*,
!/usr/sbin/user* * root
[zhumingyu@eternalcenter ~]$ sudo useradd new #可以添加用户
[zhumingyu@eternalcenter ~]$ sudo passwd new #可以修改普通用户的口令
更改用户 newuser01 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

4.4.2 但是不能修改 root 用户的密码
[zhumingyu@eternalcenter ~]$ sudo passwd root
对不起,用户 zhumingyu 无权以 root 的身份在 localhost 上
执行 /usr/bin/passwd root。

内容五:多个用户的 sudo 文件配置和相应的 sudo 命令(允许 wheel 组成员以特权执行所有命令)
5.1 wheel 组成员以特权执行所有命令的高危性
此案例用来展示sudo的便利性及设置不当带来的危险性,生产环境下慎用。

5.2 wheel 组成员以特权执行所有命令的实现(如果没有普通用户则先创建该账户)
[root@eternalcenter ~]# vim /etc/sudoers
.. ..
%wheel ALL=(ALL)  ALL #以%开头代表组
[root@eternalcenter ~]# usermod -a -G wheel zhumingyu
(如果提示wheel组不存在, 则还需要先创建该组:
[root@eternalcenter ~]# groupadd wheel
)
[zhumingyu@proxy ~]$ sudo -l
.. ..
用户 zhumingyu 可以在该主机上运行以下命令:
(root) /bin/*

内容六:为sudo机制启用日志记录,以便跟踪sudo执行操作
6.1 修改/etc/sudoers配置,添加日志设置
[root@eternalcenter ~]# visudo
Defaults  logfile="/var/log/sudo"
.. ..

6.2 以 root(默认有所有权限)执行 sudo 操作
[root@eternalcenter ~]# sudo -l #查看授权的sudo操作
[root@eternalcenter ~]# sudo systemctl status httpd #查看授权的sudo操作

6.3 确认日志记录已生效
[root@eternalcenter ~]# tail /var/log/sudo 
.. ..
May 16 22:14:49 : root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=list
Feb 22 22:35:43 : softadm : TTY=pts/11 ; PWD=/home/softadm ; USER=root ;
    COMMAND=/bin/systemctl status httpd