0.linux的目錄結構 1.用戶和用戶組的信息存儲 1.1. 用戶的基本信息文件/etc/passwd 1.1.1. 用戶名 1.1.2. 密碼 1.1.3. UID 1.1.4. GID 1.1.5. 註釋性描述 1.1.6. 宿主目錄 1.1.7. 預設shell 1.2. 用戶的密碼信息文件 ...
- 0.linux的目錄結構
- 1.用戶和用戶組的信息存儲
- 1.1. 用戶的基本信息文件
/etc/passwd
- 1.2. 用戶的密碼信息文件
/etc/shadow
- 1.2.1. 用戶名
- 1.2.2. 加密密碼
- 1.2.3. 最後一次修改時間
- 1.2.4. 最小修改時間間隔
- 1.2.5. 密碼有效期
- 1.2.6. 密碼需要變更前的警告天數
- 1.2.7. 密碼過期後的寬限天數
- 1.2.8. 賬號失效時間
- 1.2.9. 保留
- 1.2.10. 忘記密碼怎麼辦
- 1.3. 組信息文件
/etc/group
- 1.4. /etc/gshadow文件
- 1.5. 創建用戶的預設設置文件
/etc/login.defs
- 1.6. 添加新系統用戶:useradd
- 1.7. 修改用戶密碼:passwd命令
- 1.8. 修改用戶信息:usermod
- 1.9. 修改用戶密碼狀態:chage
- 1.10. 刪除用戶:userdel
- 1.11. 查看用戶的UID和GID
- 1.12. linux用戶間的切換su和su -
- 1.13. whoami和who am i
- 1.14. 添加用戶組:groupadd
- 1.15. 修改用戶組:groupmod
- 1.16. 刪除用戶組:groupdel
- 1.17. 把用戶添加進組或從組中刪除:gpasswd
- 1.18. 切換用戶的有效組:newgrp
- 1.1. 用戶的基本信息文件
linux的目錄結構
linux中,所有的文件和目錄都被組織成一個一根節點/
開始的倒置的樹狀結構
文件系統的最頂層是由根目錄開始的,再0往下既可以是目錄也可以是文件,而每一個目錄中又可以包含(子目錄)或文件,如此反覆即為目錄
註意:目錄和文件名是區分大小寫的
Linux採用文件系統層次標準(FHS標準),規定了什麼目錄下應該放什麼文件,可以在Linux文件目錄結構一覽表中查看
linux的用戶和用戶組管理
1. 用戶和用戶組的信息存儲
1.1. 用戶的基本信息文件/etc/passwd
通過 cat /etc/passwd
命令來查看/etc/passwd
配置文件的信息如下:
/etc/passwd
文件中每行紀錄一個用戶,其中很多是系統或服務正常運行所必需的用戶,稱為系統用戶或偽用戶,系統用戶無法用來登錄,但是也不能刪除,刪除了之後,依賴這些用戶運行的服務或程式就不能正常執行,會導致系統問題
以root用戶信息為例,共7個欄位,並以:
進行了分割
root:x:0:0:root:/root:/bin/bash
用戶名:密碼位:UID(用戶ID):GID(組ID):註釋性描述:宿主目錄:預設shell
1.1.1. 用戶名
用戶登錄系統是使用的用戶名,一串代表身份字元串
1.1.2. 密碼
x代表此用戶設有密碼,但不是真的密碼,真的在/etc/shandow
文件中,早期的 UNIX 中,這裡就是真正的加密密碼串,但由於所有程式都能讀取此文件,非常容易造成用戶數據被竊取,雖然密碼是加密的,但是採用暴力破解的方式也是能夠進行破解的,因此,現在 Linux 系統把真正的加密密碼串放置在 /etc/shadow
文件中,此文件只有 root 用戶可以瀏覽和操作,註意不可以刪除x,刪了就會認為是無密碼的
1.1.3. UID
用戶ID,是一個0~65535之間的數值,不同範圍代表不同的用戶
UID 範圍 | 用戶身份 |
---|---|
0 | 超級用戶。UID 為 0 就代表這個賬號是管理員賬號。在 Linux 中,如何把普通用戶升級成管理員呢?只需把其他用戶的 UID 修改為 0 就可以了,這一點和 Windows 是不同的。不過不建議建立多個管理員賬號。 |
1~499 |
系統用戶(偽用戶)。也就是說,此範圍的 UID 保留給系統使用。其中,1~99 用於系統自行創建的賬號;100~499 分配給有系統賬號需求的用戶。 其實,除了 0 之外,其他的 UID 並無不同,這裡只是預設 500 以下的數字給系統作為保留賬戶,只是一個公認的習慣而已。 |
500~65535 | 普通用戶。通常這些 UID 已經足夠用戶使用了。但不夠用也沒關係,2.6.x 內核之後的 Linux 系統已經可以支持 232 個 UID 了。 |
1.1.4. GID
全稱”Group ID”,簡稱組ID,用戶初始組的組ID號
初始組: 指用戶登陸時就擁有這個用戶組的相關許可權。每個用戶的初始組只能有一個,通常就是將和此用戶的用戶名相同的組名作為該用戶的初始組
附加組: 指用戶可以加入多個其他的用戶組,並擁有這些組的許可權。每個用戶只能有一個初始組,除初始組外,用戶再加入其他的用戶組,這些用戶組就是這個用戶的附加組。附加組可以有多個,而且用戶可以有這些附加組的許可權
附加組和初始組是可以更改的,在 /etc/passwd 文件的第四個欄位中看到的 ID 是這個用戶的初始組
1.1.5. 註釋性描述
例如存放用戶名全名等信息
1.1.6. 宿主目錄
用戶登錄之後有操作許可權的訪問目錄,也叫用戶的主目錄
1.1.7. 預設shell
Linux的命令解釋器
1.2. 用戶的密碼信息文件/etc/shadow
該文件僅root用戶擁有許可權如果發生了改變,需要註意是否有了惡意攻擊
查看一下這個文件的內容
和passwd文件一樣,不同的是被分為了9個欄位
root:$6$ZFZ38JaA$r48EyIT9/4XcybjzAlNcudL/GslvyTpozzXUbHl1xC2DWEz9bdEy4utgSp5RR7ujMm4GtNn8NP96eQLXBqAiW1:19462:0:99999:7:::
用戶名:加密密碼:最後一次修改時間:最小修改時間間隔:密碼有效期:密碼需要變更前的警告天數:密碼過期後的寬限時間:賬號失效時間:保留欄位
1.2.1. 用戶名
和passwd文件一樣
1.2.2. 加密密碼
這裡存的是真正的加密的密碼,使用的sha512散列加密演算法,原本採用的是md5或des加密
這個加密不能手工修改,如果修改,那麼系統將無法識別密碼,導緻密碼是失效,可以通過在這個密碼串前面加上! * x使密碼暫時失效
所有的偽用戶的密碼都是" !! "或" * " 代表沒有密碼是不能登錄的,新創建的用戶如果沒有設定密碼,它的密碼項也是" !! "代表這個用戶沒有密碼,不能登錄
1.2.3. 最後一次修改時間
如果root顯示的是19462是因為什麼
因為,Linux計算日期的時間是以1970年1月1日作為1不斷累加得到的時間,到1970年1月1日,則為366天。這裡顯示19462天,也就是說,此root賬號在1970年1月1日之後的第19462天修改的root用戶密碼
可以使用如下命名查看1942代表那一天
1.2.4. 最小修改時間間隔
該欄位規定了從第3欄位(最後一次修改密碼的日期)起,多長時間之內不能修改密碼
- 0:隨時都可以修改
- 10:代表10天內不能修改
1.2.5. 密碼有效期
這個欄位可以指定距離第 3 欄位(最後一次更改密碼)多長時間內需要再次變更密碼,否則該賬戶密碼進行過期階段,強制用戶更改密碼,預設為99999,也就是273年
1.2.6. 密碼需要變更前的警告天數
與第5欄位 相比較,當賬戶有效期快到時 ,系統會發出警告信息給此賬戶,預設欄位為7
1.2.7. 密碼過期後的寬限天數
密碼過期之後在此時間內還可以登錄,超過之後不會提示而是完全禁用
1.2.8. 賬號失效時間
同第3個欄位一樣,使用字1970年1月1日以來的總天數作為賬戶的失效時間,表示在此欄位固定的時間之外,無論密碼是否過期,都無法使用
1.2.9. 保留
1.2.10. 忘記密碼怎麼辦
- 普通用戶:利用root用戶更改
- root用戶:如果 root 賬號的密碼遺失,則需要重新啟動進入單用戶模式,系統會提供 root 許可權的 bash 介面,此時可以用 passwd 命令修改賬戶密碼;也可以通過掛載根目錄,修改 /etc/shadow,將賬戶的 root 密碼清空的方法,此方式可使用 root 無法密碼即可登陸,建議登陸後使用 passwd 命令配置 root 密碼
1.3. 組信息文件/etc/group
是用戶的用戶組配置文件,即用戶組的所有信息都存在此文件中,記錄著組ID(GID)和組名相對應的文件,查看該文件
用戶組中還是以" : "作為欄位之間的分隔符,分為四段
組名:密碼:GID:該用戶組中的用戶列表
1.3.1. 組名
也就是用戶組的名稱,以字母或數字構成,不能重覆、
1.3.2. 組密碼
與passwd文件一樣
不過,用戶設置密碼是為了驗證用戶的身份,那用戶組設置密碼是用來做什麼的呢?
用戶組密碼主要是用來指定組管理員的,由於系統中的賬號可能會非常多,root 用戶可能沒有時間進行用戶的組調整,這時可以給用戶組指定組管理員,如果有用戶需要加入或退出某用戶組,可以由該組的組管理員替代 root 進行管理。但是這項功能目前很少使用,我們也很少設置組密碼
如果需要賦予某用戶調整某個用戶組的許可權,則可以使用 sudo 命令代替。
1.3.3. 組ID(GID)
就是群組的ID號,Linux通過GID來區分用戶組的,同用戶名一樣,這裡的組 GID 與/etc/passwd
文件中第 4 個欄位的 GID 相對應,實際上,/etc/passwd
文件中使用 GID 對應的群組名,就是通過此文件對應得到的
1.3.4. 組中的用戶
此欄位列出每個群組包含的所有用戶,註意,如果該用戶組是這個用戶的初始組,則該用戶不會寫入這個欄位,也可以說,該欄位顯示的用戶都是這個用戶組的附加用戶
每個用戶都可以加入多個附加組,但是只能屬於一個初始組,一般情況下,用戶的初始組就是在建立用戶的同時建立的和用戶名相同的組
passwd、shadow、group之間的關係可以這樣理解,即先在 /etc/group 文件中查詢用戶組的 GID 和組名;然後在 /etc/passwd 文件中查找該 GID 是哪個用戶的初始組,同時提取這個用戶的用戶名和 UID;最後通過 UID 到 /etc/shadow 文件中提取和這個用戶相匹配的密碼
1.4. /etc/gshadow文件
查看該文件
文件中每行代表一個組用戶的密碼信息
組名:加密密碼:組管理員:組附加用戶列表
1.4.1. 組名
和/etc/group
文件中相對應
1.4.2. 組密碼
通常不設置密碼。因此欄位為空,但有時為!指的是該群沒有組密碼也沒有群組管理員
1.4.3. 組管理員
該文件的最大功能就是創建群組管理員,由於目前sudo之類的工具,群組管理員很少用了
1.4.4. 組中的附加用戶
和/etc/group
文件的附加組一樣
1.5. 創建用戶的預設設置文件/etc/login.defs
該文件在創建用戶時,對用戶的一些基本屬性做預設設置,該文件對root用戶無效,當此文件中的配置與 /etc/passwd
和 /etc/shadow
文件中的用戶信息有衝突時,系統會以/etc/passwd
和 /etc/shadow
為準
設置項 | 含義 |
---|---|
MAIL_DIR /var/spool/mail | 創建用戶時,系統會在目錄 /var/spool/mail 中創建一個用戶郵箱,比如 lamp 用戶的郵箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密碼有效期,99999 是自 1970 年 1 月 1 日起密碼有效的天數,相當於 273 年,可理解為密碼始終有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密碼以來,最少隔多少天後用戶才能再次修改密碼,預設值是 0。 |
PASS_MIN_LEN 5 | 指定密碼的最小長度,預設不小於 5 位,但是現在用戶登錄時驗證已經被 PAM 模塊取代,所以這個選項並不生效。 |
PASS_WARN_AGE 7 | 指定在密碼到期前多少天,系統就開始通過用戶密碼即將到期,預設為 7 天。 |
UID_MIN 500 | 指定最小 UID 為 500,也就是說,添加用戶時,預設 UID 從 500 開始。註意,如果手工指定了一個用戶的 UID 是 550,那麼下一個創建的用戶的 UID 就會從 551 開始,哪怕 500~549 之間的 UID 沒有使用。 |
UID_MAX 60000 | 指定用戶最大的 UID 為 60000。 |
GID_MIN 500 | 指定最小 GID 為 500,也就是在添加組時,組的 GID 從 500 開始。 |
GID_MAX 60000 | 用戶 GID 最大為 60000。 |
CREATE_HOME yes | 指定在創建用戶時,是否同時創建用戶主目錄,yes 表示創建,no 則不創建,預設是 yes。 |
UMASK 077 | 用戶主目錄的許可權預設設置為 077。 |
USERGROUPS_ENAB yes | 指定刪除用戶的時候是否同時刪除用戶組,準備地說,這裡指的是刪除用戶的初始組,此項的預設值為 yes。 |
ENCRYPT_METHOD SHA512 | 指定用戶密碼採用的加密規則,預設採用 SHA512,這是新的密碼加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
1.6. 添加新系統用戶:useradd
名稱
useradd - 創建一個新用戶或更新預設新用戶信息
大綱
useradd [選項] 登錄
useradd -D
useradd -D [選項]
描述
When invoked without the -D option, the useradd command creates a new user
account using the values specified on the command line plus the default
values from the system. Depending on command line options, the useradd
command will update system files and may also create the new user''s home
directory and copy initial files.
By default, a group will also be created for the new user (see -g, -N, -U,
and USERGROUPS_ENAB).
命令常用選項
選項 | 含義 |
---|---|
-u UID | 手工指定用戶的 UID,註意 UID 的範圍(不要小於 500)。 |
-d 主目錄 | 手工指定用戶的主目錄。主目錄必須寫絕對路徑,而且如果需要手工指定主目錄,則一定要註意許可權; |
-c 用戶說明 | 手工指定/etc/passwd文件中各用戶信息中第 5 個欄位的描述性內容,可隨意配置; |
-g 組名 | 手工指定用戶的初始組。一般以和用戶名相同的組作為用戶的初始組,在創建用戶時會預設建立初始組。一旦手動指定,則系統將不會在創建此預設的初始組目錄。 |
-G 組名 | 指定用戶的附加組。我們把用戶加入其他組,一般都使用附加組; |
-s shell | 手工指定用戶的登錄 Shell,預設是 /bin/bash; |
-e 曰期 | 指定用戶的失效曰期,格式為 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八個欄位; |
-o | 允許創建的用戶的 UID 相同。例如,執行 "useradd -u 0 -o usertest" 命令建立用戶 usertest,它的 UID 和 root 用戶的 UID 相同,都是 0; |
-m | 建立用戶時強制建立用戶的家目錄。在建立系統用戶時,該選項是預設的; |
-r | 創建系統用戶,也就是 UID 在 1~499 之間,供系統程式使用的用戶。由於系統用戶主要用於運行系統所需服務的許可權配置,因此系統用戶的創建預設不會創建主目錄。 |
這個命令幫助完成了以下操作
- 在
/etc/passwd
中創建一行與用戶相關的數據 - 在
/etc/shadow
文件中新增了一行與用戶相關的數據 - 在
/etc/group
文件中創建一行與用戶名一模一樣的群組 - 在
/etc/gshadow
文件中新增一行與新增群組相關的密碼信息 - 預設創建用戶的主目錄和郵箱
- 將
/etc/skel
目錄中的配置文件複製到新用戶的主目錄中
[root@192 ~]# grep "oxo" /etc/passwd
oxo:x:1000:1000::/home/oxo:/bin/bash
[root@192 ~]# grep "oxo" /etc/shadow
oxo:!!:19463:0:99999:7:::
[root@192 ~]# grep "oxo" /etc/group
oxo:x:1000:
[root@192 ~]# grep "oxo" /etc/gshadow
oxo:!::
[root@192 ~]# ll /var/spool/mail/oxo
-rw-rw----. 1 oxo mail 0 4月 16 09:10 /var/spool/mail/oxo
[root@192 ~]# ll -d /home/oxo/
drwx------. 2 oxo oxo 62 4月 16 09:10 /home/oxo/
還可以用useradd的各種選項親自定製要創建的用戶,這些預設值也是可以手動更改的,useradd 命令在添加用戶時參考的預設值文件主要有兩個,分別是 /etc/default/useradd
和 /etc/login.defs
1.6.1. /etc/default/useradd
文件
[root@192 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@192 ~]# useradd -D ## -D 選項指的就是查看新建用戶的預設值
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
參數 | 含義 |
---|---|
GR0UP=100 |
這個選項用於建立用戶的預設組,也就是說,在添加每個用戶時,用戶的初始組就是 GID 為 100 的這個用戶組。但 CentOS 並不是這樣的,而是在添加用戶時會自動建立和用戶名相同的組作為此用戶的初始組。也就是說這個選項並不會生效。 Linux 中預設用戶組有兩種機制:一種是私有用戶組機制,系統會創建一個和用戶名相同的用戶組作為用戶的初始組;另一種是公共用戶組機制,系統用 GID 是 100 的用戶組作為所有新建用戶的初始組。目前我們採用的是私有用戶組機制。 |
HOME=/home | 指的是用戶主目錄的預設位置,所有新建用戶的主目錄預設都在 /home/下,剛剛新建的 lamp1 用戶的主目錄就為 /home/lamp1/。 |
INACTIVE=-1 | 指的是密碼過期後的寬限天數,也就是 /etc/shadow 文件的第七個欄位。這裡預設值是 -1,代表所有新建立的用戶密碼永遠不會失效。 |
EXPIRE= | 表示密碼失效時間,也就是 /etc/shadow 文件的第八個欄位。預設值是空,代表所有新建用戶沒有失效時間,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用戶預設 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在創建一個新用戶後,你會發現,該用戶主目錄並不是空目錄,而是有 .bash_profile、.bashrc 等文件,這些文件都是從 /etc/skel 目錄中自動複製過來的。因此,更改 /etc/skel 目錄下的內容就可以改變新建用戶預設主目錄中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是給新建用戶建立郵箱,預設是創建。也就是說,對於所有的新建用戶,系統都會新建一個郵箱,放在 /var/spool/mail/ 目錄下,和用戶名相同。例如,lamp1 的郵箱位於 /var/spool/mail/lamp1。 |
選項+參數 | 含義 |
---|---|
-b HOME | 設置所創建的主目錄所在的預設目錄,只需用目錄名替換 HOME 即可,例如 useradd -D -b /gargae。 |
-e EXPIRE | 設置密碼失效時間,EXPIRE 參數應使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。 |
-f INACTIVE | 設置密碼過期的寬限天數,例如 useradd -D -f 7。 |
-g GROUP | 設置新用戶所在的初始組,例如 useradd -D -g bear。 |
-s SHELL | 設置新用戶的預設 shell,SHELL 必須是完整路徑,例如 useradd -D -s /usr/bin/csh。 |
通過 /etc/default/useradd
文件,僅能修改有關新用戶的部分預設值,有一些內容並沒有在這個文件中,例如修改用戶預設的 UID、GID,以及對用戶密碼的預設設置,對這些預設值的修改就需要在 /etc/login.defs
文件中進行
useradd 命令創建用戶的過程是這樣的
- 系統首先讀取 /etc/login.defs 和
/etc/default/useradd
,根據這兩個配置文件中定義的規則添加用戶,也就是向/etc/passwd、/etc/group、/etc/shadow、/etc/gshadow
文件中添加用戶數據 - 接著系統會自動在 /etc/default/useradd 文件設定的目錄下建立用戶主目錄
- 最後複製
/etc/skel
目錄中的所有文件到此主目錄中 - 由此,一個新的用戶就創建完成了
1.7. 修改用戶密碼:passwd命令
NAME
passwd - update user''s authentication tokens
SYNOPSIS
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warn?
days] [-i inactivedays] [-S] [--stdin] [username]
DESCRIPTION
The passwd utility is used to update user''s authentication token(s).
This task is achieved through calls to the Linux-PAM and Libuser API.
Essentially, it initializes itself as a "passwd" service with Linux-PAM and
utilizes configured password modules to authenticate and then update a
user''s password.
A simple entry in the global Linux-PAM configuration file for this service
would be:
#
# passwd service entry that does strength checking of
# a proposed password before updating it.
#
passwd password requisite pam_cracklib.so retry=3
passwd password required pam_unix.so use_authtok
#
Note, other module types are not required for this application to function
correctly.
選項+參數 | 含義 |
---|---|
-S | 查詢用戶密碼的狀態,也就是 /etc/shadow 文件中此用戶密碼的內容。僅 root 用戶可用 |
-l | 暫時鎖定用戶,該選項會在 /etc/shadow 文件中指定用戶的加密密碼串前添加 "!",使密碼失效。僅 root 用戶可用 |
-u | 解鎖用戶,和 -l 選項相對應,也是只能 root 用戶使用 |
--stdin | 可以將通過管道符輸出的數據作為用戶的密碼。主要在批量添加用戶時使用 |
-n 天數 | 設置該用戶修改密碼後,多長時間不能再次修改密碼,也就是修改 /etc/shadow 文件中各行密碼的第 4 個欄位 |
-x 天數 | 設置該用戶的密碼有效期,對應 /etc/shadow 文件中各行密碼的第 5 個欄位 |
-w 天數 | 設置用戶密碼過期前的警告天數,對於 /etc/shadow 文件中各行密碼的第 6 個欄位 |
-i 日期 | 設置用戶密碼失效日期,對應 /etc/shadow 文件中各行密碼的第 7 個欄位 |
很多Linux 發行版為了系統安裝,都使用了 PAM 模塊進行密碼的檢驗,設置密碼太短、與用戶名相同、是常見字元串等,都會被 PAM 模塊檢查出來,從而禁止用戶使用此類密碼,root不受影響
1.8. 修改用戶信息:usermod
名稱
usermod - 修改一個用戶賬戶
大綱
usermod [選項] 登錄
描述
The usermod command modifies the system account files to reflect the
changes that are specified on the command line.
利用 useradd 命令添加用戶,但如果不小心添錯用戶信息, 一個是使用 Vim 文本編輯器手動修改涉及用戶信息的相關文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一個方法就是使用 usermod 命令,該命令專門用於修改用戶信息
選項+參數 | 含義 |
---|---|
-c用戶說明 | 修改用戶的說明信息,即修改 /etc/passwd 文件目標用戶信息的第 5 個欄位 |
-d 主目錄 | 修改用戶的主目錄,即修改 /etc/passwd 文件中目標用戶信息的第 6 個欄位,需要註意的是,主目錄必須寫絕對路徑 |
-e 日期 | 修改用戶的失效曰期,格式為 "YYYY-MM-DD",即修改 /etc/shadow 文件目標用戶密碼信息的第 8 個欄位 |
-g 組名 | 修改用戶的初始組,即修改 /etc/passwd 文件目標用戶信息的第 4 個欄位(GID) |
-u UID | 修改用戶的UID,即修改 /etc/passwd 文件目標用戶信息的第 3 個欄位(UID) |
-G 組名 | 修改用戶的附加組,其實就是把用戶加入其他用戶組,即修改 /etc/group 文件 |
-l 用戶名 | 修改用戶名稱 |
-L | 臨時鎖定用戶(Lock) |
-U:解鎖用戶(Unlock) | 和 -L 對應 |
-s shell | 修改用戶的登錄 Shell,預設是 /bin/bash |
相比 useradd 命令,usermod 命令還多出了幾個選項,即 -L 和 -U,作用分別與 passwd 命令的 -l 和-u 相同,並不是所有的 Linux 發行版都包含這個命令,因此,使用前可以使用 man usermod 命令確定系統是否支持,此命令對用戶的臨時鎖定,同 passwd 命令一樣,都是在 /etc/passwd 文件目標用戶的加密密碼欄位前添加 "!",使密碼失效;反之,解鎖用戶就是將添加的 "!" 去掉
1.9. 修改用戶密碼狀態:chage
除了使用passwd -S命令查看用戶的密碼信息外,還可以使用chage命令,它可以顯示更加詳細的用戶密碼信息,和passwd一樣提供了修改用戶密碼信息的功能
名稱
chage - 更改用戶密碼過期信息
大綱
chage [選項] 登錄
描述
The chage command changes the number of days between password changes and
the date of the last password change. This information is used by the
system to determine when a user must change their password.
選項+參數 | 含義 |
---|---|
-l | 列出用戶的詳細密碼狀態 |
-d 日期 | 修改 /etc/shadow 文件中指定用戶密碼信息的第 3 個欄位,也就是最後一次修改密碼的日期,格式為 YYYY-MM-DD |
-m 天數 | 修改密碼最短保留的天數,也就是 /etc/shadow 文件中的第 4 個欄位 |
-M 天數 | 修改密碼的有效期,也就是 /etc/shadow 文件中的第 5 個欄位 |
-W 天數 | 修改密碼到期前的警告天數,也就是 /etc/shadow 文件中的第 6 個欄位 |
-i 天數 | 修改密碼過期後的寬限天數,也就是 /etc/shadow 文件中的第 7 個欄位 |
-E 日期 | 修改賬號失效日期,格式為 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 個欄位 |
chage 命令除了修改密碼信息的功能外,還可以強制用戶在第一次登錄後,必須先修改密碼,並利用新密碼重新登陸系統,此用戶才能正常使用,chage 的這個功能常和 passwd 批量初始化用戶密碼功能合用
1.10. 刪除用戶:userdel
名稱
userdel - 刪除用戶賬戶和相關文件
大綱
userdel [選項] 登錄
描述
The userdel command modifies the system account files, deleting all entries
that refer to the user name LOGIN. The named user must exist.
選項
-r, --remove
用戶主目錄中的文件將隨用戶主目錄和用戶郵箱一起刪除。在其它文件系統中的文件
必須手動搜索並刪除。
## 在刪除用戶的同時如果不刪除用戶的家目錄,那麼家目錄就會變成沒有屬主和屬組的目錄,也就是垃圾文件
用戶的相關數據包含如下幾項
- 用戶基本信息:存儲在 /etc/passwd 文件中
- 用戶密碼信息:存儲在 /etc/shadow 文件中
- 用戶群組基本信息:存儲在 /etc/group 文件中
- 用戶群組信息信息:存儲在 /etc/gshadow 文件中
- 用戶個人文件:主目錄預設位於 /home/用戶名,郵箱位於 /var/spool/mail/用戶名
userdel 命令的作用就是從以上文件中,刪除與指定用戶有關的數據信息,如果我們想要從系統中徹底的刪除某個用戶,最好在使用 userdel 命令之前,先通過 find -user 用戶名
命令查出系統中屬於該用戶的文件,然後在加以刪除
1.11. 查看用戶的UID和GID
id命令可以查詢用戶的UID和GID以及附加組的信息
NAME
id - print real and effective user and group IDs
SYNOPSIS
id [OPTION]... [USER]
1.12. linux用戶間的切換su和su -
su 是最簡單的用戶切換命令,通過該命令可以實現任何身份的切換,包括從普通用戶切換為 root 用戶、從 root 用戶切換為普通用戶以及普通用戶之間的切換,普通用戶之間切換以及普通用戶切換至 root 用戶,都需要知曉對方的密碼,只有正確輸入密碼,才能實現切換;從 root 用戶切換至其他用戶,無需知曉對方密碼,直接可切換成功
NAME
su - run a command with substitute user and group ID
SYNOPSIS
su [options...] [-] [user [args...]]
DESCRIPTION
su allows to run commands with substitute user and group ID.
When called without arguments su defaults to running an interactive shell
as root.
For backward compatibility su defaults to not change the current directory
and to only set the environment variables HOME and SHELL (plus USER and
LOGNAME if the target user is not root). It is recommended to always use
the --login option (instead it''s shortcut -) to avoid side effects caused
by mixing environments.
This version of su uses PAM for authentication, account and session manage‐
ment. Some configuration options found in other su implementations such as
e.g. support of a wheel group have to be configured via PAM.
選項+參數 | 含義 |
---|---|
- | 當前用戶不僅切換為指定用戶的身份,同時所用的工作環境也切換為此用戶的環境(包括 PATH 變數、MAIL 變數等),使用 - 選項可省略用戶名,預設會切換為 root 用戶 |
-l | 同 - 的使用類似,也就是在切換用戶身份的同時,完整切換工作環境,但後面需要添加欲切換的使用者賬號 |
-p | 表示切換為指定用戶的身份,但不改變當前的工作環境(不使用切換用戶的配置文件) |
-m | 和 -p 一樣 |
-c 命令 | 僅切換用戶執行一次命令,執行後自動切換回來,該選項後通常會帶有要執行的命令 |
1.12.1. su和su -的區別
註意,使用su命令時,有-和沒有-是完全不同的,-選項表示在切換用戶身份的同時,連當前使用的環境變數也切換成指定用戶的,環境變數是用來定義操作系統環境的,因此如果系統環境沒有隨用戶身份切換,很多命令無法正確執行
普通用戶通過su
切換root用戶
- 系統中的
$PATH
環境變數依然是 lamp 的(而不是 root 的) - 當前工作環境中,並不包含
/sbin、/usr/sbin
等超級用戶命令的保存路徑,這就導致很多管理員命令根本無法使用 - 當 root 用戶接受郵件時,會發現收到的是 lamp 用戶的郵件,因為環境變數
$MAIL
也沒有切換
1.13. whoami和who am i
whoami 命令和 who am i 命令是不同的 2 個命令,前者用來列印當前執行操作的用戶名,後者則用來列印登陸當前 Linux 系統的用戶名
[oxo@192 ~]$ whoami
oxo
[oxo@192 ~]$ who am i
oxo pts/0 2023-04-17 01:39 (192.168.88.1)
[oxo@192 ~]$ su root
密碼:
[root@192 oxo]# whoami
root
[root@192 oxo]# who am i
oxo pts/0 2023-04-17 01:39 (192.168.88.1)
在未切換用戶身份之前,whoami 和 who am i 命令的輸出是一樣的
使用 su 命令切換用戶身份後
- 使用 whoami 命令列印的是切換後的用戶名
- 而 who am i 命令列印的仍舊是登陸系統時所用的用戶名
- 執行 whoami 命令,等同於執行 id -un 命令
- 執行 who am i 命令,等同於執行 who -m 命令
使用 su 或者 sudo 命令切換用戶身份,騙得過 whoami,但騙不過 who am i
背後的運行機制,是實際用戶(UID)和有效用戶(EUID,即 Effective UID
- 實際用戶指的是登陸 Linux 系統時所使用的用戶,因此在整個登陸會話過程中,實際用戶是不會發生變化的
- 有效用戶,指的是當前執行操作的用戶,也就是說真正決定許可權高低的用戶,這個是能夠利用 su 或者 sudo 命令進行任意切換的
一般情況下,實際用戶和有效用戶是相同的,如果出現用戶身份切換的情況,它們會出現差異。需要註意的是,實際用戶和有效用戶出現差異,切換用戶並不是唯一的觸發機制
whoami 和 who am i通常應用在哪些場景中
- 對那些經常需要切換用戶的系統管理員來說,經常需要明確當前使用的是什麼身份
- 另外,對於某些 shell 腳本,或者需要特別的用戶才能執行,這時就需要利用 whoami 命令來搞清楚執行它的用戶是誰
- 還有一些 shell 腳本,一定要某個特別用戶才能執行,即便使用 su 或者 sudo 命令切換到此身份都不行,此時就需要利用 who am i 來確認
1.14. 添加用戶組:groupadd
名稱
groupadd - 創建一個新組
大綱
groupadd [選項] group
描述
The groupadd command creates a new group account using the values specified
on the command line plus the default values from the system. The new group
will be entered into the system files as needed.
選項
-r, --system
創建一個系統組。
-g, --gid GID
The numerical value of the group''s ID. This value must be unique,
unless the -o option is used. The value must be non-negative. The
default is to use the smallest ID value greater than or equal to
GID_MIN and greater than every other group.
1.15. 修改用戶組:groupmod
名稱
groupmod - modify a group definition on the system
大綱
groupmod [選項] GROUP
描述
The groupmod command modifies the definition of the specified GROUP by
modifying the appropriate entry in the group database.
選項
-g, --gid GID
The group ID of the given GROUP will be changed to GID.
The value of GID must be a non-negative decimal integer. This value
must be unique, unless the -o option is used.
Users who use the group as primary group will be updated to keep the
group as their primary group.
Any files that have the old group ID and must continue to belong to
GROUP, must have their group ID changed manually.
No checks will be performed with regard to the GID_MIN, GID_MAX,
SYS_GID_MIN, or SYS_GID_MAX from /etc/login.defs.
-n, --new-name NEW_GROUP
The name of the group will be changed from GROUP to NEW_GROUP name.
用戶名不要隨意修改,組名和 GID 也不要隨意修改,因為非常容易導致管理員邏輯混亂
如果非要修改用戶名或組名,則建議大家先刪除舊的,再建立新的
1.16. 刪除用戶組:groupdel
名稱
groupdel - 刪除一個組
大綱
groupdel [選項] GROUP
描述
The groupdel command modifies the system account files, deleting all
entries that refer to GROUP. The named group must exist.
註意,不能使用 groupdel 命令隨意刪除群組
- 此命令僅適用於刪除那些 "不是任何用戶初始組" 的群組
- 如果有群組還是某用戶的初始群組,則無法使用 groupdel 命令成功刪除
1.17. 把用戶添加進組或從組中刪除:gpasswd
名稱
gpasswd - administer /etc/group and /etc/gshadow
大綱
gpasswd [選項] group
描述
The gpasswd command is used to administer /etc/group, and /etc/gshadow.
Every group can have administrators, members and a password.
System administrators can use the -A option to define group
administrator(s) and the -M option to define members. They have all rights
of group administrators and members.
gpasswd called by a group administrator with a group name only prompts for
the new password of the group.
If a password is set the members can still use newgrp(1) without a
password, and non-members must supply the password.
請註意組密碼
Group passwords are an inherent security problem since more than one person
is permitted to know the password. However, groups are a useful tool for
permitting co-operation between different users.
選項 | 功能 |
---|---|
選項為空時,表示給群組設置密碼,僅 root 用戶可用。 | |
-A user1,... | 將群組的控制權交給 user1,... 等用戶管理,也就是說,設置 user1,... 等用戶為群組的管理員,僅 root 用戶可用。 |
-M user1,... | 將 user1,... 加入到此群組中,僅 root 用戶可用。 |
-r | 移除群組的密碼,僅 root 用戶可用。 |
-R | 讓群組的密碼失效,僅 root 用戶可用。 |
-a user | 將 user 用戶加入到群組中。 |
-d user | 將 user 用戶從群組中移除。 |
除 root 可以管理群組外,可設置多個普通用戶作為群組的管理員,但也只能做“將用戶加入群組”和“將用戶移出群組”的操作
使用 usermod -G
命令也可以將用戶加入群組,使用此命令將用戶加入到新的群組後,該用戶之前加入的那些群組都將被清空,將用戶加入或移出群組,最好使用 gpasswd 命令
1.18. 切換用戶的有效組:newgrp
每個用戶可以屬於一個初始組(用戶是這個組的初始用戶),也可以屬於多個附加組(用戶是這個組的附加用戶)
1.18.1. 用戶可以屬於這麼多用戶組,那麼用戶在創建文件後
- 初始用戶組的組身份生效,因為初始組是用戶一旦登陸就獲得的組身份
- 用戶的有效組預設是初始組,因此所創建文件的屬組是用戶的初始組
那麼用戶屬於多個用戶組,如果想要改變用戶的初始組,使用命令 newgrp 就可以從用戶的附加組中選擇一個群組,作為用戶新的初始組
名稱
newgrp - 登錄到一個新組
大綱
newgrp [-] [group]
描述
The newgrp command is used to change the current group ID during a login
session. If the optional - flag is given, the user''s environment will be
reinitialized as though the user had logged in, otherwise the current
environment, including current working directory, remains unchanged.
newgrp changes the current real group ID to the named group, or to the
default group listed in /etc/passwd if no group name is given. newgrp also
tries to add the group to the user groupset. If not root, the user will be
prompted for a password if she does not have a password (in /etc/shadow if
this user has an entry in the shadowed password file, or in /etc/passwd
otherwise) and the group does, or if the user is not listed as a member and
the group has a password. The user will be denied access if the group
password is empty and the user is not listed as a member.
If there is an entry for this group in /etc/gshadow, then the list of
members and the password of this group will be taken from this file,
otherwise, the entry in /etc/group is considered.
配置文件
The following configuration variables in /etc/login.defs change the
behavior of this tool:
SYSLOG_SG_ENAB (boolean)
Enable "syslog" logging of sg activity.
文件
/etc/passwd
用戶賬戶信息。
/etc/shadow
安全用戶賬戶信息。
/etc/group
組賬戶信息。
/etc/gshadow
安全組賬戶信息。
參見
id(1), login(1), su(1), sg(1), gpasswd(1), group(5), gshadow(5).