Linux用戶組&許可權管理

  • 2019 年 10 月 6 日
  • 筆記

Linux是一個多用戶的作業系統,引入用戶,可以更加方便管理Linux伺服器,系統默認需要以一個用戶的身份登入,而且在系統上啟動進程也需要以一個用戶身份去運行,用戶可以限制某些進程對特定資源的許可權控制。

本章向讀者介紹Linux系統如何管理創建、刪除、修改用戶角色、用戶許可權配置、組許可權配置及特殊許可權深入剖析。

1 Linux用戶及組

Linux作業系統對多用戶的管理,是非常繁瑣的,所以用組的概念來管理用戶就變得簡單,每個用戶可以在一個獨立的組,每個組也可以有零個用戶或者多個用戶。

Linux系統用戶是根據用戶ID來識別的,從默認ID編號從0開始,但是為了和老式系統兼容,用戶ID限制在60000以下,Linux用戶分總共分為三種,分別如下:

  • root用戶 (ID 0)
  • 系統用戶 (ID 1-499)
  • 普通用戶 (ID 500以上)

Linux系統中的每個文件或者文件夾,都有一個所屬用戶及所屬組,使用id命令可以顯示當前用戶的資訊,使用passwd命令可以修改當前用戶密碼。Linux作業系統用戶的特點如下:

  • 每個用戶擁有一個UserID,作業系統實際讀取的是UID,而非用戶名;
  • 每個用戶屬於一個主組,屬於一個或多個附屬組,一個用戶最多有31個附屬組;
  • 每個組擁有一個GroupID;
  • 每個進程以一個用戶身份運行,該用戶可對進程擁有資源控制許可權;
  • 每個可登陸用戶擁有一個指定的Shell環境。

2 Linux用戶管理

Linux用戶在作業系統可以進行日常管理和維護,涉及到的相關配置文件如下:

  • /etc/passwd 保存用戶資訊
  • /etc/shdaow 保存用戶密碼(以加密形式保存)
  • /etc/group 保存組資訊
  • /etc/login.defs 用戶屬性限制,密碼過期時間,密碼最大長度等限制
  • /etc/default/useradd 顯示或更改默認的useradd配置文件

如需創建新用戶,可以使用命令useradd,執行命令useradd jfedu1即可創建jfedu1用戶,同時會創建一個同名的組jfedu1,默認該用戶屬於jfedu1主組。

Useradd jfedu1命令默認創建用戶jfedu1,會根據如下步驟進行操作:

  • 讀取/etc/default/useradd,根據配置文件執行創建操作;
  • 在/etc/passwd文件中添加用戶資訊;
  • 如使用passwd命令創建密碼,密碼會被加密保存在/etc/shdaow中;
  • 為jfedu1創建家目錄:/home/jfedu1;
  • 將/etc/skel中的.bash開頭的文件複製至/home/jfedu1家目錄;
  • 創建與用戶名相同的jfedu1組,jfedu1用戶默認屬於jfeud1同名組;
  • Jfedu1組資訊保存在/etc/group配置文件中。

在使用useradd命令創建用戶時,可以支援如下參數:

用法:useradd [選項] 登錄useradd -Duseradd -D [選項]選項:-b, –base-dir BASE_DIR 指定新賬戶的家目錄;-c, –comment COMMENT 新賬戶的 GECOS 欄位;-d, –home-dir HOME_DIR 新賬戶的主目錄;-D, –defaults 顯示或更改默認的 useradd 配置;-e, –expiredate EXPIRE_DATE 新賬戶的過期日期;-f, –inactive INACTIVE 新賬戶的密碼不活動期;-g, –gid GROUP 新賬戶主組的名稱或ID;-G, –groups GROUPS 新賬戶的附加組列表;-h, –help 顯示此幫助資訊並推出;-k, –skel SKEL_DIR 使用此目錄作為骨架目錄;-K, –key KEY=VALUE 不使用 /etc/login.defs 中的默認值;-l, –no-log-init 不要將此用戶添加到最近登錄和登錄失敗資料庫;-m, –create-home 創建用戶的主目錄;-M, –no-create-home 不創建用戶的主目錄;-N, –no-user-group 不創建同名的組;-o, –non-unique 允許使用重複的 UID 創建用戶;-p, –password PASSWORD 加密後的新賬戶密碼;-r, –system 創建一個系統賬戶;-R, –root CHROOT_DIR chroot 到的目錄;-s, –shell SHELL 新賬戶的登錄 shell;-u, –uid UID 新賬戶的用戶 ID;-U, –user-group 創建與用戶同名的組;-Z, –selinux-user SEUSER 為SELinux 用戶映射使用指定 SEUSER。

