隨着公司的服務器愈來愈多,人員流動性也開始與日俱增,以往管理服務器的陳舊思想應當摒棄,公司須要有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 | 普通用戶的權限 不加入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 |