Linux 用戶管理

1 用戶和用戶組分類

Linux 系統是一個多用戶多任務的分時操做系統,任何一個要使用系統資源的用戶,都必需要擁有一個帳號進入系統。帳號實質上就是一個用戶在系統上的標識,系統根據該標識分配不一樣的權限和資源。一個帳號包含用戶用戶組兩部分。shell

  • 用戶分類:安全

    • 超級管理員:具備操做系統的一切權限,UID 爲 0 。通常是 "root"用戶,不建議一個系統有多個超級用戶
    • 系統用戶(僞用戶):方便系統管理,用來運行系統和服務的用戶,沒有密碼不能登陸,UID在 1 - 499 之間。好比有些服務不但願使用 root 的身份去執行,而是但願使用權限更小的帳號去執行,因此咱們就得要提供這些運做程序的擁有者
    • 普通用戶:可登入用戶,擁有系統部分權限的用戶,UID 從 500 開始。
  • 用戶組分類:bash

    • 初始組:用戶剛登陸入系統就所在的組,用戶的必需要有一個初始組且只能有一個,通常初始組名和用戶名相同
    • 附加組:用戶除了初始組外加入的其餘組,每一個用戶能夠擁有0或多個附加組

2 用戶和用戶組相關文件

  • 用戶信息文件:/etc/passwd服務器

    • 該用戶存放系統全部用戶的信息,每一行內容表明一個用戶,以 ":" 分割共 7 列。以 root 用戶爲例:"root:x:0:0:root:/root:/bin/bash"
    • 第 1 列用戶名
    • 第 2 列密碼位。早期 Unix 系統的密碼就是放在這字段上,可是由於這個文件的特性是全部的程序都可以讀取,這樣一來很容易形成密碼數據被竊取, 所以後來就將這個字段的密碼數據給放到 "/etc/shadow" 中了,因此這裏會看到一個 "x"
    • 第 3 列用戶ID,即 UID網絡

      • 0 (超級管理員):當 UID 爲 0 時,表明該用戶是超級管理員。因此當你要讓其餘的用戶名稱也具備 root 的權限時,將該用戶的 UID 改成 0 便可,也就是說一個系統上超級管理員不見得就是 root,很不建議有多個用戶的 UID 是 0
      • 1 - 499 (系統用戶):這些 UID 是保留給系統用戶的 UID,也就是說 UID 在 1 - 499 範圍的用戶是不能登陸的,只能用來運行系統或者服務。其中,UID 1 - 99 是系統自動建立帳號時使用的; UID 100 - 499 是用戶有建立系統帳號需求時使用的
      • 500 - 60000 (普通用戶):普通用戶UID。實際上Linux 2.6.x 內核之後能夠支持 2^32-1 這麼多了
    • 第 4 列用戶初始組ID,即 GID
    • 第 5 列用戶信息說明。這個字段基本上並無什麼重要用途,只是用來解釋這個帳號的意義而已
    • 第 6 列用戶家目錄,即用戶登陸後默認進入的目錄。若是你想讓某個用戶登陸後默認進入其餘目錄,修改這列就好了,前提該用戶要有進入這個目錄的權限
    • 第 7 列登陸後獲取的shell。通常都是 "/bin/bash",注意系統用戶不能登陸因此這列是一個特殊shell "/sbin/nologin"
  • 用戶密碼文件:/etc/shadowui

    • 該文件存放的實際上纔是用戶的密碼信息,每行表明一個用戶的密碼信息,以 ":" 分割共 9 列。早期的密碼(加密過的)存放在 "/etc/passwd" 文件的第二列,但因爲 "/etc/passwd" 文件權限是 "-rw-r--r--" 容易被竊取,後來把密碼放到了 "/etc/shadow" 文件,且文件權限爲 "----------" 。以 root 用戶密碼信息爲例:root:$6$jOouAVJYJ5Ys2U1q$5j..L0vQV8W2ih8M2AK50PFhHJfJRUMIyMLkZuCezV6HOoX4Zls3yH7JdJlAPz6bp3DaKNhVh4ewXzxTivRC9/:18020:0:99999:7:::
    • 第 1 列用戶名。對應 "/etc/passwd" 文件中的用戶名
    • 第 2 列加密密碼。若是是 "!!" 或者 "*",表明沒有密碼不能登陸,系統用戶就是 "!!" 或者 "*"
    • 第 3 列密碼最近一次改動日期。值是以 1970 年 1 月 1 日做爲 1 而累加得來得天數加密

      • 天數轉日期:date -d "1970-01-01 18020 days"
      • 日期傳天數:echo $(($(date --date="2019/05/04" +%s)/86400+1))
    • 第 4 列兩次密碼修改時間間隔(與第3列相比)。該用戶的密碼在最近一次被更改後須要通過幾天才能夠再被變動,若是是 0 的話表示密碼隨時能夠更動的意思。這的限制是爲了怕密碼被某些人一改再改而設計的,若是設定爲 20 天的話,那麼當你設定了密碼以後, 20 天以內都沒法改變這個密碼
    • 第 5 列密碼有效期(與第3列相比)。常常變動密碼是個好習慣!爲了強制要求用戶變動密碼,這個字段能夠指定在最近一次更改密碼後, 在多少天數內須要再次變動密碼才行
    • 第 6 列密碼到期前的警告天數(與第5列相比)。當用戶的密碼有效期限快要到的時候,系統會依據這個字段的設定,發出警告信息給這個用戶,提醒他 "再過 n 天你的密碼就要過時了,請儘快從新設定你的密碼",如上面的例子,則是密碼到期以前的 7 天以內,系統會警告該用戶
    • 第 7 列密碼到期後的寬限天數(與第5列相比)。若是設置了寬限天數,密碼到期後不會當即失效,再寬限天數內任務沒有更改密碼,密碼纔會真正的失效
    • 第 8 列帳號失效日期。這個日期跟第三個字段同樣,都是使用 1970 年以來的總日數設定。這列表示: 該用戶在此字段規定的日期以後,將沒法再使用,就是所謂的帳號失效,此時不論你的密碼是否有過時,這個帳號都不能再被使用! 這個字段會被使用一般應該是在收費服務的系統中,你能夠規定一個日期讓該帳號不能再使用了
    • 第 9 列保留。這列是保留的,看之後有沒有新功能加入
  • 用戶組文件:/etc/group操作系統

    • 該文件存放用戶組信息,每行表明一個用戶組信息,以 ":" 分割共 4 列。以 root 組信息爲例:root:x:0:
    • 第 1 列用戶組名
    • 第 2 列用戶組密碼位。和用戶密碼同樣,組密碼已經移動到 "/etc/gshadow" 文件中去,所以這個字段只存在一個 "x" 而已
    • 第 3 列用戶組ID,即 GID。對應 "/etc/passwd" 文件中的用戶組ID
    • 第 4 列組內用戶列表(不包含以該組爲初始組的用戶),多個用戶名以","隔開。例如如今須要把 "user1" 和 "user2" 也加入到該 root 組,則 root 組信息變爲 "root:x:0:user1,user2"
  • 用戶組密碼文件:/etc/gshadow設計

    • 若是給某個用戶設定了組管理員,並給該用戶組設定了組密碼,組密碼就保存在這個文件中,組管理員就能夠利用這個密碼管理這個用戶組了。一般不多有這個機會設定用戶組管理員,這裏只對內容結構作一下簡單說明,以 ":" 分割共 4 列
    • 第 1 列用戶組名。對應 "/etc/group" 文件中的用戶組名
    • 第 2 列加密的用戶組密碼
    • 第 3 列用戶組的管理員帳號。管理員擁有對該組添加和刪除帳號的權限
    • 第 4 列組內用戶列表
  • 用戶家目錄日誌

    • 通常 root 用戶的家目錄爲 "/root",普通用戶的家目錄爲 "/home/xxx"
  • 用戶郵箱

    • 用戶郵箱在 "/var/spool/mail/" 目錄下,例如 "user1" 用戶的郵箱是 "/var/spool/mail/user1"
  • 用戶模板文件:/etc/skel/

    • 新建一個用戶的時候,"/etc/skel/" 目錄下的文件都會原封不動的複製到新建用戶的家目錄下。例如,提早在 "/etc/skel/" 目錄下放入一個用戶使用手冊文件 "manual.pdf",再建立一個新用戶,該用戶登陸後就會在他的家目錄下看到這個用戶使用手冊文件了

