企业标准化运维权限管理实施方案


目录:

1.需求分析

2.建设规范

3.技术分解

 3.1sudo基本介绍

 3.2sudo配置规则

 3.3sudo别名规范

 3.4sudo技术误区

4.方案规划

 4.1 信息采集

 4.2 虚拟组构建

 4.3 配置文件构建

 4.4 配置文件测试

5.实施计划

 5.1 时间窗口

 5.2 测试报告

 5.3 知识库归档


一、需求分析

   目前企业服务器初俱规模,运维团队、运维规范、运维管理制度已落地,但操作命令授权不统一和不规范(root权限泛滥)经常导致系统、数据库、文件等异常受损。为保障企业系统、数据库和文件等的安全性及运维管理的统一性、可追溯性等因素,企业对运维团队、开发团队、数据库团队、市场部团队、企业管理层等统一授权不同操作命令,实现既能满足各部门的工作需求,又能保障服务器系统和数据库的安全性,进而尽可能的避免因运维管理因素导致服务器故障或数据库丢失等问题。

二、建设规范

   为实现规范化运维管理、避消除安全隐患、提高部门部署效率和推进项目计划,企业关于权限管理制定如下规范

   (1)根据团队职能进行的分成次、分等级的命令授权,减少命令权限的越权;

   (2)root权限只能运维团队主管,由运维主管负责其他权限管理;

   (3)权限分配不够时,提交申请流程,申请表由直属领导签字,提交运维团队审核,保存存档;

   (4)权限分配原则是满足工作需求的前提下最小化命令授权,提高企业系统运行安全性和稳定性;

三、技术分解

 3.1 sudo基本介绍

    sudo是够授权指定用户在指定主机上运行某些命令,在使用sudo命令时,需要安装sudo相关的rpm软件包,其核心配置文件有/etc/sudoers、/etc/sudoer.d/ 、var/log/secure和/var/db/sudo。

    在编辑授权命令时,可以将配置文件编辑在/etc/sudoers中,也可以在/etc/sudoer.d目录下创建独立的sudo命令授权文件但是文件权限必须时0440。secure是存放sudo的记录日志文件,/var/db/sudo是记录sudo操作的时间戳,到达时间戳后自动退出sudo的指令执行,避免长时间代表管理员或其他用户的身份执行命令。

 3.2 sudo配置规则

    sudo配置规则由两部分组成,一部分为别名定义,另一部分为授权规则,别名定义将特定的用户、主机、命令等类似保存成数组方便调用,授权规则:用户 登入主机=(代表用户) 命令

    举例说明:

[root@centos7 ~]#cd /etc/sudoers.d/               #进入/etc/sudoers.d

[root@centos7 /etc/sudoers.d]#touch xuewb.sudo    #创建文件

[root@centos7 /etc/sudoers.d]#chmod 0440 xuewb.sudo #必须给定权限为0440

[root@centos7 /etc/sudoers.d]#vim xuewb.sudo

xuewb ALL=(ALL) ALL

liming 172.18.1.1,172.18.2.1=(ALL) ALL

liming 192.168.1.1,192.168.2.1=(ALL) /usr/bin/mount
zhangg 192.168.3.1 192.168.4.1=(root) /usr/bin/mount /dev/sr0 /mnt

[root@centos7 ~]#pscp.pssh -h host.txt  /etc/sudoers.d/xuewb.sudo    /etc/sudoers.d/xuewb.sudo

   此时在所有服务器集群服务器上的xuewb账号相当于sudo操作时代表root权限,但liming账号仅在服务器172.18.1.1和172.18.2.1上的sudo操作可以代表root权限只能操作mount命令,而zhangg账号只能在服务器192.168.3.1和192.168.4.1上只执行mount /dev/sr0 /mnt命令,将光盘挂载到指定目录上,权限更小(注意sudo执行命令时,命令和sudo配置规则中预定义需保持一致,多一个符号或少一个符号都不行)。

 3.3 sudo别名规范

   当企业已具有小规模服务器集群,用户相对较多,但因其他因素无3A认证审计授权服务器,因此利用sudo别名更加方便和便捷权限控制,在sudo的别名中有四种规范,分别为:User_Alias、Host_Alias、Runas_Alias和Cmnd_Alias,具体可定义功能如下:

    (1)User_Alias别名中可定义:username、%group_name,以%开头的是组,系统默认有组wheel,wheel的组中默认并无成员,具体如下所示:

[root@centos7 ~]#cat /etc/sudoers|grep wheel  
## Allows people in group wheel to run all commands
%wheel    ALL=(ALL)    ALL           #系统有默认组wheel,而且加入默认组相当于系统管理员
# %wheel    ALL=(ALL)    NOPASSWD: ALL

[root@centos7 ~]#cat /etc/group|grep wh

wheel:x:10:                              #验证系统默认组
[root@centos7 ~]#groupmems -l -g wheel

[root@centos7 ~]#                        #默认组成员为空

[root@centos7 ~]#usermod -a xuewb -G wheel   #将用户添加至组wheel,此时xuewb相当于系统管理员
[root@centos7 ~]#groupmems -l -g wheel 
xuewb

[root@centos7 ~]#su - xuew               #切换用户验证,

[xuewb@centos7 /root]$sudo cat /etc/passwd
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    (2)Host_Alias别名中可定义:ip或hostname,定义是主机,

    (3)Runas_Alias别名中可定义:uername、%group_name,同User_Alias

    (4)Cmnd_Alias别名中可定义:command name、directory(目录),定义命令的目录时,表示用户可以执此目录下所有的命令。

    在别名中定义必须申明别名类型、别名之间用":"、item之间用","、别名字母必须大写,具体格式如:别名类型 别名1=item1,item2,item3:别名2=itm1,item2,item3,item4

[root@centos7 ~]#cd /etc/sudoers.d/               #进入/etc/sudoers.d

[root@centos7 /etc/sudoers.d]#touch xuewb.sudo    #创建文件

[root@centos7 /etc/sudoers.d]#chmod 0440 xuewb.sudo #必须给定权限为0440

[root@centos7 /etc/sudoers.d]#vim xuewb.sudo

User_Alias NETWORK_TEAM=xuewb,tom : DBA=wang,tom  #定义别名时,必须全部大写

Runas_Alias MANAGE_TEAM=xuewb,tom

Cmnd_Alias NETWORK_CMND=/usr/sbin/ip,/usr/sbin/ifconfig
Defaults:xuewb runas_default=tom    
#如果有两个用户,sudo时默认为xuewb,如下tom,指定sudo -u tom
xiaozhang 10.18.2.2=(MANAGE_TEAM) /bin/cat /etc/passwd
NETWORK_TEAM ALL=(ALL) NETWORK_CMND
DBA ALL=(ALL) /usr/bin/mysql

 3.4 sudo技术误区

   在配置sudo时,可以支持通配符、目录等,但是在使用通配符时,注意误区:

    xuewb ALL=(ALL) /bin/cat /var/log/message*

   此时通过xuewb用户可通过sudo -u root /var/log/message /etc/passwd等查看任何东西,因此在此处注意不小心设置的bug。

   正确解法为:

   xuewb ALL=(ALL) /bin/cat /var/log/message* !/bin/cat /var/log/message* *,即在查看时,只能查看关于message*的内容,中间不支持空格,避免了技术误区。

四、方案规划

 4.1 信息采集

   提交申请得到领导确认后,邮件通知各部门主管及相关人员,统计命令授权需求,将命令需求整理和初步审核,并进行协调主要领导、各部门主管及主要业务负责人,将审核结果进行确认,对不符合安全需求的命令回收并签字确认,留存电子和纸质文档记录在案。

 4.2 虚拟组构建

   根据各部门及业务需求构建分层级、分等级的虚拟组,构建虚拟组的原则:

    (1)以部门为主组,构建主管组、高级工程师、初级工程师;

    (2)以各人职能构建实不同业务逻辑组;

    (3)以业务需求构建应急抢险保障组,形成企业系统运行安全保障组;

    综合虚拟组构建的原则及运维部组织各部门多次讨论结果,构建如下虚拟组及命令授权表:

    (1)运维组命令授权列表

