邁向 RHCE 之路 (Day03) - 使用者帳號管理

1、前言

本文將針對使用者帳號管理的部份,進行相關的說明及設定實作。



文章目錄

1、前言
2、建立一般使用者帳號
3、使用者及群組 (User and Group)
4、鎖定使用者帳號 (Locking User Account)
5、Sudo 帳號管理機制



2、建立一般使用者帳號

在安裝 CentOS 作業系統過程中會要求您順便設定 root 管理者帳號,作業系統安裝完成後請使用 root 管理者帳號登入系統。Linux 系統管理者應該具備如同管理 Microsoft Windows 主機時同樣的作業系統安全性觀念,也就是要先建立一般使用者帳號來登入系統進行操作,待需要執行的動作需要提升至管理者權限時,才著手轉換將權限提升。因此持同樣的安全觀念當您首次登入 CentOS 作業系統後,建議您先為管理者建立一般使用者帳號後,再將該使用者帳號加入管理者群組當中。下列操作動作為先建立使用者家目錄資料夾,因為筆者習慣將使用者家目錄都集中於一個目錄內以便後續方便管理(預設使用者家目錄為存放至 /home 下)之後透過指令 adduser 建立一般使用者帳號 weithenn(-d 參數為指定該使用者家目錄位置),接著使用指令 passwd 設定使用者密碼,最後則是設定將該使用者加入管理者群組 wheel 當中。
mkdir /home/user                              //建立放置所有使用者家目錄的資料夾
adduser -d /home/user/weithenn weithenn   //建立使用者帳號 weithenn
passwd weithenn                               //設定使用者帳號 weithenn 的登入密碼
  Changing password for user weithenn.
  New UNIX password:         //輸入使用者密碼
  Retype new UNIX password:  //再輸入一次密碼以確認
  passwd: all authentication tokens updated successfully.    //密碼變更成功
vi /etc/group                                  //修改群組設定檔
  wheel:x:10:root,weithenn   //將使用者帳號 weithenn 加入管理者群組

  • /etc/passwd: 儲存使用者 帳號 資訊
  • /etc/shadow: 儲存使用者 密碼 資訊

如何識別超級使用者或一般使用者? 可從登入後符號來識別。
  • #: 超級使用者
  • $: 一般使用者

如下為利用 passwd 指令來變更使用者帳號密碼,僅 root 帳號才可變更其它使用者帳號的密碼。
passwd               //變更目前帳號的密碼
passwd weithenn    //變更指定使用者 (id) 的密碼 (僅 root 可使用)

下列指令為設定使用者帳號 (weithenn) 的密碼到期時間為 0 天 (也就是該使用者一登入系統便需要變更其密碼)。
change -d 0 weithenn    //強迫使用者變更密碼
su -                     //一般使用者切換為 root
su - weithenn           //root 切換為一般使用者查詢使用者資訊
  $id                      //查詢使用者帳號 weithenn 資訊
  uid=500(weithenn) gid=500(weithenn) groups=500(weithenn),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023




3、使用者及群組 (User and Group)

每個使用者帳號會有一個 唯一 的識別號碼稱為 UID (User ID Number) 並從序號 500 開始,有關使用者帳號資訊儲存於 /etc/passwd、/etc/shadow,有關使用者群組資訊儲存於 /etc/group、/etc/gshadow。

/etc/passwd: 使用者帳號資訊為 7 個欄位並使用冒號 (:) 隔開
  • Account ID: 使用者帳號名稱 (例如: weithenn)。
  • Password: 使用者密碼。
  • X: 此欄位值為 X 代表使用者帳號有設定密碼 (密碼儲存於 /etc/shadow)。
  • Empty: 此欄位值為 空白 代表使用者帳號不需密碼即可登入 (/etc/shadow 第二欄為 !!),可使用指令 passwd -S Account_ID 檢查使用者密碼資訊 (例如: passwd -S weithenn)。
  • UID: 使用者號碼 (User ID Number)。
  • GID: 使用者群組號碼 (Group ID Number)。
  • Remark: 使用者資訊,可使用指令 finger Account_ID 來 查詢 使用者資訊 (例如: finger weithenn),或者使用指令 chfn Account_ID 來 設定 使用者資訊 (例如: chfn weithenn)。
  • Home Directory: 使用者家目錄路徑,使用者帳號登入系統後預設目錄。
  • Shell: 使用者帳號登入後 第一個 執行程序。

