企業標準化運維權限管理實施方案

企業標準化運維權限管理實施方案


目錄:

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],有問必答,有答必應,人人爲我,我爲人人###

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章