企業sudo權限規劃詳解 (實測一個堆命令搞定)

簡述問題:

        隨着公司的服務器愈來愈多,人員流動性也開始與日俱增,以往管理服務器的陳舊思想應當摒棄,公司須要有linux

更好更完善的權限體系,通過多輪溝通和協商,公司一致決定從新整理規劃權限體系,主管明確指出權限存在的問ios

題,並須要解決以往的root權限氾濫問題.數據庫

        我做爲本次權限規劃的發起人,我瞭解到了公司現狀後,通過屢次與相關員工及領導溝通,確認了公司存在的vim

部分問題:  運維部基本入職離職流程中存在一些帳號問題: 如  離職不報備,系統權限不回收.帳號密碼過於簡單化安全

這樣無疑給公司的服務器及數據安全形成了不小的隱患.所以下文將詳解這次關於權限劃分的方案.服務器

        公司有多個部門使用咱們提供的linux服務器以及開通的帳號:安全權限沒有進行合理規劃.,所以我提出更加網絡

安全的帳號管理方式: sudo受權形式.架構

        優點: 它能夠對帳號進行詳細的權限分層劃分,給服務器帶來了更好的安全保障app

        公司有級別不一樣的運維人員,咱們須要對其權限整理劃分,根據職責能力咱們規劃權限爲  初級運維  中級運維運維

高級運維.他們擁有的權限分別爲:

權限規劃

運維部:

 級別 權限
 初級運維: 查看系統信息,查看網絡狀態: 
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route  
高級運維 查看系統信息,查看和修改網格配置,進程管理,軟件包管理,存儲管理
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig, 
/bin/netstat,/sbin/route,/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,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls, 
/bin/sh ~/scripts/deploy.sh
開發經理 項目所在服務器的ALL權限,不能修改root密碼
ALL,!/usr/bin/passwd root,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

 

架構組:

級別 權限
架構工程師 普通用戶的權限
不加入sudo列表

 

DBA組:

級別 權限
初級DBA 普通用戶的權限
不加入sudo列
高級DBA 項目所在數據庫服務器的ALL權限
ALL, /usr/bin/passwd [A-Za-z]* !/usr/bin/passwd root, !/usr/sbin/visudo,

 

網絡組

級別 權限
初級網絡 普通用戶權限
不加入sudo列靚
高級網絡 項目所在數據庫服務器的ALL權限
/sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net, 

/sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfig,
/sbin/mii-tool,/bin/cat,/var/log/*

 

公司如今有的運維人員:

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

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

架構組:2個架構工程師(架構組不加入sudo)

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

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

 

基礎命令說明(後面不詳細講解了):

useradd yun1 && echo "123456" | password --stdin yun1   這個是建立yun1用戶 而後 輸出一個123456交給 passwd 而後passwd把這一串字符做爲了 yun1 的密碼

 

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個數字 n 就表明這5個數字  後面的建立用戶接着 user$n  就是以user開頭接n

而後 echo 輸出yoghurt名的md5 使用cut 取出  4-8塊的自字符交給 password --stdin  來爲每位用戶沒配置不一樣的密碼,他們的密碼都是用戶名的md5值  詳細請看下面的參考

 

開始建立用戶:

useradd yun1 && echo "123456" | password --stdin yun1   ##基礎建立方法

 

使用for循環來建立用戶和密碼3(參考)

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 ##批量建立用戶方式  



運維組:5個初級運維,2個高級運維,1個運維經理
for n in `seq 21 25`;do useradd chuyun$n;echo "user$n`echo user$n|md5sum|cut -c4-8`"|passwd --stdin user$n;done   #建立5個初級運維,密碼是md5的4-8位
-----------------------------------------------------
for n in `seq 1 5`;do useradd chuji$n;echo "123456" | passwd --stdin chuji$n;done  #推薦用這個建立帳戶和密碼,建立了 5個初級運維帳戶並配置了密碼
for n in `seq 1 2`;do useradd gaoji$n;echo "123456" | passwd --stdin gaoji$n;done  #建立高級運維的用戶和密碼
useradd jingli && echo 123456 | passwd --stdin jingli     ## 建立經理的帳號和密碼
for n in `seq 1 2`;do useradd jiagou$n;echo "123456" | passwd --stdin jiagou$n;done #建立2個架構師 帳號和密碼
for n in `seq 1 3`;do useradd chujidba$n;echo "123456" | passwd --stdin chujidba$n;done #建立初級dba 帳號和密碼
useradd gaojidba && echo 123456 | passwd --stdin gaojidba    ##建立高級dba帳號和密碼
for n in `seq 1 2`;do useradd wangguan$n;echo "123456" | passwd --stdin wangguan$n;done    ## 建立初級網管
useradd superwangguan1 && echo 123456 | passwd --stdin superwangguan   ## 建立高級網管
useradd jingli && echo 123456 | passwd --stdin jingli    #建立運維經理
-----------------------------------------------------

開發組:3個初級開發人員,1個高級開發,1個開發經理
for n in `seq 1 5`;do useradd chuji$n;echo "123456" | passwd --stdin chuji$n;done
架構組:2個架構工程師(架構組不加入sudo)
DBA組:3個初級DBA(初級DBA不加入sudo),1個高級DBA
網絡組:2個初級網管(初級DBA不加入sudo),1個高級網管

 

與本次權限規劃無關======批量刪除用戶方式:

參考:

批量建立用戶,建立隨機密碼
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  #取用戶的md5 的 4-8位字符做爲密碼.
以上密碼怎麼看?   ---- 經過 echo user$ 的用戶名來查看 md5值.上面截取的就是 md5值得 4-8位那麼準確獲取密碼的方法就是(user$   $是賦值的) 如是user21
echo user21|md5sum|cut -c4-8  # 這種方式比較麻煩 咱們能夠字節使用批量建立用戶指定密碼.以下

批量建立用戶,建立指定密碼
 for n in `seq 1 5`;do useradd chen$n;echo "123456" | passwd --stdin chen$n;done

批量刪除用戶:
for n in `seq 21 25`;do userdel -r user$n;done    ## 尾部的user$中 user 就是你的用戶名前綴  21-25 是後綴. 批量建立用戶刪除用戶都有這個

 

開始建立相關用戶:
運維組:5個初級運維,2個高級運維,1個運維經理
開發組:3個初級開發人員,1個高級開發,1個開發經理
for n in `seq 1 5`;do useradd chuji$n;echo "123456" | passwd --stdin chuji$n;done
架構組:2個架構工程師(架構組不加入sudo)
DBA組:3個初級DBA(初級DBA不加入sudo),1個高級DBA
網絡組:2個初級網管(初級DBA不加入sudo),1個高級網管

下列命令直接複製粘貼便可完成建立

for n in `seq 1 5`;do useradd chujiyunwei$n;echo "123456" | passwd --stdin chujiyunwei$n;done
for n in `seq 1 2`;do useradd gaojiyunwei$n;echo "123456" | passwd --stdin gaojiyunwei$n;done
useradd yunweijingli && echo 123456 | passwd --stdin yunweijingli

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

for n in `seq 1 2`;do useradd jiagou$n;echo "123456" | passwd --stdin jiagou$n;done
for n in `seq 1 3`;do useradd chujidba$n;echo "123456" | passwd --stdin chujidba$n;done
useradd gaojidba && echo 123456 | passwd --stdin gaojidba
for n in `seq 1 2`;do useradd wangguan$n;echo "123456" | passwd --stdin wangguan$n;done
useradd gaojiwangguan1 && echo 123456 | passwd --stdin gaojiwangguan1

總計用戶:
yunweijingli    #(建立運維經理 useradd gaojiwangguan1 && echo 123456 | passwd --stdin gaojiwangguan1)
gaojiyunwei1 gaojiyunwei2    (#建立高級運維: (for n in `seq 1 2`;do useradd gaojiyunwei$n;echo "123456" | passwd --stdin gaojiyunwei$n;done))
chujiyunwei1 chujiyunwei2 chujiyunwei3 chujiyunwei5 chujiyunwei5  #建立處及運維: (for n in `seq 1 5`;do useradd chujiyunwei$n;echo "123456" | passwd --stdin chujiyunwei$n;done)

kaifajinlgi     ##(建立開發經理 useradd kaifajingli && echo 123456 | passwd --stdin kaifajingli)
gaojikaifa1     ##(建立高級開發 useradd gaojikaifa && echo 123456 | passwd --stdin gaojikaifa)
chujikaifa1 chujikaifa2 chujikaifa3  ##建立初級開發 ( for n in `seq 1 3`;do useradd chujikaifa$n;echo "123456" | passwd --stdin chujikaifa$n;done )

jiagoushi1 jiagoushi2   ##(建立架構師 for n in `seq 1 2`;do useradd jiagoushi$n;echo "123456" | passwd --stdin jiagoushi$n;done)

dba1
dba2     ##(建立架構師 for n in `seq 1 2`;do useradd dba$n;echo "123456" | passwd --stdin dba$n;done)
dba3

gaojidba    #建立高級DBA useradd DBA && echo 123456 | passwd --stdin DBA

wangguan1    
wangguan2 ##(建立網管 for n in `seq 1 2`;do useradd wangguan$n;echo "123456" | passwd --stdin wangguan$n;done)

gaojiwanguan #建立高級網管 useradd gaojiwangguan && echo 123456 | passwd --stdin wangjiwangguan

 

用戶權限規劃:

高級運維:    %gaojiyunwei
初級運維:    %yunwei
開發:    %kaifa
網絡組:    %net

#配置命令:
User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei

-----------------------
#建立用戶
useradd net1 && echo '123456' | passwd --stdin net1
useradd yunwei1 && echo '123456' | passwd --stdin yunwei1
useradd gaojiyunwei1 && echo '123456' | passwd --stdin gaojiyunwei1
useradd kaifa1 && echo '123456' | passwd --stdin kaifa1

建立組: (groupadd)
groupadd net
groupadd kaifa
groupadd yunwei
groupadd gaojiyunwei  

加入組:(usermod -g 組 用戶)
usermod -g yunwei yunwei1        
usermod -g gaojiyunwei gaojiyunwei1
usermod -g net net1
usermod -g kaifa kaifa1

 

用戶別名分類:

User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei

 

命令別名管理

#網絡工程師命令別名組
Cmnd_Alias NET_CMD = /bin/vi, /bin/ping, /bin/traceroute, /sbin/route, /bin/netstat, /bin/ps

#開發命令別名組
Cmnd_Alias KAIFA_CMD = /bin/grep, /usr/bin/vim, /bin/vi, /usr/bin/tail, /usr/bin/wc, /bin/ps

#運維命令別名組
Cmnd_Alias YUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], !/usr/bin/passwd root

#高級運維命令別名組
Cmnd_Alias GAOJIYUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], /usr/sbin/usermod, /usr/sbin/userdel

 

權限管理

#能獲取到的權限
Runas_Alias NET  = root
Runas_Alias KAIFA  = root
Runas_Alias YUNWEI = root
Runas_Alias GAOJIYUNWEI = root

 

#對應關係
#權限分組
User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei

#網絡工程師命令別名組
Cmnd_Alias NET_CMD = /bin/vi, /bin/ping, /bin/traceroute, /sbin/route, /bin/netstat, /bin/ps

#開發命令別名組
Cmnd_Alias KAIFA_CMD = /bin/grep, /usr/bin/vim, /bin/vi, /usr/bin/tail, /usr/bin/wc, /bin/ps

#運維命令別名組
Cmnd_Alias YUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], !/usr/bin/passwd root

#高級運維命令別名組
Cmnd_Alias GAOJIYUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], /usr/sbin/usermod, /usr/sbin/userdel

#能獲取到的權限
Runas_Alias NET  = root
Runas_Alias KAIFA  = root
Runas_Alias YUNWEI = root
Runas_Alias GAOJIYUNWEI = root

#Runas_Alias OP = root

#對應關係
NET     ALL=(NET)       NET_CMD
KAIFA   ALL=(KAIFA)     KAIFA_CMD
YUNWEI  ALL=(YUNWEI)    YUNWEI_CMD
GAOJIYUNWEI     ALL=(GAOJIYUNWEI)       GAOJIYUNWEI_CMD

 

一個腳本所有搞定權限(實測無問題,權限所有搞定 sudo -l 查看得到的權限)

 

useradd net1 && echo '123456' | passwd --stdin net1useradd yunwei1 && echo '123456' | passwd --stdin yunwei1useradd gaojiyunwei1 && echo '123456' | passwd --stdin gaojiyunwei1useradd kaifa1 && echo '123456' | passwd --stdin kaifa1groupadd netgroupadd kaifagroupadd yunweigroupadd gaojiyunwei  usermod -g yunwei yunwei1         usermod -g gaojiyunwei gaojiyunwei1usermod -g net net1usermod -g kaifa kaifa1cat >>/etc/sudoers <<eofUser_Alias NET = %netUser_Alias KAIFA = %kaifaUser_Alias YUNWEI = %yunweiUser_Alias GAOJIYUNWEI = %gaojiyunwei##network--Cmnd_Alias NET_CMD = /bin/vi, /bin/ping, /bin/traceroute, /sbin/route, /bin/netstat, /bin/ps##kaifamingling--Cmnd_Alias KAIFA_CMD = /bin/grep, /usr/bin/vim, /bin/vi, /usr/bin/tail, /usr/bin/wc, /bin/ps##yunweimingling--Cmnd_Alias YUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], !/usr/bin/passwd root##gaojiyunweimingling--Cmnd_Alias GAOJIYUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], /usr/sbin/usermod, /usr/sbin/userdel##quanxian-- Runas_Alias NET  = root Runas_Alias KAIFA  = root Runas_Alias YUNWEI = root Runas_Alias GAOJIYUNWEI = root##Runas_Alias OP = root#guanxi--NET     ALL=(NET)       NET_CMDKAIFA   ALL=(KAIFA)     KAIFA_CMDYUNWEI  ALL=(YUNWEI)    YUNWEI_CMDGAOJIYUNWEI     ALL=(GAOJIYUNWEI)       GAOJIYUNWEI_CMDeof
相關文章
相關標籤/搜索