级别分组

权限

初级运维

查看系统资源使用情况、网络状态信息

/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname, /sbin/ifconfig, /bin/netstat,/sbin/route,/usr/bin/lsof,

高级运维

查看系统资源使用情况、软件包的安装、卸载、存储管理、日志的查看

/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig, /usr/bin/cp
 /bin/netst
at,/sbin/route,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill,/usr/bin/mv/usr/bin/kill,/usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum,/usr/bin/cat,/sbin/fdisk,/sbin/sfdisk,/sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount/usr/bin/rm/sbin/local/bin

运维主管

超级用户root权限

Root权限

    (2)开发组命令授权列表

级别分组

权限

初级开发

相关业务的日志信息查看,代表用户身份root

/usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls !/use/bin/tail /app/log* * !/bin/grep /app/log* *

高级开发

日志的的管理、查看、相关业务脚本的执行,代表用户身份root

/sbin/service,/sbin/chkconfig, /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls,/bin/sh  ~/scripts/deploy.sh,!/usr/bin/tail /app/log* *,!/bin/grep /app/log* *

开发经理

授权所有命令,除修改密码

ALL,!/usr/bin/passwd  root,/usr/bin/passwd [A-Za-z]*,!/usr/sbin/visudo

  (3)数据库组命令授权列表

级别分组

权限

初级DBA

查看数据库日志消息,其他具体有数据内授权
/usr/bin/cat /var/log/db.log*,!/var/log/db.log* *

高级DBA

项目所在数据库服务器的ALL权限

