接触Linux的朋友应该都接触sudo这个命令,特别是刚一接触ubuntu朋友,只要进入系统执行特殊的命令都需要在命令前加+sudo命令才能执行命令,sudo到到底是个什么神器呢?sudo是个统管一切的命令。它的字面意思是代表“超级用户才能做!”(super user do!) 也可以使用 su - "switch user",但是使用su方式容易将系统用户密码泄露,导致系统不安全,由于root用户权限过大,在实际生产过程中很少使用root用户直接登录系统,而是使用普通用户登录系统;但是如果普通用户要对系统进行日常维护操作时需要su到root用户,为了提高安全性,可以使用sudo授权某一用户在某一主机以某一用户身份运行某些命令;从而减少root用户密码知晓人,提高系统安全性。



sudo的优势:
   ①授权指定用户在指定的主机上运行指定的管理命令;
   ②sudo审计安全性:将一些管理命令授权给某些普通用户使用,并且还能限定其仅能够在某些主机上执行此类的命令,操作过程还会被记录与日志中,以便于日后审计;

  ③"检票系统":时效性认证,用户第一次执行sudo命令时会要求输入密码来验证用户身份,成功后用户会获得一个有固定存活时长的"令牌"(令牌默认存活时长为5分钟)


sudo常用参数:

##参数
    -V 显示版本编号
    -h 会显示版本编号及指令的使用方式说明
    -l 会显示出自己(执行sudo的使用者)的权限
    -v 因为sudo在第一次执行时或是在N分钟内没有执行(N预设为五)会问密码,这个参数是重新做一次确认,如果超过N
    分钟,也会问密码
    -k 将会强迫使用者在下一次执行sudo时问密码(不论有没有超过N分钟)
    -b 将要执行的指令放在后台后台执行

使用sudo的过程:

sudo的授权文件:/etc/sudoers,只有管理员能够编辑
  1、实现sudo授权的方法
①使用vim打开编辑:
       可以实现文本着色,但是不能检测语法错误,不建议使用
②visudo:专用的sudoers文本编辑工具
       配置完成后能够检测提示语法错误,建议使用此编辑工具进行/etc/sudoers进行编辑
       帮助文档:man visudo;man visudoers

③定义sudo授权,/etc/sudoers
      语法: who which_host=(whom) command
      谁能以谁的身份,在那些主机上执行那些命令

wKiom1cZ4JWCjuNcAAFmWYb3Z-A337.jpg

sudo配置文件别名应用:

别名:Alias(都以大写字母定义)
Host_Alias:定义主机别名,使用,分隔
User_Alias:定义用户别名,可以是用户名,也可以是组名(%组名)
Cmnd_Alias:定义命令别名,可以定义不能执行的命令,使用!/usr/bin/passwd root
Runas_Alias:定义以那些用户执行
NOPASSWD:定义用户执行命令时可以不输入密码
PASSWD:定义用户执行命令时需要输入密码


sudo案例应用:

  1. 授权samlee用户拥有添加用户权限、修改密码权限,但不能修改root密码(防止用户修改root密码):

[root@rsyncmaster ~]# visudo 
samlee  ALL=(root)      /usr/sbin/useradd, /usr/bin/passwd, ! /usr/bin/passwd root

使用samlee登录测试:

[samlee@rsyncmaster ~]$ sudo useradd samleetest    #创建用户没有问题
[sudo] password for samlee: 
[samlee@rsyncmaster ~]$ sudo passwd root           #无法修改root密码
Sorry, user samlee is not allowed to execute '/usr/bin/passwd root' as root on rsyncmaster.samlee.com.
[samlee@rsyncmaster ~]$ tail /etc/passwd | grep samleetest    #查看添加的用户
samleetest:x:503:503::/home/samleetest:/bin/bash

2.sudo别名定义及别名调用

[root@rsyncmaster ~]# visudo 
User_Alias USERADMIN = samlee,%admin
Host_Alias HOST = 172.16.0.0/16,127.0.0.1
Runas_Alias ADMIN = root
Cmnd_Alias COMMAND = /sbin/ifconfig,/bin/ping
USERADMIN       HOST=(ADMIN)    COMMAND

测试;samlee用户登录测试指定的相关命令:

#建立测试用户及测试组
[root@rsyncmaster ~]# groupadd admin
[root@rsyncmaster ~]# useradd -g admin admin
[root@rsyncmaster ~]# passwd admin
#使用samlee用户测试:
[samlee@rsyncmaster ~]$ sudo ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D3:E4:53  
          inet addr:172.16.100.7  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fed3:e453/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:61839 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60930 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6300546 (6.0 MiB)  TX bytes:11935948 (11.3 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)
#使用admin组用户测试:
[admin@rsyncmaster ~]$ sudo ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D3:E4:53  
          inet addr:172.16.100.7  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fed3:e453/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:62130 errors:0 dropped:0 overruns:0 frame:0
          TX packets:61216 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6324018 (6.0 MiB)  TX bytes:11965210 (11.4 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)