sudo:superuser do,实现普通用户执行root命令的授权工具。

一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。

sudo使一般用户不需要知道超级用户的密码即可获得权限
#过程:
(1)超级用户授权:首先 超级用户 将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);

(2)管理员确认用户的身份:在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。

(3)以超级用户身份执行命令:之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。

sudo的组成:

  • 软件包
  • 配置文件
  • 授权规则配置文件
软件包:sudo

配置文件:/etc/sudo.conf  #一般不用修改

授权规则配置文件:#
	/etc/sudoers #这个文件不建议直接改,因为改错了就会影响授权x
	
	/etc/sudoers.d  #可以把授权文件放在这个目录下面,防止所有授权规则放在一起太臃肿
	
	#配置文件中支持使用通配符 glob

安全编辑授权规则文件和语法检查工具: visudo ≈ vim /etc/sudoers

	/usr/sbin/visudo  #建议这个命令来改用户的授权,在编辑的时候有语法提示功能,格式错误会提示

sudo工具授权文件的编写格式

#格式:
授权用户  登入的主机=(代表用户)   能执行的操作
user      host=(runas)           command

user: 表示给谁授权  #%group 表示对组进行授权

host: 表示在哪个主机登录 ALL表示所有主机

(runas):表示以哪个用户的身份运行 一般是root

command: 表示能执行那些操作(命令需要写绝对路径) ALL表示所有 

#其中NOPASSWD:command 表示不用验证这个用户的密码
User的形式:
username #用户名

#uid  #uid的形式

%group_name  #组的形式

%#gid  #gid的形式

host的形式:
ip或hostname  #ip地址或者主机名

network(/netmask)  #ip地址/子网掩码


command的形式:
command name #命令的名字

directory #这个目录里面的所有命令都授权

sudoedit #sudoedit是一个编辑授权配置文件的工具。表示被授权的用户可以编辑sudo的授权配置文件(/etc/sudoers)
#范例:授权tom用户具有挂载光盘的功能

tom ALL=(root) /usr/bin/mount /dev/cdrom /mnt

sudo的别名

  • 用户别名
  • 主机别名
  • 代表者别名
  • 操作别名
sudo授权的时候允许加自定义的别名

四种别名:
User_Alias #被授权的用户

Runas_Alias #代表谁

Host_Alias  #主机

Cmnd_Alias #执行的操作

#别名必须是大写字母和数字、下划线的结合

#定义别名的格式:
定义别名类型 别名的名称 = 值1,...,值n

范例

User_Alias  NETADMIN= netuser1,netuser2 #定义用户别名

Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/ifcon #定义操作别名

NETADMIN ALL=(root) NETCMD

sudo命令:

sudo -i -u tom 切换身份功能和 su 相似,但不一样  #因为sudo必须提前授权,而且要输入自已的密码确认自己的身份,而su的话是需要切换者的密码。

#su switch user

sudo [-u user] COMMAND

-V 显示版本信息等配置信息

-u user 默认为root #表示代表谁执行这个操作

-l,ll 列出用户在主机上可用的和被禁止的命令

-v 再延长密码有效期限5分钟,更新时间戳

范例

#修改验证密码间隔为2分钟
[root@centos8 ~]#vim /etc/sudoers
	Defaults   env_reset , timestamp_timeout=2

#sudo -V 可以查看用户的默认时间间隔。
#ubuntu 默认用户具有sudo权限

#它是将普通用户都加到了sudo这个组里面了。

root@ubuntu1804:~# grep %sudo /etc/sudoers

%sudo ALL=(ALL:ALL) ALL #ALL:ALL 任何用户:任何组
修改ubuntu的visudo的默认编辑器

#ubuntu的visudo默认是使用nano工具打开的

export EDITOR=vim