關于用戶管理的命令回顧:visudo
1. 關于用戶管理命令的回顧
<1> useradd命令
useradd
-g:指定組
-u:指定uid
-c:注釋
-s: 指定用戶登入后所使用的shell。
-d: 指定用戶登入時的起始目錄
-G: 指定用戶所屬的附加群組(也就是多群組)
-M: 不要自動建立用戶的登入目錄
-D: 變更預設值(不太理解)
-e:指定賬戶的有效期限
<2> 其他命令
userdel
usermod
groupadd
groupdel
passwd
chage
su
sudo
visudo
groups
id
w,whoami,last
2. 正文
<1> 問題現狀
當公司里的服務器有幾十甚至超過上百臺,并且能操作服務器的人員很多(開發+運維+架構+DBA),當大家登陸使用Linux服務器時,不同職位的員工水平不同,導致操作不符合規范,不同部門的人員的服務器權限沒有明確的規范,經常導致文件丟失,這樣導致服務器的安全存在很大問題。為了解決以上問題,單個用戶管理權限過大現狀,現提出針對Linux服務器用戶權限集中管理的解決方案。
<2> 需求分析
生產環境中,我們既希望root密碼掌握在少數人手中,又希望多個服務器系統管理員或者相關職能的人,能夠完成更多與自身職能相關的服務器工作,又不導致越權操作導致服務器安全隱患。
在此就需要sudo
管理來和su
來一起完成生產環境服務器對用戶的管理需求。
<3> 實現方針
生產環境中,應該針對不同部門(開發部門,運維部門,DBA,網絡部門等)的不同職能的工作人員(項目經理,開發主管,運維主管,架構師,DBA,網絡工程師,開發工程師,運維工程師等),分等級的分配服務器的權限,盡量使對應人員的服務器權限最小化。
這樣即減少了服務器安全隱患,又讓不同部門不同職能的工作人員提升工作效率,提升項目進度。
<4>. 實施過程
(1)信息收集
1.1 各部門收集匯總不同職能的工作人員所需要的服務器權限,并有各部門負責人審核對應員工的服務器權限需求。并且整理成表格如下,之后針對此表格舉行會議進行終審。
舉例的表格如下:
姓名 | 價格 | jiage | shuliang |
---|---|---|---|
張三 | php中級開發 | 旅游業務開發 | 上傳文件到Nginx |
王五 | 開發經理 | **項目負責 | ALL,但不能修改密碼 |
… |
1.2審核通過后,運維部門根據表格進行相關人員的測試
服務器權限配置,也就visudo
來進行配置。配置完成后運維部門負責人進行審核并交由測試部門測試,匯報相關結果。測試環境沒有出現問題后,配置正式服務器環境,并進一步交由測試部門測試并給出結果。相關人員服務器權限存入數據庫并備份。
1.3方案實施后,新入員工須通過《員工服務器管理權限申請表》來申請對應的權限,并將結果記錄進數據庫。相關人員的服務器權限變動須提交部門負責人審批,并將結果實時記錄進入數據庫。
1.4運維部門針對服務器權限寫出文檔,并對相關人員進行培訓。
權限分配審核結果的權限分配舉例(不同公司根據不同業務討論給出,這里不羅列給出):
zhineng | master |
---|---|
初級運維 | /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig… |
高級運維 | /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/mount,/usr/bin/yum,/bin/umount |
運維經理 | ALL |
開發 | /sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls |
… |
(2)模擬用戶測試
測試建立3個初級運維,1個高級運維,1個網絡工程師,1個運維經理,方便起見,密碼統一設置為111111
for user in junSa001 junSa002 junSa003 senSa001 net001 saManager001do useradd $user echo "111111"|passwd --stdin $userdone
之后建立5個開發人員,屬于phpers組
groupadd -g 666 phpersfor n in `seq 5`do useradd -g phpers php00$n echo "111111"|passwd --stdin php00$ndone
(以下所有配置寫入visudo)定義各個部門各個職能可執行的命令組:
##Cmnd_Alias 初級運維命令組 Cmnd_Alias JY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig ##Cmnd_Alias 高級運維命令組 Cmnd_Alias SY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/mount,/usr/bin/yum,/bin/umount ##Cmnd_Alias 開發命令組 Cmnd_Alias KF_CMD_1 = /sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls
之后給用戶組定義別名:
##User_Alias User_Alias CHUJIADMINS = junSa001 junSa002 junSa003 User_Alias GWNETADMINS = net001 ##phpers組 User_Alias CHUJI_KAIFA = %phpers
定義OPERATOR,執行root的權限命令
##Runas_AliasRunas_Alias OP = root
接下來就是主配置了:
CHUJIADMIS ALL=(OP) JY_CMD_1 GWNETADMINS ALL=(OP) SY_CMD_1 CHUJI_KAIFA ALL=(OP) KF_CMD_1 kaifaManager ALL=(ALL) ALL,!/usr/bin/passwd,!/usr/sbin/visudo,!/usr/bin/vi *sudoer*##....
切換到junSa001用戶,執行sudo -l命令,可以看到junSa001用戶可以執行的命令:
User chuji001 may run the following commands on this host:(root) /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/ifconfig,/bin/netstat, /sbin/route
測試發現,執行sudo useradd,則沒有權限執行命令:
[chuji001@localhost ~]$ sudo useradd kkkk Sorry, user chuji001 is not allowed to execute '/usr/sbin/useradd kkkk' as root on localhost.localdomain.
原創文章,作者:21期王逸凡,如若轉載,請注明出處:http://www.www58058.com/52798