上面介紹了用戶和用戶組相關的文件,那麼用戶登陸系統的過程,是如何涉及到這些文件的呢?當你輸入用戶名和密碼後,系統大體作了以下幾步處理:

  1. 先找尋 /etc/passwd 裏面是否有你輸入的用戶名,若是沒有則跳出,若是有的話則將該用戶名對應的 UIDGID (關聯 /etc/group 中的GID) 讀出來,另外該用戶的家目錄與 shell 設定也一併讀出來;
  2. 覈對密碼錶。這時 Linux 會進入 /etc/shadow 裏面找出對應的用戶,而後覈對一下你剛剛輸入的密碼與裏頭的密碼是否相符;
  3. 若是一切都 OK 的話,就進入 Shell 控管的階段。

3 用戶管理

3.1 添加用戶:useradd

命令格式:useradd [選項] 用戶名

  • 選項:

    • -u 用戶ID:指定用戶ID。通常指定 UID 要大於500,若是沒有特殊需求儘可能不要指定,由系統自動分配便可
    • -g 初始組名:指定用戶所屬初始組。儘可能不要指定,系統會自動建立一個和新增用戶名相同的組最爲該新增用戶的初始組
    • -G 附加組名:指定用戶所屬附加組。若是要指定多個附加組,組名用 "," 隔開
    • -c 說明文字:加上備註文字。備註文字會保存在 "/etc/passwd" 文件的第 5 列
    • -d 家目錄:指定用戶家目錄
    • -s shell:指定用戶登入後所使用的 shell 程序

