sudo授予权限

  • sudo简单介绍
  • sudo命令
  • visudo命令
  • 功能介绍
  • 别名技术
  • 使用sudo示例:练习题中有部分功能介绍


sudo简单介绍

sudo:来自sudo包,man 5 sudoers

1)sudo能够授权指定用户在指定主机上运行某些命令,如果未授权使用sudo,会使用邮件提示管理员
2)sudo可以提供日志,记录每个用户使用sudo操作情况
3)sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
4)sudo使用时间戳文件来完成类似"检票"的系统,默认存活期为5分钟的"入场券",意思是在五分钟之内,不用重复的输入口令,超过了再次输入口令才可以使用sudo给予的权限

sudo的配置文件:/etc/sudoers,/etc/sudoers.d/
时间戳文件:/var/db/sudu
日志文件:/var/log/secure

配置文件支持使用通配符

?:任意单一字符
*:匹配任意长度字符
[abc]:匹配abc其中一个字符
[!abc]:匹配除了abc的字符
\x:转义
[[alpha]]:字母,例:/bin/ls [[alpha]]*

配置文件的规则有两类

别名定义:不是必须的
授权规则:必须的
	
授权规则的格式:
	用户 登入主机=(代表用户) 命令[,命令]
	cheng  ALL=(root)  ALL
	
格式说明:
	用户:运行命令者的身份,可以是IP、主机名、#UID、或者组,但是组要加%号,
		 例:%groupname,或者用户别名
	登入主机:通过哪些主机登录,IP、主机名、某网段IP/MASK、主机别名
	(代表用户runas):用哪个用户的授权,可以是IP、主机名、UID、或者组,但是组要加%号,
		 例:%groupname,或者用户别名
	命令:要执行哪些命令,可以是单个绝对路径的命令、目录[比如:/bin]、sudoedit、命令别名

sudo命令

ll /usr/bin/sudo	:有suid特殊权限的一个命令

sudo -i -u username	:切换身份

选项:
	-u user CMD:不指定用户名,默认为root,使用某用户身份执行某命令。前提是已有授权
	-V	:显示版本信息等配置信息
	-l	:列出用户在主机上可用的和被禁止的命令
	-v	:再延长密码有效期5分钟,更新时间戳
	-k	:清除时间戳,下次执行命令重新输入密码
	-K	:与-k类似,另外删除时间戳文件
	-b	:在后台执行指令
	-p	:改变询问密码的提示符号
		例:-p "password on %h for user %p:"	:%h为主机名,%p为用户名
			sudo -p "password on %h for %p:" cat /etc/shadow
以上选项介绍在sudo -V中都可以看到

visudo命令

通过visudo命令编辑配置文件,具有语法检查功能

visudo -c :检查语法,还可以检查文件的权限是否安全
visudo -f /etc/sudoers/test :指定文件位置

visudo命令会直接打开配置文件

格式介绍:
## Allow root to run any commands anywhere 
root	    ALL=(ALL)	        ALL 
	第一段:为哪个用户授权(cheng)
	第二段第一个ALL:允许使用哪台主机,ALL表示所有主机
	第二段括号中的ALL:授权要使用哪个用户的权限
	第三段的ALL:此处是ALL表示所有命令都可用,单个命令需要写绝对路径

功能介绍

注意:以下命令必须是命令的绝对路径,可用which "command"查看命令路径信息。

执行命令visudo在配置文件中添加
cheng ALL=(root) /bin/mount /dev/sr0 /mnt/

注意:命令必须写绝对路径
	如果使用多条命令用逗号隔开。
	建议不添加/bin/userdel,很危险,因为userdel可以随意删用户
	建议授权时指定命令,除非那个用户在你的信任范围内,或就是本人使用

su - cheng :切换用户

sudo mount /dev/sr0 /mnt/

回车后输入cheng用户的密码,系统需要确认执行此命令的是不是cheng本人,不是本人当然不会有密码了。安全起见

注意:在切换到cheng用户直接使用mount命令还是不可以的。需要使用sudo mount /dev/sr0 /mnt/注意:文件中定义:/bin/mount /dev/sr0 /mnt/,切换用户后使用命令时,必须与文件定义的完全一致,比如/mnt/,写成/mnt是报错的。斜线必须加

-u:指定以谁的身份运行命令	
-i:以目标用户身份登录shell,还可以指定命令,不写用户默认为root

! :! 号后面跟命令时不允许执行此命令的意思,练习题中第5题和第7题有介绍

NOPASSWD和PASSWD:指定某命令或命令集执行时输入密码或不需要输入密码,下面sudo练习中第5题有介绍

建议:如果授权用户多的话建议在/etc/sudoers.d/目录下创建,这样也可以分清各个用户,删除的时候也好分清删的哪个用户

定义的格式与/etc/sudoers文件中一样

