1.su与sudo命令详解

命令su
功能:切换用户
语法:su [选项]... [-] [USER [ARG]...]
选项:
-, -l, --login:切换至目标用户,其用户权限,环境变量都会随之切换至目标用户;若无此选项,则只有用户的权限切换至目标用户
-c, --command=COMMAND:以指定用户的身份执行一次命令,就立即退出
-m, --preserve-environment:-m和-p是一样的,表示使用目前的环境变量,而不读取新用户的配置文件
-p     same as -m:同上
示例:
(1)若未指定用户,则表示切换至root用户
[root@www ~]# su -
(2)在非交互模式,以指定用户(hadoop)的身份 执行一次命令后,就立即退出
[root@www ~]# su - hadoop -c 'echo $UID'
501
(3)在非交互模式,以指定用户(hadoop)的身份 执行查看hadoop的 UID号,并在其家目录下创建1.txt的文件
[root@www ~]# su - hadoop -c 'echo $UID;touch /home/hadoop/1.txt'
501
[root@www ~]# ls /home/hadoop/
1.txt


命令:sudo
功能:可使授权用户执行一些只有管理员才能执行的操作
语法:sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command
选项:
-l:查看sudo使用者的权限;
-U user:查看指定用户可以执行的sudo命令,仅能和-l选项一起使用;
-u user:在非交互模式下,以指定用户的身份执行命令,命令执行完毕,就立即退出;
-b:将指令放在在后台运行;
-V:显示版本号
-h:显示版本号及指令的使用方式
-v:如果两次执行sudo的间隔在5分钟以内,那么再次执行sudo时,就不需要输入密码;如果两次操作间隔超过5分钟,则会提示输入密码
-k:将会强迫使用者在下一次执行sudo时问密码(不管有没有超过N分钟)
示例:
(1)在非交互模式下,以普通用户hadoop的身份执行sudo命令ls,列出hadoop家目录下的内容
[root@www ~]# sudo -u hadoop ls /home/hadoop      执行一条命令
1.txt  2.txt
[root@www ~]# sudo -u hadoop ls /home/hadoop;touch /home/hadoop/3.txt  执行多条命令,多条操作命令之间以分号分割
1.txt  2.txt
[root@www ~]# sudo -u hadoop ls /home/hadoop
1.txt  2.txt  3.txt

sudo应用场景
      随着公司规模的不断扩大,Linux系统管理员的日常管理工作,也变得日益繁重,为了提高工作效率,Linux管理员决定把部分权力下发,分别授权给tom和jerry两个用户,权限划分如下:
 授权tom用户管理工作:useradd,userdel,usermod,passwd
授权jerry网络管理工作ifconfig,ifup,ifdown,ip,route,netstat
   但是要求tom不能删除root用户,也不能修改root用户的密码和相关的属性信息;jerry用户在执行 ifconfig, ifup,ifdown的时候,必须输入密码,其他三个则无需输入密码
1、sudo简介
sudo是一个授权工具,可以把有限的管理操作授权给某普通用户,并且限定其能够在某些主机上执行此类命令;操作过程还会被记录于日志中,以便日后审计
2、sudo相关知识点
sudo的配置文件:/etc/sudoers
配置文件权限为:440
配置sudo的命令:visudo,其调用的是vi命令(记住是vi而不是vim)
3、如何配置sudo?
(1)在/etc/sudoers中 定义sudo授权
首先我们先来了解一下/etc/sudoers的基本语法格式:
基本语法:
who  which_host=(whom)  command
字段详解:
who:代表的是要授权的用户名,也可使用User_Alias这样的用户别名,但该用户别名必须事先在配置文件中进行定义
which_host:代表的是来源主机的地址,也可使用Host_Alias这样的来源主机别名,同样,该主机别名需事先在配置文件中进行定义
   来源的地址可以是单个IP,一个或多个网段
whom:通常可以省略,若省略,则是以root用户身份运行;
command:一般来说,可以使用命令绝对路径和相对路径;但我更推荐大家在这里使用命令的绝对路径;
原因:当root用户和普通用户的PATH变量不一样,而我们授权的命令的路径刚好就出现在这些不一样PATH变量中的时候,普通用户在执行某些命令的时候,可能会提示命令找不到的错误提示 ,因为普通用户是无法获取管理员的PATH径。所以强烈推荐各位在配置文件中定义command的时候,尽可能使用命令的绝对路径,避免出错。若是这种情况,使用sudo执行命令的时候,该命令也需要使用定义时使用绝对路径。
下面两个分别是我当前系统上root和普通用户的PATH变量
[hadoop@www ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin
[root@www ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
当需要授权的用户比较多时,我们还可以在配置文件中定义用户别名、主机别名、命令别名
命令别名(Cmnd_Alias)、主机别名(Host_Alias)、用户别名(User_Alias)、Runas_Alias 别名
User_Alias:用来定义用户别名
Host_Alias:用来定义来源主机别名
Runas_Alias:用来定义以指定用户身份运行的别名
Cmnd_Alias:用来定义命令别名,即由root授权的命令的集合
别名的命名规范:(1)别名用全大写字符;(2)别名的多个值之间以逗号分割;(3)别名可以嵌套使用
执行sudo命令的默认超时时间是5分钟,5分钟后会再次提示输入密码
现在我们正式开始定义sudo授权!
操作步骤:

wKioL1NBVWaxJGbWAARApYXhAOA817.jpg


wKioL1NBVgHAbZiMAAR9SrlzzRw937.jpg


wKiom1NBVjrR5LzYAANxwsCKpDw944.jpg


wKioL1NBViHy1mqmAAILGc0rLD4260.jpg

天网恢恢,疏而不漏,用户使用sudo进行的各种操作都被记录在了/var/log/secure文件中了,干了坏事,也休想抵赖,是吧。