3.2 用戶密碼設定:passwd

剛添加成功的用戶沒有密碼(此時該用戶的密碼是 "!!" ),還不能用於登陸系統,須要經過 "passwd" 命令設置密碼後才能登陸。固然,"passwd" 命令也能用來修改已存在的用戶密碼,以及管理用戶密碼有效時間等。

命令格式:passwd [選項] [用戶名]

  • 選項:

    • -l--lock:臨時鎖住密碼使密碼失效。即把 "/etc/shadow" 第二列密文密碼前面多加個 "!!"
    • -u--unlock:解開已鎖住的用戶密碼。相對於 -l 的反向操做
    • -d--delete:刪除現有用戶的密碼
    • -n 天數:兩次密碼修改時間間隔。對應"/etc/shadow" 第 4 列
    • -x 天數:密碼有效期。對應"/etc/shadow" 第 5 列。
    • -w 天數:密碼到期前的警告天數。對應"/etc/shadow" 第 6 列
    • -i 天數:密碼到期後的寬限天數。對應"/etc/shadow" 第 7 列
    • -S--status:顯示用戶密碼狀態
    • --stdin:從標準輸入讀取令牌。主要用在經過腳本批量添加用戶,不須要交互的場景

      • 示例,修改 "user1" 的密碼爲 "123456":echo "123456" | passwd --stdin user1 。儘可能不要在shell裏這樣操做,history 會記錄執行過的歷史命令,設置的密碼可能不被泄露
  • 用戶名:用戶名省略,默認修改當前登陸用戶的密碼。通常用戶修改本身的密碼直接執行 "passwd" 便可
注意:只有管理者才能修改其餘用戶的密碼,普通用戶只能修改本身的密碼

3.3 用戶信息修改:usermod

命令格式:usermod [選項] 用戶名

  • 選項:

    • -u 用戶ID:修改用戶ID
    • -d 家目錄:修改用戶家目錄
    • -c 用戶說明:修改用戶說明
    • -g 初始組名:修改用戶初始組
    • -G 附加組名:修改用戶附加組
    • -s shell:修改用戶登入後所使用的 shell 程序
    • -e 日期:修改帳號失效日期,格式是 "YYYY-MM-DD"。即修改 /etc/shadow 第 8 列數據
    • -l 新用戶名:修改用戶名
    • -L:臨時鎖定帳號。與 "passwd -l 用戶名" 做用同樣
    • -U:解鎖帳號