如果/etc/sudoers已经定义,那么/etc/sudoers.d/目录下对应用户文件不生效,也就是/etc/sudoers文件优先级高

例:vim /etc/sudoers.d/cheng
	cheng ALL=(root) ALL

注意:vim编辑的sudo文件需要使用wq!,强行保存,visudo的文件则正常保存


sudoedit:如果给某用户使用此选项就相当于给了用户ALL的权限

格式:vim /etc/sudoers.d/cheng
	cheng ALL=sudoedit
	
	su - cheng
	sudoedit /etc/sudoers	:修改任何都可以,这个选项慎用
		建议不使用

权限组:建议注释,下介绍
	## Allows people in group wheel to run all commands
	%wheel  ALL=(ALL)       ALL		权限为任何主机任何用户任何命令,
	
	例:gpasswd -a cheng
		id cheng
		su - cheng
		sudo rm -rf /boot /etc	:很危险的组,注释掉

别名技术

授权规则的格式
用户 登入主机=(代表用户) 命令[,命令]

cheng  ALL=(root)  ALL

使用别名可一次定义多个用户,多个主机,多条命令

别名有四种格式 :注意大小写
1)User_Alias
2)Ranas_Alias
3)Host_Alias
4)Cmnd_Alias

别名的定义
[A-Z]([A-Z][0-9]_ :别名必须是大写字母字母开头,可以加数字和下划线
例:

User_Alias	ADMIN01=cheng,ning			:别名就代表了这两个用户
Ranas_Alias ADMIN=root					:使用root用户的权限
Host_Alias  LOCALNET=192.168.0.0/24		:代表了一个网段
Cmnd_Alias	CMD=/bin/					:bin目录下所有命令都能用,只是示例,
										 根据实际情况定义命令
		
这样在文件中就是直接调用别名就行了,格式相同,换成别名就行
例:ADMIN01 LOCALNET=(ADMIN) CMD

使用sudo示例:练习题中有部分功能介绍

1.	为单个用户和组授权所有权限
	授权:Linux ALL=(ALL) ALL	:给Linux用户所有权限
	授权:%wheel ALL=(ALL) ALL	:给wheel组所有权限
	
2.	授权:Linux ALL=(root) /sbin/pidof,/sbin/ifconfig	
		给Linux用户代理root用户执行pidof和ifconfig命令
	%wheel ALL=(ALL) NOPASSWD:ALL	:执行命令时不需要再输入密码
	
3.	User_Alias NAME1=nginx			:别名与常用方法组合使用
	Cmnd_Alias COMMAND=/usr/bin/ip
	授权:NAME1 ALL=(root) COMMAND
			
4.	全部别名实现:
	User_Alias	ADMIN01=cheng,ning,%guest	
	Ranas_Alias ADMIN=root	
	Host_Alias  LOCALNET=192.168.0.0/24,www.cheng.com
	Cmnd_Alias	CMD=/bin/
	授权:ADMIN01 LOCALNET=(ADMIN) CMD
		
5.	介绍PASSWD和NOPASSWD的功能
	User_Alias ADMIN_USER=cheng,ning

	Cmnd_Alias ADMIN_CMD=/usr/bin/useradd,/usr/bin/usermod,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root 	
			此别名的/usr/bin/passwd [a-zA-Z]*是允许修改口令,!/usr/bin/passwd root是!禁止修改root口令
	
	ADMIN_USER ALL=(root) NOPASSWD:ADMIN_CMD,PASSWD:/usr/bin/userdel
			执行ADMIN_CMD别名中的命令不需要输密码。执行userdel需要输入密码
			
6.定义默认执行用户
	Defaults:cheng ranas_default=tom
	cheng ALL=(tom,jerry) ALL	
	
		最开始登录时执行命令时sudo -u user cmd,不加-u默认是root用户的授权,
		但是定义了Defaults:cheng ranas_default=tom,cheng登录上去后不加-u选项默认
		使用的就是tom的授权,使用jerry的授权需要使用-u指定
		
7.!号的功能
	cheng 192.168.0.110,192.168.0.130=(root) /usr/bin/,!/usr/bin/useradd

	仅允许110和130这两台主机登录。使用root授权执行/usr/bin/目录下所有命令,但是不允许时会用useradd命令
				
8.sudo其中之一的隐患
	cheng ALL=(root) /bin/cat /var/log/messages*	
		此时cheng用户可以通过root授权访问messages开头的文件,但是有一个很大的安全隐患
		
	su - cehng 
	sudo cat /var/log/messages			:这种是没问题的
	sudo cat /var/log/messages-20190907	:这种的也没问题
	sudo cat /var/log/messages /etc/shadow	:这就是那个隐患,*代表messages开头的都能看,当然这个也能看,
		
解决方法:
	cheng ALL=(root) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *