權限規劃(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 |
運維經理 | 超級用戶所有權限 |
②開發組權限模板
級別 | 權限 |
初級開發 | root的查看權限,對應服務查看日誌的權限 |
高級開發 | root的查看權限,對應服務查看日誌的權限,重啓對應服務的權限 |
開發經理 | 項目所在服務器的ALL權限,不能修改root密碼 |
③測試組權限模板
級別 | 權限 |
測試 | 普通用戶的權限 不加入sudo列表 |
④DBA組權限模板
級別 | 權限 |
初級DBA | 普通用戶的權限 不加入sudo列表 |
高級DBA | 項目所在數據庫服務器的ALL權限 |
⑤網絡組權限模板
級別 | 權限 |
初級網工 | 普通用戶的權限 不加入sudo列表 |
高級網工 | 項目所在服務器的有關網絡配置的權限 |
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、變更方案需包括變更步驟詳解、變更成功標誌、回滾方案等。