3.3 用戶刪除:userdel

命令格式:userdel [選項] 用戶名

  • 選項:

    • -r:同時刪除用戶家目錄和用戶郵件

4 用戶組管理

4.1 添加組:groupadd

命令格式:groupadd [選項] 組名

  • 選項:

    • -g 組ID:指定組ID
    • -r:建立系統用戶組,系統用戶組的組ID小於500。與 /etc/login.defs 內的 GID_MIN 有關

4.2 組信息修改:groupmod

命令格式:groupmod [選項] 組名

  • 選項:

    • -g 組ID:修改組ID
    • -n 新組名:修改組名

4.3 組刪除:groupdel

命令格式:groupdel 組名

注意:若是用戶組是某個用戶的初始組,必須先刪除這個用戶或者修改該用戶的GID後,才能刪除該用戶組

4.4 切換有效組:newgrp

若是用戶 user1 有個多個用戶組(初始組:user1,附加組:group1,group2),則登陸後默認的有效組是該用戶的初始組user1,此時該用戶建立的文件所屬組就是 user1,若是讓該用戶建立的文件所屬組爲 group1,就須要使用 "newgrp" 命令切換有效組爲 group1

命令格式:newgrp 組名

4.5 組密碼和組管理員功能:gpasswd

若是管理員太忙了,能夠爲某個用戶組設置一個管理員來幫忙管理該組成員用戶。 通常組密碼和組管理員功能其實不多使用了,徹底能夠由 "sudo" 取代。

命令格式:gpasswd [選項] 組名

  • 選項:

    • -a 用戶名:添加用戶到該組
    • -d 用戶名:從組中刪除某個用戶
    • -A 用戶1,用戶2,...:添加組管理員列表
    • -M 用戶1,用戶2,...:添加組成員列表。注意,-a 是追加,-M 是會覆蓋原有值
    • -r:刪除組密碼
    • -R:使組密碼失效
    • 不加任何選項,即 gpasswd 組名:設置用戶組密碼
注意:若是某個用戶組設置了組密碼,就表明容許非該組內的用戶能夠經過 " newgrp " 命令(會提示輸入密碼),切換有效組爲該組。至關於把非該組內的用戶臨時添加到了該組,只是臨時生效,並無修改 "/etc/group" 和 "/etc/gshadow" 文件

5 擴展命令

5.1 查詢用戶UID/GID等信息:id

命令格式:id [選項] [用戶名]

  • 選項:通常使用不加任何選項,

    • -g:僅顯示該用戶當前有效的用戶組ID
    • -G:顯示該用戶全部用戶組ID
    • -u:僅顯示該用戶ID
    • -Z:僅顯示當前用戶的安全環境
  • 用戶名:省略表明查詢當前進程用戶
該命令使用通常不加任何選項,基本能輸出全部要查詢的信息。例如直接執行 " id" 或 " id root"

5.2 查詢用戶所在所有組名稱:groups

命令格式:groups [用戶1] [用戶2] ...

  • 參數省略,即直接執行 "groups",表明查詢當前進程用戶
查詢出來的第一個組是當前有效組

5.3 顯示當前登陸用戶名:whoami

命令格式:whoami

  • 不須要任何選項和參數,直接執行便可

5.4 顯示當前已登陸用戶信息:w、who

wwho 命令做用類似都是顯示系統中正在登陸的用戶信息,這兩個命令查詢信息都來源於日誌文件 "/var/run/utmp"。

w 命令格式:w [選項] [用戶名]

  • 選項:

    • -h:不打印頭信息
    • -u:當顯示當前進程和cpu時間時忽略用戶名
    • -s:使用短輸出格式
    • -f:顯示用戶從哪登陸
    • -i:登陸來源展現ip地址而不是主機名
  • 用戶:僅顯示指定用戶

示例:

[root@localhost ~]# w
 18:31:08 up 1 day, 16 min,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Sat18   49:23   0.07s  0.07s -bash
root     pts/0    192.168.199.119  18:22    8:17   0.02s  0.02s -bash
root     pts/1    192.168.199.119  18:22    0.00s  0.03s  0.00s w

