②權限規劃(sudo)

權限規劃(sudo)

起草人:陳泰成

時間:2017年8月12日

一 問題簡述

隨着公司的服務器越來越多,人員流動性也開始與日俱增,以往管理服務器的陳舊思想(root權限隨意給出,開發、測試、運維共用同一賬號)應當摒棄,公司需要有更好更完善的權限體系,經過多輪溝通和協商,公司一致決定重新整理規劃權限體系。運維主管明確指出權限存在的問題,並需要解決以往的root權限氾濫問題。

我作爲本次權限規劃的發起人,我首先瞭解到公司服務器權限現狀後,經過多次與相關員工及領導溝通,確認了公司存在的部分問題:運維部基本入職離職流程中存在一些賬號問題,如:離職不報備,系統權限不回收、賬號密碼過於簡單化等。root權限隨意給開發及測試。

以上問題無疑給公司的服務器及數據安全造成了不小的隱患。因此下文將詳解此次關於權限劃分的方案。

公司有多個部門使用我們提供的linux服務器以及開通的賬號:安全權限沒有進行合理規劃,因此我提出更加安全的賬號管理方式:①領用賬號權限流程,②命令執行以sudo授權形式。


優勢: 它可以對賬號進行詳細的權限分層劃分,給服務器帶來了更好的安全保障,公司有級別不同的運維人員,我們需要對其權限整理劃分,根據職責能力我們規劃權限爲初級、中級、高級。而其他部門,如開發、測試等部門採取服務器賬號權限流程。這樣有利於權限最小化控制,避免因權限濫用導致服務運行不穩定,配置隨意修改,不規範操作等安全隱患。爲後續日誌審計等溯源,分析奠定基礎。

二 權限規劃表及技術人員配備情況

1.權限規劃表

①運維組權限規劃表

級別

權限

初級運維

查看系統、網絡、服務、進程狀態信息:

/bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/bin/ping,/usr/bin/sar,/usr/bin/free,   /usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps

高級運維

查看和修改系統、網格、服務、進程狀態配置信息,軟件包管理,存儲管理

/bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/usr/bin/sar,/usr/bin/free, /usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill,/usr/bin/kill,/usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum,/sbin/fdisk,/sbin/sfdisk,/sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount

運維經理

超級用戶所有權限
 
ALL

 

②開發組權限模板

級別

權限

初級開發

root的查看權限,對應服務查看日誌的權限
  /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls

高級開發

root的查看權限,對應服務查看日誌的權限,重啓對應服務的權限
/sbin/service,/sbin/chkconfig,/usr/bin/tail /app/log*,
/bin/grep   /app/log*,/bin/cat,/bin/ls, /bin/sh ~/scripts/deploy.sh

開發經理

項目所在服務器的ALL權限,不能修改root密碼
  ALL,!/usr/bin/passwd root,
!/usr/sbin/visudo,!/usr/bin/vim   /etc/sudoers

 

③測試組權限模板

級別

權限

測試

普通用戶的權限

不加入sudo列表

 

④DBA組權限模板

級別

權限

初級DBA

普通用戶的權限

不加入sudo列表

高級DBA

項目所在數據庫服務器的ALL權限
  ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim   /etc/sudoers

 

⑤網絡組權限模板

級別

權限

初級網工

普通用戶的權限

不加入sudo列表

高級網工

