利用 sudo 实现授权

1、sudo 介绍

sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。

在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得
权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信
息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。

sudo特性

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440

2、sudo 组成

    • sudo
  • 配置文件
    • /etc/sudo.conf
  • 授权规则配置文件
    • /etc/sudoers
    • /etc/sudoers.d
  • 安全编辑授权规则文件和语法检查工具
    • /usr/sbin/visudo
  • 授权编辑规则文件的工具
    • /usr/bin/sudoedit
  • 执行授权命令
    • /usr/bin/sudo
  • 时间戳文件
    • /var/db/sudo
  • 日志文件
    • /var/log/secure
#检查语法
visudo -c

#检查指定配置文件语法
visudo -f /etc/sudoers.d/test

3、sudo 命令

ls -l /usr/bin/sudo
sudo -i -u test                 切换身份功能和 su 相似,但不一样,sudo必须提前授权,
                                而且要输入自已的密码

sudo [-u user] COMMAND

-V                              显示版本信息等配置信息
-u user                         默认为root
-l,ll                           列出用户在主机上可用的和被禁止的命令
-v                              再延长密码有效期限5分钟,更新时间戳
-k                              清除时间戳(1970-01-01),下次需要重新输密码
-K                              与-k类似,还要删除时间戳文件
-b                              在后台执行指令
-p                              改变询问密码的提示符号
                                示例:-p "password on %h for user %p: "

4、sudo 授权规则配置

# 配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
# 配置文件中支持使用通配符 glob
?           任意单一字符
*           匹配任意长度字符
[wxc]       匹配其中一个字符
[!wxc]      除了这三个字符的其它字符
\x          转义
[[alpha]]   字母  

  • 配置文件规则有两类
    • 别名定义:不是必须的
    • 授权规则:必须的
# sudoers 授权规则格式
用户 登入主机=(代表用户) 命令
user host=(runas) command

# 范例
root ALL=(ALL) ALL

# 格式
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
  • sudoers的别名
    • User和runas:
      • username
      • #uid
      • %group_name
      • %#gid
      • user_alias|runas_alias
    • host:
      • ip或hostname
      • network(/netmask)
      • host_alias
    • command:
      • command name
      • directory
      • sudoedit
      • Cmnd_Alias
  • sudo别名有四种类型:
    • User_Alias
    • Runas_Alias
    • Host_Alias
    • Cmnd_Alias
# 别名格式
[A-Z]([A-Z][0-9]_)*

# 别名定义
Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5

# 范例
Student ALL=(ALL)   ALL
%wheel   ALL=(ALL)   ALL
# 范例
student ALL=(root)   /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
# 范例
User_Alias  NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/ifconfig
NETADMIN ALL=(root) NETCMD
# 范例
User_Alias SYSADER=test1,test2,%admins
User_Alias DISKADER=test3
Host_Alias SERS=www.test.com,192.168.1.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS=   SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD 
# 范例
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [azA-Z]*, !/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
# 范例
Defaults:test runas_default=tom
test ALL=(tom,jerry) ALL
test$ sudo cmd                     #默认代表tom执行cmd
test$ sudo -u jerry cmd
# 范例
test 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd
# 范例
[root@centos8 ~]#vim /etc/sudoers.d/test
test ALL=(ALL) sudoedit

# test 可以执行下面命令
sudoedit /etc/sudoers
sudoedit /etc/sudoers.d/test
# 修改验证密码间隔为2分钟
vim /etc/sudoers
Defaults   env_reset , timestamp_timeout=2

sudo -V

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享