輸出內容說明:

  • 第一行內容:

    • 18:31:08:系統當前時間
    • up 1 day, 16 min:系統的運行時間
    • 3 users:當前登陸終端數量
    • load average: 0.00, 0.00, 0.00:系統在以前1分鐘、5分鐘、15分鐘的平均負載。若是CPU是單核的,則這個數據超過1就是高負載;若是CPU是四核的,則這個數值超過4就是高負載
  • 第二行內容:

    • USER:當前登陸的用戶
    • TTY:登陸的終端。tty1-6: 本地字符終端(alt+F1-6 切換),tty7: 本地圖形終端(ctrl+F7切換,必須安裝啓動圖形界面),pts/0-255: 遠程終端
    • FROM:登陸的IP地址,若是是本地終端,則是空
    • LOGIN@:登陸時間
    • IDLE:用戶空閒時間
    • JCPU:全部的進程佔用的CPU時間
    • PCPU:當前進程佔用的CPU時間
    • WHAT:用戶正在進行的操做

who 命令格式:who [選項] [查詢文件]

  • 選項:

    • -H:顯示各欄位的標題信息列
    • -q:只顯示登入系統的賬號名稱和總人數
    • -w:顯示用戶的信息狀態欄
    • -u:顯示閒置時間,若該用戶在前一分鐘以內有進行任何動做,將標示成"."號,若是該用戶已超過24小時沒有任何動做,則標示出"old"字符串
  • 查詢文件:指定要查詢的文件,默認是/var/run/utmp

5.5 更改使用的shell:chsh

命令格式:chsh [選項] [用戶名]

  • 選項:

    • -l:列出目前系統全部可用shell。其實就是輸出 "/etc/shells" 文件內容
    • -s 新shell程序:指定要設定的shell。其實就是修改上面說到的 "/etc/passwd" 文件的第 7 列數據
  • 用戶名:省略則默認是操做當前登陸用戶

6 添加用戶默認值配置

useradd 命令添加用戶時,有些選項若是不指定的話都會有默認值,好比家目錄。添加用戶時默認值的參考文件主要有兩個,分別是 "/etc/default/useradd""/etc/login.defs",下面對文件內容一一進行說明

/etc/default/useradd 文件,內容以下:

[root@localhost ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  • GROUP=100:默認初始組ID,就是說新添用戶時的默認初始組是 users 組(users組的GID就是100),可是你看到的現象可能並非這樣,而是建立了一個和用戶名同樣的用戶組做爲該新用戶的初始組。這是由於針對用戶組有兩種不一樣的機制,這兩種機制分別是:

    • 私有羣組機制:系統會創建一個與用戶名同樣的羣組給用戶做爲初始羣組。 這種羣組的設定機制會比較有保密性,用戶都有本身的羣組,並且家目錄權限將會設定爲 700 (僅有本身可進入本身的家目錄)。使用這種機制就不會參考 GROUP=100 這個設定值了。表明性的Linux發行版有 RHEL,Fedora,CentOS 等
    • 公共羣組機制:就是以 GROUP=100 這個設定值做爲新建用戶的初始羣組,所以每一個帳號都屬於 users 這個羣組,且默認家目錄一般的權限會是 "drwxr-xr-x",因爲每一個帳號都屬於 users 羣組,所以你們均可以互相分享家目錄內的數據。表明Linux發行版有 SuSE 等
  • HOME=/home:用戶家目錄位置。即每一個新建用戶會在該目錄下新建一個和用戶名同樣的目錄來存放該用戶的文件
  • INACTIVE=-1:密碼過時後的寬限天數。即對應 "/etc/shadow" 文件的第 7 列。這裏的值是天數,若是是 0 表明密碼過時馬上失效;若是是 -1 則是表明密碼永遠不會失效;若是是其餘數字如 30 ,則表明密碼過時後 30 天后才失效
  • EXPIRE=:默認失效的日期。即對應 "/etc/shadow" 文件的第 7 列。默認值是空,表明永久有效
  • SHELL=/bin/bash:使用的 shell 程序。即對應 "/etc/passwd" 文件的第 7 列
  • SKEL=/etc/skel:新建用戶家目錄的模板文件。該目錄下的文件會所有原封不動的複製到新用戶的家目錄下
  • CREATE_MAIL_SPOOL=yes:是否給新用戶創建郵箱。這裏默認建立,就是說新建用戶會建立一個和用戶名同樣的文件放在 "/var/spool/mail/" 目錄(該目錄由 "/etc/login.defs" 文件指定的) 下

/etc/login.defs 文件,內容以下:

[root@localhost ~]# cat /etc/login.defs 
...(註釋內容省略)...
MAIL_DIR    /var/spool/mail

PASS_MAX_DAYS    99999
PASS_MIN_DAYS    0
PASS_MIN_LEN    5
PASS_WARN_AGE    7

UID_MIN              500
UID_MAX            60000
GID_MIN              500
GID_MAX            60000

CREATE_HOME    yes
UMASK           077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
  • MAIL_DIR /var/spool/mail:默認郵箱目錄
  • PASS_MAX_DAYS 99999:密碼有效期。對應 "/etc/shadow" 文件的第 5 列
  • PASS_MIN_DAYS 0:兩次密碼修改時間隔。對應 "/etc/shadow" 文件的第 4 列
  • PASS_MIN_LEN 5:密碼最小長度。已被 PAM 模塊取代,這裏再也不生效
  • PASS_WARN_AGE 7:密碼到期前的警告天數。對應 "/etc/shadow" 文件的第 6 列
  • UID_MIN 500:最小UID
  • UID_MAX 60000:最大UID
  • GID_MIN 500:最小GID
  • GID_MAX 60000:最大GID
  • CREATE_HOME yes:建立用戶時是否爲其建立家目錄。默認建立
  • UMASK 077:新建用戶家目錄的默認權限。這裏值爲 077,那麼新建用戶家目錄的權限是 700,即 "drwx------"
  • USERGROUPS_ENAB yes:使用 userdel 命令刪除用戶時,若是所屬的初始組已經沒有其餘用戶隸屬於該組了,是否刪除該用戶的初始組。默認是刪除
  • ENCRYPT_METHOD SHA512:密碼加密方式。加密方式有:SHA5十二、DES、MD5

7 用戶身份切換(su與sudo)

當用普通帳號登陸系統,須要執行某些操做可是權限不足,這時就須要切換到更高權限的用戶身份去執行啦。這裏就涉及到兩個命令的使用 susudo

7.1 su

su 是最簡單的用戶身份切換命令,能夠進行任何身份的切換。除了 root 用戶切換到其餘用戶不須要輸入密碼外,其餘狀況使用 "su" 命令切換用戶時都必須輸入要切換用戶的登陸密碼

命令格式:su [選項] [用戶名]

  • 選項:

    • --l--login:使用 login-shell 的變量文件讀取方式來登陸系統。即切換身份時同時切換環境變量,若是不加該選項的話,用戶切換後環境變量仍是舊的,建議每次切換都帶上該選項
    • -c 命令:只是以某個用戶執行一次指令,而不切換用戶身份
  • 用戶名:要切換的用戶。若是省略則表明切換到 root 用戶

示例:

# 1. 從 user1 切換至 root 用戶,提示輸入密碼
[user1@localhost ~]$ su -
密碼:
# 2. 查看 /root/aaa.txt 文件權限、全部者和所屬組
[root@localhost ~]# ls -l aaa.txt 
-rw-r--r--. 1 root root 17 4月  18 19:15 aaa.txt
# 3. 從 root 用戶切換至 user2 用戶,不須要輸入密碼直接切換成功
[root@localhost ~]# su - user2
# 4. 查看 user2 用戶所屬組。不在 root 組,即不能查看/root/aaa.txt內容
[user2@localhost ~]$ id user2
uid=502(user2) gid=502(user2) 組=502(user2),501(user1)
# 5. 使用 root 身份執行一次查看指令,而不切換身份
[user2@localhost ~]$ su -c "cat /root/aaa.txt" root
密碼:
aaaaaaaaaaaaaaaa
[user2@localhost ~]$

7.2 sudo

雖然 su 很方便了,可是若是有不少人都須要切換 root 身份來執行某些指令,就必須知道 root 密碼,這樣容易致使密碼流出,很不妥。相對於 su 必須知道要切換的用戶密碼,而使用 sudo 來切換身份只須要知道用戶本身的密碼便可。並非全部用戶都能使用 sudo 切換身份,前提必須是由管理員審覈後,給用戶開放了 sudo 權限才能使用,能使用 sudo 其實就已經表明是受信任的用戶了,這也是使用 sudo不要須要知道切換用戶密碼的緣由。

命令格式:sudo [選項] 原始命令

  • 選項:

    • -u 用戶名:要使用的用戶身份,省略此選項默認是 root 身份
    • -b:在後臺執行指令

示例,

# 1. 使用 user1 用戶身份建立文件 /tmp/aaa.txt
[root@localhost ~]# sudo -u user1 touch /tmp/aaa.txt
# 2. 查看 /tmp/aaa.txt,發現文件所屬者和所屬組都是 user1,而不是 root
[root@localhost ~]# ls -l /tmp/aaa.txt 
-rw-r--r--. 1 user1 user1 0 4月  18 21:32 /tmp/aaa.txt
[root@localhost ~]#

sudo 預設只有 root 用戶可以使用,那麼普通用戶如何才能使用 sudo 來獲取其餘用戶身份呢?這就涉及到 "/etc/sudoers" 文件的配置,由於 sudo 的執行流程是這樣的:

  1. 當用戶執行 sudo 時,系統於 /etc/sudoers 文件中搜尋該使用者是否有執行 sudo 的權限
  2. 若使用者具備可執行 sudo 的權限,便讓使用者輸入本身的密碼來確認
  3. 若密碼輸入成功,便開始進行 sudo 後續接的指令
  4. 若欲切換的身份與執行者身份相同或者 root 用戶執行 sudo 時,不須要輸入密碼

因此用戶可否使用 sudo,只須要編輯 /etc/sudoers 文件就能夠了。由於該文件有必定的規範性,直接使用 vi 去編輯不是太好,所以系統提供了一個命令 visudo 專門來編輯這個文件,並在編輯完成退出編輯界面時去進行校驗該文件的語法。下面對該文件內容進行介紹:

[root@localhost ~]# visudo

...省略...
# 使用者  來源主機=(可切換的身份) 可執行的命令
root      ALL=(ALL)             ALL
  • 使用者:能夠是 "用戶名" 或者 "%組名" ,指給哪一個用戶或者用戶組下的全部用戶授予 sudo 權限。注意若是是用戶組,前面要加 "%"
  • 來源主機:登陸者的來源主機。意思是這個用戶可由哪一部網絡主機聯機過來,這個能夠指定受信任客戶端計算機來源。"ALL" 表明全部主機
  • 可切換的身份:使用者能夠切換成什麼身份。"ALL" 表明任意身份。這個字段能夠省略,默承認切換 root 身份。
  • 可執行的命令:可用切換身份下達什麼指令,指令務必寫絕對路徑。"ALL" 表明所有指令。前面若是加了 "NOPASSWD:",則使用 sudo 時能夠免密碼(使用者本身的密碼)輸入

示例,

# 1. 受權user1能夠切換root身份重啓服務器。可切換身份省略默認就是root身份
user1 ALL= /sbin/shutdown -r now 
# 等同於上面一條
user1 ALL=(root) /sbin/shutdown -r now

# 2. 受權user1能夠修改其餘用戶密碼,可是不能修改root密碼。! 是不可執行的意思
user1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

# 3. 受權wheel用戶組全部身份權限,而且免密碼輸入
%wheel ALL=(ALL) NOPASSWD: ALL

# 4. 設置別名。User_Alias(設置用戶別名)、Cmnd_Alias(設置命令別名)、Host_Alias(設置來源主機名別名)
# 注意別名必定要用大寫字母,入下面的 ADMPW、ADMPWCOM
User_Alias ADMPW = user1, user2, user3
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
若是兩次執行 sudo 的間隔在五分鐘內,那麼再次執行 sudo 時就不須要再次輸入密碼了。這是由於系統相信你在五分鐘內不會離開你的做業,因此執行 sudo 的是同一我的
相關文章
相關標籤/搜索