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


簡述問題:

        隨着公司的服務器越來越多,人員流動性也開始與日俱增,以往管理服務器的陳舊思想應當摒棄,公司需要有
更好更完善的權限體系,經過多輪溝通和協商,公司一致決定重新整理規划權限體系,主管明確指出權限存在的問
題,並需要解決以往的root權限泛濫問題.
        我作為本次權限規划的發起人,我了解到了公司現狀后,經過多次與相關員工及領導溝通,確認了公司存在的
部分問題:  運維部基本入職離職流程中存在一些賬號問題: 如  離職不報備,系統權限不回收.賬號密碼過於簡單化
這樣無疑給公司的服務器及數據安全造成了不小的隱患.因此下文將詳解此次關於權限划分的方案.
        公司有多個部門使用我們提供的linux服務器以及開通的賬號:安全權限沒有進行合理規划.,因此我提出更加
安全的賬號管理方式: sudo授權形式.
        優勢: 它可以對賬號進行詳細的權限分層划分,給服務器帶來了更好的安全保障
        公司有級別不同的運維人員,我們需要對其權限整理划分,根據職責能力我們規划權限為  初級運維  中級運維
高級運維.他們擁有的權限分別為:

權限規划

運維部:

 級別 權限
 初級運維: 查看系統信息,查看網絡狀態: 
/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 net1
useradd yunwei1 && echo '123456' | passwd --stdin yunwei1
useradd gaojiyunwei1 && echo '123456' | passwd --stdin gaojiyunwei1
useradd kaifa1 && echo '123456' | passwd --stdin kaifa1
groupadd net
groupadd kaifa
groupadd yunwei
groupadd gaojiyunwei
usermod -g yunwei yunwei1
usermod -g gaojiyunwei gaojiyunwei1
usermod -g net net1
usermod -g kaifa kaifa1
cat >>/etc/sudoers <<eof
User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_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_CMD
KAIFA ALL=(KAIFA) KAIFA_CMD
YUNWEI ALL=(YUNWEI) YUNWEI_CMD
GAOJIYUNWEI ALL=(GAOJIYUNWEI) GAOJIYUNWEI_CMD
eof
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM