企業生產環境用戶權限集中管理項目方案


title: 企業生產環境用戶權限集中管理項目方案
tags: 權限管理,權限集中,sudo


企業生產環境用戶權限集中管理項目方案

1. 問題現狀

當前我們公司服務器上百臺,每個服務器上的管理人員很多(開發+運維+DBA+產品+市場),在大家登陸Linux 服務器時,不同職能的員工水平不同,因此導致操作很不規範,root
權限氾濫(幾乎大部分人員都有root權限),經常導致文件等莫名其妙的丟失,老員工和新員工對服務器的熟知程度也不一樣,這樣使得公司服務器安全存在很大的不穩定性,及操作安全隱患,調查企業服務器環境,50%以上的安全問題來自內部而不是外部。爲了解決上述問題,單個用戶管理權限過大現狀,現提出針對Linux服務器用戶權限集中管理的解決方案。

2. 項目需求

我們希望超級用戶密碼掌握在少數或者唯一的管理員手中,又希望多個系統管理員或相關權限的人員,能 夠完成更多更復雜的自身職能相關的工作,又不至於越權操作導致系統安全隱患。
linux最小化原則:1 安裝軟件最小化 。2 目錄文件權限最小化。3用戶權限最小化。 4 程序權限運行最小化
那麼,如何解決多個系統管理員都能管理系統而又不讓超級權限氾濫的需求呢?這就需要sudo來替代管理或結合 su命令來完成這樣的苛刻且必要的企業服務器用戶管理需求。

3. 具體實現

針對公司裏不同部門,根據員工的具體工作職能(例如:開發,運維,數據庫管理員)。分等級、分層次的實現對linux服務器管理的權限最小化、規範化。這樣即使減少了運維管理成本,消除了安全隱患,又提高了工作效率,實現了高質量的、快速化的完成項目進度,以及日常系統維護。

4. 實施方案

說明:實施方案一般是由積極主動發現問題的運維人員提出問題,然後寫好方案,在召集大家討論最後確定的方案,實施部署,最後後期總結維護。
思想:在提出問題之前,一定要想到如何解決,一併發出來解決方案。
信息採集(含整個方案流程)

  1. 開會取得大佬支持,運維經理或總監,CTO技術總監,各部門的老大。
  2. 取得大佬支持後通過郵件獲取相關員工的權限信息,比如各部門經理整理歸類本部門需要登錄linux系統權限的人員名單,職位,及負責的業務及權限,如果說不清楚權限細節,就說負責的業務細節,這樣運維人員就可以確定需要啥權限了。
  3. 按照需要執行的linux命令程序及公司業務服務來規劃權限和人員對應配置,主要是運維人員根據上面收集的人員名單,需要的業務及權限角色,對應賬號配置權限,實際就是配置sudo配置文件
  4. 權限方案一旦實施後,所有員工必須通過《員工linux服務器管理權限申請表》來申請對應的權限,確定審批流程,規範化管理。這裏實施後把住權限申請流程很重要
  5. 寫操作說明,對各部門人員進行操作講解,sudo執行命令,涉及到PATH變量問題,運維提前處理好。
  6. 具體權限分配如下:
    企業生產環境用戶權限集中管理項目方案
    企業生產環境用戶權限集中管理項目方案
    企業生產環境用戶權限集中管理項目方案
    企業生產環境用戶權限集中管理項目方案

  7. 模擬創建3個初級運維賬號,一個高級運維,一個網絡工程師,一個運維經理,密碼統一爲11111111
    [root@maiyat ~]# for n in chuji001 chuji002 chuji003 net001 manager001 ; do useradd $n ; echo "11111111" |passwd --stdin $n ;done;
    [root@maiyat ~]# useradd GY01 
    [root@maiyat ~]# echo "11111111" |passwd --stdin GY01
    [root@maiyat ~]# useradd senior001
    [root@maiyat ~]# echo "11111111" |passwd --stdin senior001

    建立五個開發屬於python組

    [root@maiyat ~]# groupadd -g 888 python
    [root@maiyat ~]# for n in `seq -f kaifa%02g 5` ; do useradd -g 888 $n ;echo "11111111" |passwd --stdin $n; done;

    建立開發經理和高級開發賬號