Useradd案例演示:

  1. 新建jfedu用戶,並加入到jfedu1,jfedu2附屬組;

useradd -G jfedu1,jfedu2 jfedu

  1. 新建jfedu3用戶,並指定新的家目錄,同時指定其登陸的SHELL;

useradd jfedu3 -d /tmp/ -s /bin/bash

3 Linux組管理

所有的Linux或者Windows系統都有組的概念,通過組可以更加方便的管理用戶,組的概念應用於各行行業,例如企業會使用部門、職能或地理區域的分類方式來管理成員,映射在Linux系統,同樣可以創建用戶,並用組的概念對其管理。

Linux組有如下特點:

  • 每個組有一個組ID;
  • 組資訊保存在/etc/group中;
  • 每個用戶至少擁有一個主組,同時還可以擁有31個附屬組。

通過命令groupadd、groupdel、groupmod來對組進行管理,詳細參數使用如下:

groupadd用法-f, –force 如果組已經存在則成功退出;並且如果 GID 已經存在則取消 –g;-g, –gid GID 為新組使用 GID;-h, –help 顯示此幫助資訊並推出;-K, –key KEY=VALUE 不使用 /etc/login.defs 中的默認值;-o, –non-unique 允許創建有重複 GID 的組;-p, –password PASSWORD 為新組使用此加密過的密碼;-r, –system 創建一個系統賬戶;groupmod用法-g, –gid GID 將組 ID 改為 GID;-h, –help 顯示此幫助資訊並推出;-n, –new-name NEW_GROUP 改名為 NEW_GROUP;-o, –non-unique 允許使用重複的 GID;-p, –password PASSWORD 將密碼更改為(加密過的) PASSWORD;groupdel用法groupdel jfedu 刪除jfedu組;

Groupadd案例演示:

  1. groupadd創建jingfeng組

groupadd jingfeng

  1. groupadd創建jingfeng組,並指定GID為1000;

groupadd -g 1000 jingfeng

  1. groupadd創建一個system組,名為jingfeng組

groupadd -r jingfeng

Groupmod案例演示:

  1. groupmod修改組名稱,將jingfeng組名,改成jingfeng1;

groupmod -n jingfeng1 jingfeng

  1. groupmod修改組GID號,將原jingfeng1組gid改成gid 1000;

groupmod –g 1000 jingfeng1

4 Linux用戶及組案例

Useradd主要用於新建用戶,而用戶新建完畢,可以使用usermod來修改用戶及組的屬性,如下為usermod詳細參數:

用法:usermod [選項] 登錄選項:-c, –comment 注釋 GECOS 欄位的新值;-d, –home HOME_DIR 用戶的新主目錄;-e, –expiredate EXPIRE_DATE 設定帳戶過期的日期為 EXPIRE_DATE;-f, –inactive INACTIVE 過期 INACTIVE 天數後,設定密碼為失效狀態;-g, –gid GROUP 強制使用 GROUP 為新主組;-G, –groups GROUPS 新的附加組列表 GROUPS;-a, –append GROUP 將用戶追加至上邊 -G 中提到的附加組中,並不從其它組中刪除此用戶;-h, –help 顯示此幫助資訊並推出;-l, –login LOGIN 新的登錄名稱;-L, –lock 鎖定用戶帳號;-m, –move-home 將家目錄內容移至新位置 (僅於 -d 一起使用);-o, –non-unique 允許使用重複的(非唯一的) UID;-p, –password PASSWORD 將加密過的密碼 (PASSWORD) 設為新密碼;-R, –root CHROOT_DIR chroot 到的目錄;-s, –shell SHELL 該用戶帳號的新登錄shell環境;-u, –uid UID 用戶帳號的新UID;-U, –unlock 解鎖用戶帳號;-Z, –selinux-user SEUSER 用戶賬戶的新SELinux 用戶映射。

