Linux 用戶和組
- Linux中用戶和組的相關檔案
- /etc/passwd
- /etc/shadow
- /etc/group
- Linux用戶
- Linux中的組
- 用戶操作
- useradd的更多使用方式
- passwd 命令使用方式
- userdel 洗掉用戶的用法
- usermod 修改用戶
- 關于 useradd 命令后臺執行情況
- Linux的檔案保護
Linux中用戶和組的相關檔案
最重要的兩個檔案內容
- /etc/passwd : 這是 Linux 中儲存用戶資訊的一個檔案,每一行對應一個用戶的賬號記錄;
- /etc/shadow : 這是 Linux 中用來儲存用戶名和密碼的一個檔案,檔案一行內容對應一個用戶名和一個密碼;
- /etc/group : 這是 Linux 中用來儲存用戶和組關系的一個檔案,
我們來一個一個對它們的內容進行決議
/etc/passwd
我們首先查看 /etc/passwd 的檔案內容:
cat /etc/passwd

唔 檔案內容太長了,我們單獨挑出一行內容來對其核心部分進行解釋
root:x:0:0:root:/root:/bin/bash
# 選中檔案內容的第一行,root用戶的相關資訊
# 以冒號為分隔符,將它分為 7 個部分
root x 0 0 root /root /bin/bash
1 2 3 4 5 6 7
| 欄位 | 含義 |
|---|---|
| 1 | 用戶名 |
| 2 | 密碼 |
| 3 | 用戶賬號的UID |
| 4 | 所屬主要組的GID |
| 5 | 用戶描述資訊 |
| 6 | 家目錄 |
| 7 | 登陸 shell 資訊 |
這里對密碼段的內容進行解釋,現在 Linux 的密碼不再存放在 passwd 檔案里了,現在的密碼已經放到 /etc/shadow 檔案中了,只是用 x 充當一個占位符,
/etc/shadow
cat /etc/shadow
(這里不再過多展示圖片了,直接截取第一行 root 用戶的相關資訊進行展示)
root:$6$jclnGz.Ft4JORmf5$s9CmchcHqxDhVQPx7UGxq2icymWkO.Y8Kpxd5MXj330.JAAWKvg82YS074spsqWWU5EGjLQ08e.kgcGqJ6rcP1::0:99999:7:::
- 還是按照慣例將冒號作為分割符
root: 1
$6$jclnGz.Ft4JORmf5$s9CmchcHqxDhVQPx7UGxq2icymWkO.Y8Kpxd5MXj330.JAAWKvg82YS074spsqWWU5EGjLQ08e.kgcGqJ6rcP1: 2
: 3
0: 4
99999: 5
7: 6
:: 7
| 欄位 | 含義 |
|---|---|
| 1 | 用戶名 |
| 2 | 加密的密碼字串資訊 |
| 3 | 上次修改密碼的時間 |
| 4 | 密碼最短有效天數,默認為0 |
| 5 | 密碼最長有效天數,默認為99999 |
| 6 | 提前多少天警告用戶口令將要過期,默認為7 |
| 7 | 在密碼過期多少天后就禁用該用戶 |
這里也簡單提一下第二個密碼欄位:如果是 */!! 的話就代表沒有設定密碼不能登陸,
練習題:統計哪些沒有設定密碼的用戶,輸出用戶名和數量
awk可以解決,如果不會可以了解一下
cat /etc/shadow |awk -F: 'BEGIN{i=0} $2 ~ /!!|*/ {i++;print $1"沒有設定密碼"}END{print "一共有"i"個用戶沒有設定密碼"}'
/etc/group
cat /etc/group
- 選取root的group資訊
root:x:0: ==> 組名:密碼占位符:gid:
Linux用戶
Linux中的用戶是什么樣的呢?
兩個比較簡單的命令: 1 - useradd 可以新建用戶;2 - id 可以查看用戶的id號:
useradd ameame
id ameame
我們可以看一下運行得到的結果:

useradd ameame
id ameame
uid=1005(ameame) gid=1005(ameame) 組=1005(ameame)
這里我們看到 id 命令輸出的結果有 3 個: uid、gid、組:
| 名稱 | 作用 |
|---|---|
| uid | user id 相當于 Linux 中用戶的身份證號 |
| gid | group id ,group 是 Linux 中的組,相當于組的身份證號 |
| 組 | 一個賬戶可以屬于多個組,組里面存放用戶存在的組名集合 |
Linux 中的用戶分為:
- 超級用戶 - root uid 為 0;
- 程式用戶 - uid 為 1 - 999 ( 準確點應該是 201 -999 ) ;
- 普通用戶 - uid 大于等于 1000,默認從1000開始,60000截止,但是這里的截至并不是 uid 大于 60000 就會出錯,而是程式默認創建最大到 60000,可以通過
useradd -u指定用戶 uid ,
Linux中的組
Linux 中組分為:
- 主要組/基本組
- 次要組/附屬組
一個組會有一個組對應的 gid ,一個用戶都有一個主要組,但是可以有多個附屬組,所以 id username 得到的 gid 是用戶主要組的 gid ,得到的組是用戶所在是所有組名及其 gid 組成的一個集合,
用戶操作
useradd的更多使用方式
| 命令選項 | 作用 |
|---|---|
| -e | 指定賬號的失效時間 |
| -u | 指定 UID |
| -s | 指定 shell 地址 |
| -g | 指定主要組名 |
| -G | 指定用戶的次要組名 |
| -c | 指定用戶描述資訊 |
| -d | 指定用戶家目錄 |
| -M | 不為該用戶創建家目錄 |
| -r | 新建系統用戶,不會新建家目錄,就是程式用戶 |
我們直接使用看看效果
useradd -u 318038 -s /bin/bash -c psglgd=maybe psglgd_maybe
cat /etc/passwd | grep maybe
- 得到結果
psglgd_maybe:x:318038:1006:psglgd=maybe:/home/psglgd_maybe:/bin/bash
我們可以看到我們新建的用戶 psglgd_maybe 的 uid 是我們設定的318038,shell 地址為 /bin/bash,描述資訊為psglgd=maybe,其他的方法也可以采用類似的方法進行定義,這時我們來研究一下 -g 與 -G:
-g : 指的是給用戶設定主要組
-G :指的是給用戶設定次要組
- 首先新建組
groupadd dota2 -g 1314
# 新建組 - dota2 ,并設定 gid 為1214
useradd -g dota2 Ameame
cat /etc/passwd | grep Ameame
# Ameame:x:1006:1314::/home/Ameame:/bin/bash
id Ameame
# uid=1006(Ameame) gid=1314(dota2) 組=1314(dota2)
- 我們可以看到結果:
- 新建的用戶 Ameame 的主要組 id 為 1314 -- dota2 這個組
groupadd LGD -g 5000
# 新建組 - LGD ,并設定 gid 為5000 (w)
useradd -g dota2 -G LGD ameame
cat /etc/passwd | grep ameame
# ameame:x:1007:1314::/home/ameame:/bin/bash
id ame
# uid=1007(ameame) gid=1314(dota2) 組=1314(dota2),5000(LGD)
- 我們可以看到結果
- 新建的用戶 ameame 的主要組 id 為1314 -- dota2 這個組
- 所存在組的集合為:1314 ,5000 兩個組,是 dota2 和 LGD 兩個組的集合
- dota2 是用戶存在的主要組 LGD 是次要組
passwd 命令使用方式
passwd 是 Linux 中幫用戶設定密碼的命令,新建了用戶之后可以使用passwd 命令對用戶進行密碼設定,密碼設定完成后該用戶就是可以遠程登陸的用戶了,
補充提問:什么用戶是可登陸的用戶?
1 - 用戶是否設定密碼,設定了密碼是登陸的條件;
2 - shell是否為正常的 shell,例外shell是不能登陸的,
什么是正常的 shell?
/bin/bash 和 /bin/sh 是正常的shell;
/sbin/nologin 是例外 shell,nologin 是不能登陸的,
格式: passwd [選項] 用戶名
| 選項 | 作用 |
|---|---|
| -d | 清空用戶的密碼 |
| -l | 鎖定用戶密碼 |
| -u | 解鎖用戶密碼 |
| -S | 查看用戶賬號的狀態 |
首先我們來看看 passwd 是如何來設定密碼的:
passwd ameame
- 顯示輸出:
更改用戶 ameame 的密碼 ,
新的 密碼:
這里有一個很有意思的現象:當我們輸入回文密碼的時候(12321 這種就被稱為回文明密碼),它會有一個報錯
更改用戶 ameame 的密碼 ,
新的 密碼:
無效的密碼: 密碼是一個回文
重新輸入新的 密碼:
這邊將用戶 ameame 的密碼設定成 123456,就可以用這個新創建的賬號密碼從遠程登陸我們的 Linux 系統了!
現在我們先看一下 ameame 這個賬號 設定密碼后 shadow 檔案格式,然后分別使用 passwd -l 和 -u 對比一下區別:
cat /etc/shadow | gerp ameame
ameame:$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::
passwd -l ameame
鎖定用戶 ameame 的密碼 ,
passwd: 操作成功
cat /etc/shadow | gerp ameame
ameame:!!$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::
1. 這里我們看到,密碼前面被設定了!!
2. !! 的密碼就是無效密碼
passwd -u ameame
解鎖用戶 ameame 的密碼,
passwd: 操作成功
cat /etc/shadow | gerp ameame
ameame:$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::
3. 解鎖后!!消失了 密碼是可以使用的有效密碼
另外,補充一個設定密碼常用方式:
echo "123456" | passwd username --stdin
- stdin的意思是標準化輸入
- 代表收錄前面 echo 的值 123456 認為是從鍵盤輸入的,然后進行密碼的設定
- 因為設定密碼的時候默認收取的是鍵盤資料,因此使用該命令設定密碼的時候需要加一條這個陳述句
userdel 洗掉用戶的用法
使用: userdel [-r] username
-r --remove
意思是洗掉用戶,并洗掉創建的家目錄和用戶郵箱,洗掉用戶的時候使用 -r 方法能將用戶的所有資料洗掉干凈,
usermod 修改用戶
全稱: user modifies
使用方式: usermod [選項] username
| 命令選項 | 作用 |
|---|---|
| -e | 指定賬號的失效時間 |
| -u | 指定 UID |
| -s | 指定 shell 地址 |
| -g | 指定主要組名 |
| -G | 指定用戶的次要組名 |
| -c | 指定用戶描述資訊 |
| -u | 解鎖用戶密碼 |
| -l | 鎖定用戶密碼 |
- 這里只補充一點, usermod -l username 和 passwd -l username 的區別
- 下面看例子
usermod -l ameame
cat /etc/shadow|grep ameame
ameame:!$6$n2530n56Adz4QJhc$G2std.13kPpT3IoeIYg4.OGgv32JQ75rmW2R23B.O/4yLx1hNnu/J1LxuF.kMH7ZmgOXu3yLx6aQKaLs5UPCS/:18741:0:99999:7:::
區別就是 usermod -l 鎖定用戶密碼的時候,只會在加密密碼前面加上一個 ! 讓這個密碼變成無效密碼,
關于 useradd 命令后臺執行情況
- 修改檔案 - /etc/passwd;
- 修改檔案 - /etc/shadow;
- 修改檔案 - /etc/group;
- 創建家目錄 - /home/username;
- 復制 /etc/skel/* 到新建用戶的家目錄下;
- 在/var/spool/mail 檔案新建用戶郵箱,
/etc/skel/* 檔案夾下,復制的內容都有哪些?
- .bash_profile : 用戶每次登陸的時候就會執行的腳本檔案;
- .bash_logout :用戶每次退出的時候就會執行的腳本檔案;
- .bashrc : 每次進入新的bash環境下執行的腳本檔案,就是每次使用bash命令的時候就會加載這個組態檔;
- .bashhistory : 記錄了上次注銷前使用的最多1000條命令,
Linux的檔案保護
因為 passwd 、shadow 這些檔案都十分重要,因此不要輕易的對這些檔案進行操作,Linux 為了方便系統恢復,設定了備份檔案:
ls /etc/passwd*
# 輸出 /etc/passwd /etc/passwd-
ls /etc/shadow*
# 輸出 /etc/shadow /etc/shadow-
ls /etc/group*
# 輸出 /etc/group /etc/group-
帶 - 號的就是備份檔案,我們來探究一下備份檔案和原檔案之間的差異:
diff /etc/passwd /etc/passwd-
# 判斷兩個檔案是否有差異
- 輸出內容
29a30
> ameame:x:1007:1314::/home/ameame:/bin/bash
# 這似乎是我們新建的一個用戶,我們再新建一個用戶看看兩個之間有什么變化
useradd chalify
diff /etc/passwd /etc/passwd-
- 輸出內容
30d29
< chalify:x:1007:1007::/home/chalify:/bin/bash
# 嗷? 沒有了ameame 但是新建的用戶 chalify 出現了
以此,得到結論:
在有對用戶進行改動時,備份檔案和原檔案存在差異,備份檔案每次都會比原檔案少一次操作,會落后一步操作命令,
至此,關于 Linux 的用戶和組的內容結束了,這里面涉及了很多常用的檔案命令以及方法,喜歡別忘了點個贊點個關注!
如果想學更多,歡迎來訪 三創 一起交流學習.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279916.html
標籤:其他