[root@maiyat ~]# useradd kaifamanager |echo "11111111" |passwd --stdin kaifamanager
[root@maiyat ~]# useradd senior002
[root@maiyat ~]# echo "11111111" |passwd --stdin senior001

8 . 更改/etc/sudoers文件
在sudoers後面加入下列內容:

# Cmnd_Alias by Ouyoung
Cmnd_Alias CYCMD1 = /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /bin/netstat, /sbin/ifconfig, /sbin/route
Cmnd_Alias GYCMD1 = /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /bin/netstat, /sbin/ifconfig, /sbin/route, \
 /sbin/iptables, /etc/init.d/*, /bin/nice, /bin/kill
Cmnd_Alias CKCMD1 = /usr/bin/tail /app/log*, /bin/grep /app/log/*, /bin/cat, /bin/ls
Cmnd_Alias GKCMD1 = /sbin/service, /sbin/chkconfig, /usr/bin/tail /app/log*, /bin/grep /app/log/*, /bin/cat, /bin/ls
Cmnd_Alias KMCMD1 = ALL, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root, !/bin/vi /etc/sudoers, !/usr/bin/vim /etc/sudoers, !/usr/sbin/visudo
Cmnd_Alias GWCMD1 = /bin/hostname, /bin/netstat, /sbin/ifconfig, /sbin/route, /sbin/iptables, /bin/ping, /usr/bin/netstat
# User Aliases by Ouyoung
User_Alias CYUSER = chuji001, chuji002, chuji003, chuji004, chuji005
User_Alias GYUSER = GY01, senior001
User_Alias CKUSER = %python
User_Alias GKUSER = senior002
User_Alias MANUSER = kaifamanager
User_Alias GWUSER = net001
# config
CYUSER ALL=(ALL) CYCMD1
GYUSER ALL=(ALL) GYCMD1
CKUSER ALL=(ALL) CKCMD1
GKUSER ALL=(ALL) GKCMD1
MANUSER ALL=(ALL) NOPASSWD: KMCMD1
GWUSER ALL=(ALL) GWCMD1

9 . 驗證配置如下:

用戶 kaifamanager 可以在該主機上運行以下命令:
    (ALL) NOPASSWD: ALL, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root, !/bin/vi /etc/sudoers, !/usr/bin/vim, !/usr/sbin/visudo
    用戶 kaifa01 可以在該主機上運行以下命令:
    (ALL) /usr/bin/tail /app/log*, /bin/grep /app/log/*, /bin/cat, /bin/ls
用戶 kaifa02 可以在該主機上運行以下命令:
    (ALL) /usr/bin/tail /app/log*, /bin/grep /app/log/*, /bin/cat, /bin/ls

10 . 驗證成功後發郵件知所有有關的人員權限配置成功,並附帶操作說明,有必要的話培訓講解
11 . 制定權限申請流程及申請表
12 . 後期維護,不是特別緊急的需求,一律需要走申請流程。
服務器多了,如果同業務的服務器,且用戶管理需求一樣,可以通過分發工具批量分發/etc/sudoers(注意用戶,組及權限),注意授權ALL再進行排除時有時候會讓我們防不勝防,這種先開後關的策略不是好的策略

5. sudo配置注意事項

  1. 別名必須全部大寫。
  2. 命令別名下的成員必須是文件或目錄的絕對路徑。
  3. 一個別名下有多個成員,成員與成員之間用空格分開,每個成員後面接逗號,成員必須是有效實際存在的。
  4. 別名成員受別名類型 User_Alias,Cmnd_Alias,Host_Alias,Runas_Alias制約,定義什麼類型別名,就要有什麼類型的成員相配。
  5. 別名規則是每行算一個規則,如果一個別名規則一行容不下時,可以通過“\”來續行。
  6. 指定切換的用戶要用()括號括起來,如果省略括號,則默認爲root用戶;如果括號裏是ALL,則代表能切換到所有用戶;
  7. 如果不需要密碼直接運行命令的,應該加NOPASSWD:參數。
  8. 禁止某類程序或命令執行,要在命令動作前面加!號,並且放在允許執行命令的後面。
  9. 用戶組前面必須加%號
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章