Usermod案例演示:

  1. 將jfedu用戶屬組修改為jfedu1,jfedu2附屬組;

usermod -G jfedu1,jfedu2 jfedu

  1. 將jfedu用戶加入到jfedu3,jfedu4附屬組,-a為添加新組,原組保留;

usermod –a -G jfedu3,jfedu4 jfedu

  1. 修改jfedu用戶,並指定新的家目錄,同時指定其登陸的SHELL;

usermod -d /tmp/ -s /bin/sh jfedu

  1. 將jfedu用戶名修改為jfedu1;

usermod -l jfedu1 jfedu

  1. 鎖定jfedu1用戶及解鎖jfedu1用戶方法;

usermod –L jfedu1usermod -U jfedu1

Userdel案例演示:

使用userdel可以刪除指定用戶及其用戶的郵箱目錄或者Selinux映射環境:

  • userdel jfedu1 保留用戶的家目錄;
  • userdel -r jfedu1 刪除用戶及用戶家目錄,用戶login系統無法刪除;
  • userdel -rf jfedu1 強制刪除用戶及該用戶家目錄,不論是否login系統。

5 Linux許可權管理

Linux許可權是作業系統用來限制對資源訪問的機制,許可權一般分為讀、寫、執行。系統中每個文件都擁有特定的許可權、所屬用戶及所屬組,通過這樣的機制來限制哪些用戶或用戶組可以對特定文件進行相應的操作。

Linux每個進程都是以某個用戶身份運行,進程的許可權與該用戶的許可權一樣,用戶的許可權越大,則進程擁有的許可權就越大。

Lnux中有的文件及文件夾都有至少許可權三種許可權,常見的許可權如表5-1所示:

許可權

對文件的影響

對目錄的影響

r(讀取)

可讀取文件內容

可列出目錄內容

w(寫入)

可修改文件內容

可在目錄中創建刪除內容

x(執行)

可作為命令執行

可訪問目錄內容

目錄必須擁有x許可權,否則無法查看其內容

表5-1 Linux 文件及文件及許可權

Linux許可權授權,默認是授權給三種角色,分別是user、group、other,Linux許可權與用戶之間的關聯如下:

  • U代表User,G代表Group,O代表Other;
  • 每個文件的許可權基於UGO進行設置;
  • 許可權三位一組(rwx),同時需授權給三種角色,UGO;
  • 每個文件擁有一個所屬用戶和所屬組,對應UGO,不屬於該文件所屬用戶或所屬組使用O來表示;

在Linux系統中,可以通過ls –l查看jfedu.net目錄的詳細屬性,如圖5-1所示:

drwxrwxr-x 2 jfedu1 jfedu1 4096 Dec 10 01:36 jfedu.net

圖5-1 Linux jfedu.net目錄詳細屬性

jfedu.net目錄屬性參數詳解如下:

  • d 表示目錄,同一位置如果為-則表示普通文件;
  • rwxrwxr-x 表示三種角色的許可權,每三位為一種角色,依次為u,g,o許可權,如上則表示user的許可權為rwx,group的許可權為rwx,other的許可權為r-x;
  • 2表示文件夾的鏈接數量,可理解為該目錄下子目錄的數量;
  • 從左到右,第一個jfedu1表示該用戶名,第二個jfedu1則為組名,其他人角色默認不顯示;
  • 4096表示該文件夾佔據的位元組數;
  • Dec 10 01:36 表示文件創建或者修改的時間;
  • Jfedu.net為目錄的名,或者文件名。 關於運維學習、分享、交流,筆者開通了微信公眾號【運維貓】,感興趣的朋友可以關注下,歡迎加入,建立屬於我們自己的小圈子,一起學運維知識。