查詢使用者帳號 weithenn 資訊 /etc/passwd、/etc/shadow 內容。
grep weithenn /etc/{passwd,shadow}
  /etc/passwd:weithenn:x:500:500::/home/user/weithenn:/bin/bash
  /etc/shadow:weithenn:$6$OZz6WwOz$LJhChpGypxqYRD.:15256:0:99999:7:::

/etc/group: 使用者群組資訊 4 個欄位並使用冒號 (:) 隔開
  • Group_ID: 群組名稱 (例如: weithenn)
  • Password: 群組密碼 (密碼儲存於 /etc/gshadow)
  • GID: 使用者群組號碼 (Group ID Number) 與 /etc/passwd 的 GID 欄位相互對應
  • Member: 群組成員,成員之間使用逗點 (,) 隔開



4、鎖定使用者帳號 (Locking User Account)

如何鎖定使用者帳號? 可為使用者密碼加上 鹽(Salt) 即可? Salt 簡單說在使用者密碼欄位加上調味,使密碼內容因些許變動達成鎖定使用者密碼目的。
grep weithenn /etc/shadow   //查詢使用者密碼資訊
  weithenn:$6$OZz6WwOz$LJhChpGypxqVU302s3zswDDsj78RNn9SHi/15256:0:99999:7:::
usermod -L weithenn         //鎖定使用者帳號
grep weithenn /etc/shadow   //再次查詢  weithenn:!$6$OZz6WwOz$LJhChpGypxqVU302s3zswDDsj78RNn9SHi/15256:0:99999:7:::

觀察可發現當執行指令 usermod -L 鎖定使用者帳號後,使用者密碼欄位 (第二欄) 最前面被加上了 ! 進行調味,若想解除使用者帳號鎖定可使用 usermod -U 指令解除。



5、Sudo 帳號管理機制

當所管理的 CentOS 主機擁有多個管理者進行管理時,該如何確定是哪個管理者使用 root 管理帳號對系統做了什麼事情? 傳統的切換方式 su – 不符合這樣的需求,有鑑於此可以透過 sudo 來達成這樣的查核需求。

Sudo 套件為彌補作業系統中內建身份切換指令 su 不足所發展出來的套件,透過設定後可以建立相關使用者權限群組,並給予不同權限來達到控管使用者權限的目的,同時配合參數設定可以隨時查閱哪位使用者執行過 sudo 指令提升權限,並且查出該使用者在權限提升後執行哪些動作,以便進行事後追查。

請使用 rpm 及 which 指令查詢系統是否安裝 sudo 套件(預設會安裝此套件)及相關指令是否存在,確認目前系統安裝此套件時請接著使用 visudo 指令修改 sudo 設定檔內容。建議不要使用 VI 或 VIM 編輯器修改 sudo 設定檔,原因除了 visudo 指令會自行尋找 sudo 設定檔 (/etc/sudoers) 並且進入編輯模式之外,當修改完成後若設定檔內容中有語法或斷行等錯誤,系統會顯示警告訊息提醒哪裡發生語法錯誤。
rpm -qa sudo                 //查詢系統是否安裝 sudo
  sudo-1.7.2p2-9.el6.i686
which sudo visudo           //查詢系統是否存在相關執行檔
  /usr/bin/sudo
  /usr/sbin/visudo

