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* *