ALL, /usr/bin/passwd  [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo

DBA经理

项目所在数据库服务器的ALL权限

ALL, /usr/bin/passwd  [A-Za-z]*, !/usr/bin/passwd root,!/usr/sbin/visudo

    (4)其他组命令授权列表

级别分组

权限

普通户

普通用户权限

不加入sudo列表

业务组

普通用户权限

不加入sudo列表

应急组

项目所在数据库服务器的ALL权限

ALL,/usr/bin/passwd  [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo

4.3 配置文件构建

   构建配置文件整体思路为,批量创建用户并将用户添加至对应的组中,最后在/etc/sudoers.d/目录下创建文件,文件中编写sudo规则的业务需求列表。

 sudo文件编写规范

   (1)利用别名进行管理,方便管理员更新sudo的配置文件;

   (2)命名别名时,别名上一行进行注释,便于运维团队维护;

   (3)/etc/sudoers.d/目录下创建文件时,根据业务逻辑或部门进程创建,每部门维护一个sudo配置文件,sudo配置文件命名为: 部门名称.conf;

   (4)部门名称.conf文件创建后的每一次维护进行备份,防止意外丢失,便于数据回滚恢复。

 配置文件构建过程

    第一步:创建用户组

[root@centos7 ~]#groupadd DBA_team.gen

[root@centos7 ~]#groupadd DBA_team.adv

[root@centos7 ~]#groupadd DBA_team.mager

[root@centos7 ~]#groupadd Operation_team.gen

[root@centos7 ~]#groupadd Operation_team.adv

[root@centos7 ~]#groupadd Operation_team.mager

[root@centos7 ~]#groupadd Development_team.gen

[root@centos7 ~]#groupadd Development_team.adv

[root@centos7 ~]#groupadd Development_team.mager

[root@centos7 ~]#groupadd General_team

[root@centos7 ~]#groupadd Emergency_team

[root@centos7 ~]#groupadd Business_team

    第二步:批量创建用户并添加至对应组

    根据各部门主管或人力资源部获取分层级、分等级人员名单,编写脚本批量账号添加至系统,并自动完成组辅助组的添加,具体可参考本人博客http://wbxue.blog.51cto.com/11831715/1963806在此不做展示详细展示。

   第三步:根据sudo的配置规范,利用脚本创建sudo配置文件

[root@centos7 ~]#cat /etc/group

...                                            #发现后期添加的用户GID>1022

[root@centos7 ~]#vim touch.config              #编写创建配置文件的脚本

 #!/bin/bash 

 declare -a sudo_group              
 declare -i i=0
 sudo_group=(`awk -F":" '{if( $3 > 1022)print $1}' /etc/group`)
 for ((i=0;i<${#sudo_group[*]}; i++));do

     filename=`echo ${sudo_group[i]|cut -d"." -f1`

     if [ -f ${filename}.conf ];then

       continue

      else

       touch ${filename}.conf

     fi

 done

[root@centos7 ~]#chomd +x touch.config

[root@centos7 ~]#mv touch.config  /etc/suders.d/

[root@centos7 ~]#./etc/suders.d/touch.config  #执行创建好的脚本,创建对应组的配合文件

[root@centos7 /etc/sudoers.d]#ls              #验证发现已经创建完成
touch.config  Business_team.conf  DBA_team.conf  Development_team.conf  Emergency_team.conf  General_team.conf  Operation_team.conf

    第四步:根据sudo配置规范,编写配置规则

[root@centos7 /etc/sudoers.d]#vim Operation_team.config  #配置运维组命令授权

#General users for Operation                            #配置普通用户列表别名
User_Alias OPERATION_GEN_USERS=%Operation_team.gen                                          
#General cmnd for Operation                             #配置普通用户命令别名
Cmnd_Alias OPERATION_GEN_CMNDS=/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname, /sbin/ifconfig, /bin/netstat,/sbin/route,/usr/bin/lsof
#Advanced users for Operation                           #配置高级用户列表别名
User_Alias OPERATION_ADV_USERS=%Operation_team.adv
#Advanced cmnd for Operation                            #配置高级用户命令别名
Cmnd_Alias OPERATION_ADV_CMNDS=/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/usr/bin/cp,/bin/netstat,/sbin/route,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill,/usr/bin/mv/usr/bin/kill,/usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum,/usr/bin/cat,/sbin/fdisk,/sbin/sfdisk,/sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount/usr/bin/rm,/sbin/local/bin
#Manager users for Operation have root peom             #root权限注释说明
#root ALL=(ALL) ALL                                     #root权限注释说明
#General users Command authorization                    #普通用户命令授权
OPERATION_GEN_USERS ALL=(root) OPERATION_GEN_CMNDS     
#Advanced users Command authorization                   #高级用户命令授权
OPERATION_ADV_USERS ALL=(root) OPERATION_ADV_CMNDS


[root@centos7 /etc/sudoers.d]#vim Development_team.confi #配置开发组命令授权

#General uers for Development                           #配置开发组普通用户列表别名
User_Alias DEVELOPMENT_GEN_USERS=%Development_team.gen
#General cmnd for Development                           #配置开发组普通用户命令别名
Cmnd_Alias DEVELOPMENT_GEN_CMNDS=/usr/bin/tail /app/log*,/bin/grep /app/log<200b>*,/bin/cat,/bin/ls !/use/bin/tail /app/log* * !/bin/grep /app/log* *
#Advanced users for Development                         #配置开发组高级用户列表别名
User_Alias DEVELOPMENT_ADV_USERS=%Development_team.adv
#Advanced cmnd for Development                          #配置开发组高级用户命令别名
Cmnd_Alias DEVELOPMENT_ADV_CMNDS=/sbin/service,/sbin/chkconfig, /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls,/bin/sh  ~/scripts/deploy.sh,!/usr/b    in/tail /app/log* *,!/bin/grep /app/log* *
#Manager users for  Development                         #配置主管用户列表别名
User_Alias DEVELOPMENT_MAGER_USERS=%Development_team.mager
#Manager cmnd for Development                           #配置主管用户命令别名
Cmnd_Alias DEVELOPMENT_MAGER_CMNDS=ALL,!/usr/bin/passwd  root,!/usr/bin/passwd [A-Za-z]*,!/usr/sbin/visudo                                                       
#General users Command authorization                    #配置普通用户命令授权
DEVELOPMENT_GEN_USERS ALL=(root) DEVELOPMENT_GEN_CMNDS
#Advanced users Command authorization                   #配置高级用户命令授权
DEVELOPMENT_ADV_USERS ALL=(root) DEVELOPMENT_ADV_CMNDS
#Manager  users Command authorization                   #配置主管用户命令授权
DEVELOPMENT_MAGER__USERS ALL=(root) DEVELOPMENT_MAGER_CMNDS


[root@centos7 /etc/sudoers.d]#vim DBA_team.config      #配置DBA组命令授权

#General uers for DBA                                   #配置普通用户列表别名
User_Alias DBA_GEN_USERS=%DBA_team.gen
#General cmnd for DBA                                   #配置普通用户命令别名
Cmnd_Alias DBA_GEN_CMNDS=/usr/bin/cat /var/log/db.log*,!/var/log/db.log* *                          
#Advanced users for DBA                                 #配置高级用户列表别名
User_Alias DBA_ADV_USERS=%DBA_team.adv
#Advanced cmnd for DBA                                  #配置高级用户命令别名
Cmnd_Alias DBA_ADV_CMNDS=ALL,/usr/bin/passwd  [A-Za-z]* !/usr/bin/passwd root,!/usr/sbin/visudo
#Manager users for  DBA                                 #配置主管用户列表别名
User_Alias DBA_MAGER_USERS=%DBA_team.mager
#Manager cmnd for DBA                                   #配置主管用户命令别名
Cmnd_Alias DBA_MAGER_CMNDS=ALL,/usr/bin/passwd  [A-Za-z]* !/usr/bin/passwd root,!/usr/sbin/visudo
#General users Command authorization                    #普通用户命令授权
DBA_GEN_USERS ALL=(root) DBA_GEN_CMNDS
#Advanced users Command authorization                   #高级用户命令授权
DBA_ADV_USERS ALL=(root) DBA_ADV_CMNDS
#Manager  users Command authorization                   #主管用户命令授权
DBA_MAGER__USERS ALL=(root) DBA_MAGER_CMNDS


[root@centos7 /etc/sudoers.d]#vim Emergency_team.config #配置DBA组命令授权

#General uers for Emergency                             #配置应急组用户列表别名
USer_Alias EMERGENCY_USERS=%Emergency_team
#Manager cmnd for Emergency                             #配置应急组命令列表
Cmnd_Alias EMERGENCY__CMNDS=ALL,/usr/bin/passwd  [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo   #Emergency  users Command authorization                 #配置应急组命令授权
EMERGENCY__USERS ALL=(root) EMERGENCY_CMNDS


[root@centos7 /etc/sudoers.d]#visudo -c                 #配置语法检测
/etc/sudoers: parsed OK

 4.4 配置文件测试

   根据配置文件在测试区服务器进行测试,经测试验证,配置文件构建完善,命令授权初步能够实现运维的规范化管理,后续如有需求执行新的命令,则按照权限申请流程,填写相关申请表。

五、实施规划

 5.1 时间窗口

    由主管领导负责,运维部牵头,其他部门主管及成员配合,协调时间窗口进行命令授权实施,经协调方案实施时间安排在*月*日晚间12点执行此方案,具体安排如下:

序号

实施流程

操作内容

预计时间

完成时间

主要负责人签字

监管负责人签字

操作纪律

1

业务及配置文件备份

网络备份






存储备份






数据库备份






业务备份






运维平台






2

sudo命令授权实施

运维组授权






开发组授权






DBA组授权






应急组授权






3

业务及命令授权测试

运维组测试






开发组测试






DBA组测试






应急组测试






 5.2 测试报告

   根据测试结果提交测试报告,测试报告说明测试过程、测试结果、需改进的地方等,并将测试报告归档记录在案。

 5.3 实施归档

   将配置过程、配置规则等上传企业运维知识库,方便后续运维工作人员交接业务。

   如上为本人根据某公司需求制定的小方案,仅供运维界兄弟们参考,如有问题,请及时沟通

####################################################################################

###具体详情请咨询微信:QQ767743577  邮箱地址: [email protected],有问必答,有答必应,人人为我,我为人人###

####################################################################################