修改 sudo 設定檔內容將 wheel 群組那行的註解符號拿掉,並且加上 Log 記錄檔的內容 (/var/log/sudo.log),當 sudo 設定檔設定完畢後,只要有人執行 sudo 指令提升權限至管理者身份便會觸發剛才設定檔中 Log 設定,此時系統會自動產生 Log 檔案並將相關資訊寫入其中。
visudo                //修改 sudo 設定檔
  %wheel  ALL=(ALL)       ALL                    //移除此行註解符號#
  Defaults log_host, logfile=/var/log/sudo.log   //加上此行內容 (sudo 記錄檔)

上述 sudo 設定檔內容表示屬於 wheel 群組內使用者帳號,便可以使用 sudo 指令暫時提升權限為管理者帳號進行操作。當使用者第一次執行 sudo 指令時系統會再次詢問使用者密碼,成功通過密碼驗證 (Authentication) 後會暫時切換授權 (Authorization) 身份為管理者帳號 root 執行指令,並且 5 分鐘之內若該使用者再次執行 sudo 指令,系統便不會詢問使用者密碼。

測試 sudo 記錄檔機制是否正常運作,請另外開啟一個 SSH Client 視窗並使用一般使用者帳號遠端登入 CentOS 主機。例如 weithenn 這個一般使用者帳號(請確定使用者帳號已加入 wheel 群組)登入系統並嘗試執行 vipw 指令,相信會得到權限拒絕 (Permission denied) 訊息回應。此時可使用 sudo 指令搭配 vipw 指令再次執行即可修改使用者帳號設定檔內容。
vipw                 //試圖修改使用者帳號設定檔
  vipw: /etc/ptmptmp: Permission denied  //權限不足無法修改
  vipw: /etc/passwd is unchanged
id                   //確定使用者帳號已加入 wheel 群組
  uid=500(weithenn) gid=500(weithenn) groups=500(weithenn),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
sudo vipw            //搭配 sudo 指令再次試圖修改使用者帳號設定檔
  [sudo] password for weithenn:    //再次輸入使用者密碼 (正確驗證後即可修改 /etc/passwd)
  vipw: /etc/passwd unchanged      //可以進行修改,但使用者帳號設定檔內容未改變

當上述指令執行完畢後您可以接著查看 sudo 記錄檔便會看到相關的記錄內容,從 sudo 記錄檔內容中我們可以確定 sudo 記錄檔機制目前正確運作中。從 sudo 記錄檔中可以清楚得知是在什麼時間點 (Oct 9 11:26:50)、哪個系統使用者帳號 (weithenn)、在哪一台主機上 (Centos6)、從遠端登入此台主機 (pts/0)、在系統中哪個路徑 (/home/user/weithenn)、切換成什麼身份 (root)、執行什麼指令 (/usr/sbin/vipw)。
tail /var/log/sudo.log    //查看 sudo 記錄檔內容
  Oct  9 11:26:50 : weithenn : HOST=Centos6 : TTY=pts/0 ; PWD=/home/user/weithenn ; USER=root ; COMMAND=/usr/sbin/vipw

確定 sudo 指令及記錄檔正確運作後筆者習慣將 root 管理者帳號的密碼封鎖,屆時主機管理者進行主機管理時,便習慣使用一般使用者帳號登入配合 sudo 指令,需要時才提升為管理權限進行管理,不致習慣使用 su – 切換為 root 管理帳號逃避查核機制。要封鎖 root 管理者密碼請先將權限提升為 root 後,執行 vipw 指令修改 /etc/shadow 檔案,將第二個欄位(密碼欄位)內容修改為 * 即可。
vipw -s    //修改 /etc/shadow 檔案
  root:$1$NafUaauZ$9rErj.0J8ggb/WdpLsadH.:15126:0:99999:7:::  //修改前
  root:*:15124:0:99999:7:::                                   //修改後 (將第二欄位內容修改為 *)