項目所在服務器的有關網絡配置的權限
  /sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/ip,/sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfig,/sbin/mii-tool,/bin/cat /var/log/*,/usr/bin/vim   /etc/sysconfig/network-scripts/*

 

2.公司目前的技術人員配備情況

運維組:5個初級運維,2個高級運維,1個運維經理

開發組:3個初級開發人員,1個高級開發,1個開發經理

測試組:2個測試工程師(測試組不加入sudo)

DBA組:3個初級DBA(初級DBA不加入sudo),1個高級DBA

網絡組:2個初級網工(初級DBA不加入sudo),1個高級網工

 

 

三 命令講解

創建用戶

useradd yw && echo "123456" | passwd --stdin yw

創建yw用戶,然後輸出一個123456交passwd作爲yw用戶的密碼

 

for n in `seq 21 25`;do useradd user$n;echo "user$n`echo user$n|md5sum|cut -c4-8`"|passwd --stdin user$n;done

用for循環來創建用戶賬號和密碼: seq 21 25創建5個數字(21,22,23,24,25),n 就代表這5個數字,後面的創建用戶接着user$n就是以user開頭接n,

然後 echo 輸出用戶名的md5,使用cut 取出4-8塊的字符交給passwd --stdin來爲每位用戶配置不同的密碼,他們的密碼都是用戶名的md5值的4至8位字符串。

 

刪除用戶

userdel yw

刪除yw用戶

 

for n in `seq 21 25`;do userdel -r user$n;done

用for循環刪除用戶

 

查看自己的sudo權限:sudo -l

 

……

……

 

四 實施命令腳本

舉例:在公司時根據實際情況編寫用戶賬號密碼及相應權限,此處根據上述權限規劃表爲例。

1.創建用戶組和用戶:

#運維組、開發組、測試組、DBA組、網絡組

groupadd chujiyunwei -g 1100

groupadd gaojiyunwei -g 1110

groupadd yunweijingli -g 1120

 

groupadd chujikaifa -g 1200

groupadd gaojikaifa -g 1210

groupadd kaifajingli -g 1220

 

groupadd ceshi -g 1300

 

groupadd chujidba -g 1400

groupadd gaojidba -g 1410

 

groupadd chujinetwork -g 1500

groupadd gaojinetwork -g 1510

 

#-----------------------------------------------------------------------------

#運維組:5個初級運維,2個高級運維,1個運維經理 

#-----------------------------------------------------------------------------

for n in `seq 1 5`;do useradd chujiyunwei$n -g 1100;echo "123456" | passwd --stdin chuji$n;done

#創建5個初級運維賬戶並配置了密碼 

for n in `seq 1 2`;do useradd gaojiyunwei$n -g 1110;echo "123456" | passwd --stdin gaoji$n;done

#創建2個高級運維的用戶和密碼

useradd yunweijingli -g 1120 && echo 123456 | passwd --stdin yunweijingli

#創建1個運維經理的賬號和密碼 

 

#-----------------------------------------------------------------------------

#開發組:3個初級開發人員,1個高級開發,1個開發經理

#-----------------------------------------------------------------------------

for n in `seq 1 3`;do useradd chujikaifa$n -g 1200;echo "123456" | passwd --stdin chujikaifa$n;done

#創建3個初級開發賬戶並配置了密碼 

useradd gaojikaifa1 -g 1210 && echo "123456" | passwd --stdin gaojikaifa1

#創建1個高級開發的用戶和密碼 

useradd kaifajingli -g 1220 && echo 123456 | passwd --stdin kaifajingli

#創建1個開發經理的賬號和密碼 

 

#-----------------------------------------------------------------------------

#測試組:2個測試

#-----------------------------------------------------------------------------

for n in `seq 1 2`;do useradd ceshi$n -g 1300;echo "123456" | passwd --stdin ceshi$n;done

#創建2個測試賬號和密碼 

 

#-----------------------------------------------------------------------------

#DBA組:3個初級DBA,1個高級DBA

#-----------------------------------------------------------------------------

for n in `seq 1 3`;do useradd chujidba$n -g 1400;echo "123456" | passwd --stdin chujidba$n;done

#創建3個初級dba 賬號和密碼 

useradd gaojidba1 -g 1410&& echo 123456 | passwd --stdin gaojidba1

#創建1個高級dba賬號和密碼 

 

#-----------------------------------------------------------------------------

#網工組:2個初級網工,1個高級網工

#-----------------------------------------------------------------------------

for n in `seq 1 2`;do useradd chujinetwork$n -g 1500;echo "123456" | passwd --stdin chujinetwork$n;done

#創建2個初級網工 

useradd gaojinetwork1 -g 1510 && echo 123456 | passwd --stdin gaojinetwork1

#創建1個高級網工 

 

2.配置/etc/sudoers文件

cat >>/etc/sudoers<<EOF

 

#配置用戶組別名: 

User_Alias CHUJIYUNWEI = %chujiyunwei

User_Alias GAOJIYUNWEI = %gaojiyunwei

User_Alias YUNWEIJINGLI = %yunweijingli

 

User_Alias CHUJIKAIFA = %chujikaifa

User_Alias GAOJIKAIFA = %gaojikaifa

User_Alias KAIFAJINGLI = %kaifajingli

 

User_Alias CESHI= %ceshi

 

User_Alias CHUJIDBA = %chujidba

User_Alias GAOJIDBA = %gaojidba

 

User_Alias CHUJINETWORK = %chujinetwork

User_Alias GAOJINETWORK = %gaojinetwork

 

 

#配置命令別名:

Cmnd_Alias CHUJIYUNWEI_CMD =  /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/bin/ping,/usr/bin/sar,/usr/bin/free, /usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps

Cmnd_Alias GAOJIYUNWEI_CMD =  /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/usr/bin/sar,/usr/bin/free,/usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill,/usr/bin/kill,/usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum,/sbin/fdisk,/sbin/sfdisk,/sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount

Cmnd_Alias YUNWEIJINGLI_CMD =  ALL

 

Cmnd_Alias CHUJIKAIFA_CMD =  /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls

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

Cmnd_Alias KAIFAJINGLI_CMD =  ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers

 

Cmnd_Alias CESHI_CMD =  /usr/bin/uname

 

 

Cmnd_Alias CHUJIDBA_CMD =  /usr/bin/uname

Cmnd_Alias GAOJIDBA_CMD =  ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers

 

Cmnd_Alias CHUJINETWORK_CMD =  /usr/bin/uname

Cmnd_Alias GAOJINETWORK_CMD =  /sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/ip,/sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfig,/sbin/mii-tool,/bin/cat /var/log/*,/usr/bin/vim /etc/sysconfig/network-scripts/*

 

#用戶組能獲取到的權限

Runas_Alias CHUJIYUNWEI = root

Runas_Alias GAOJIYUNWEI = root

Runas_Alias YUNWEIJINGLI = root

 

Runas_Alias CHUJIKAIFA = root

Runas_Alias GAOJIKAIFA = root

Runas_Alias KAIFAJINGLI = root

 

Runas_Alias CESHI = root

 

Runas_Alias CHUJIDBA = root

Runas_Alias GAOJIDBA = root

 

Runas_Alias CHUJINETWORK = root

Runas_Alias GAOJINETWORK = root

 

 

#用戶組權限對應關係

CHUJIYUNWEI ALL=(CHUJIYUNWEI) CHUJIYUNWEI_CMD

GAOJIYUNWEI ALL=(GAOJIYUNWEI) GAOJIYUNWEI_CMD

YUNWEIJINGLI ALL=(YUNWEIJINGLI) YUNWEIJINGLI_CMD

 

CHUJIKAIFA ALL=(CHUJIKAIFA) CHUJIKAIFA_CMD

GAOJIKAIFA ALL=(GAOJIKAIFA) GAOJIKAIFA_CMD

KAIFAJINGLI ALL=(KAIFAJINGLI) KAIFAJINGLI_CMD

 

CESHI ALL=(CESHI) CESHI_CMD

 

CHUJIDBA ALL=(CHUJIDBA) CHUJIDBA_CMD

GAOJIDBA ALL=(GAOJIDBA) GAOJIDBA_CMD

 

CHUJINETWORK ALL=(CHUJINETWORK) CHUJINETWORK_CMD

GAOJINETWORK ALL=(GAOJINETWORK) GAOJINETWORK_CMD

EOF

 

五 權限領用流程

1.   領用流程

① 領用人發起權限領用流程,填寫權限配置變更申請表,交由運維人員審覈。

② 運維人員審覈沒有問題告知運維主管,由運維主管開放權限。

2.配置更變申請表

 

配置變更申請表


*以下申請部門填寫 


填表日期: 

         


申請部門




聯繫方式



申請測試日期

  

申請實施日期

  年 月 日


實施部門



實施聯繫人


聯繫方式



變更目的

 


變更內容:(如內容較多,請另附頁說明)

 


申請部門

  

一般變更    重大變更    緊急變更  

 

 


簽章:                  日期:             


*以下爲運維單位填寫 


運維單位

  

      一般變更    重大變更    緊急變更  

 

 


同意申請實施日期     請在以下日期執行:     年  月  日


簽章:                  日期:             


*以下爲實施人填寫 


運維單位

處理結果



簽章:                  日期:             


  注: 1、該申請需附帶需求報告、開發及變更計劃、變更方案操作步驟詳解、用戶測試報告、源代碼或腳本等的紙質文件,及操作所涉及到的電子文件用以存檔。

  2、變更方案需包括變更步驟詳解、變更成功標誌、回滾方案等。


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