linux用戶及組相關文件介紹

  • 2020 年 11 月 3 日
  • 筆記

用戶和組文件介紹

 

 

1.用戶帳號文件:passwd

passwd命令用於設置用戶的認證資訊,包括用戶密碼、密碼過期時間等。系統管理者則能用它管理系統用戶的密碼。只有管理者可以指定用戶名稱,一般用戶只能變更自己的密碼。

選項

-d:刪除密碼,僅有系統管理者才能使用;
-f:強制執行;
-k:設置只有在密碼過期失效後,方能更新;
-l:鎖住密碼;
-s:列出密碼的相關資訊,僅有系統管理者才能使用;
-u:解開已上鎖的帳號。

知識擴展

與用戶、組賬戶資訊相關的文件

存放用戶資訊:

/etc/passwd
/etc/shadow

存放組資訊:

/etc/group
/etc/gshadow

用戶資訊文件分析(每項用:隔開)

例如:jack:X:503:504:::/home/jack/:/bin/bash
jack  //用戶名
X  //口令、密碼
503  //用戶id(0代表root、普通新建用戶從500開始)
504  //所在組
:  //描述
/home/jack/  //用戶主目錄
/bin/bash  //用戶預設Shell

組資訊文件分析

例如:jack:$!$:???:13801:0:99999:7:*:*:
jack  //組名
$!$  //被加密的口令
13801  //創建日期與今天相隔的天數
0  //口令最短位數
99999  //用戶口令
7  //到7天時提醒
*  //禁用天數
*  //過期天數

實例

如果是普通用戶執行passwd只能修改自己的密碼。如果新建用戶後,要為新用戶創建密碼,則用passwd用戶名,注意要以root用戶的許可權來創建。

[root@localhost ~]# passwd linuxde    //更改或創建linuxde用戶的密碼;
Changing password for user linuxde.
New UNIX password:          //請輸入新密碼;
Retype new UNIX password:   //再輸入一次;
passwd: all authentication tokens updated successfully. //成功;

普通用戶如果想更改自己的密碼,直接運行passwd即可,比如當前操作的用戶是linuxde。

[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde用戶的密碼;
(current) UNIX password:   //請輸入當前密碼;
New UNIX password:         //請輸入新密碼;
Retype new UNIX password:  //確認新密碼;
passwd: all authentication tokens updated successfully. //更改成功;

比如我們讓某個用戶不能修改密碼,可以用-l選項來鎖定:

[root@localhost ~]# passwd -l linuxde    //鎖定用戶linuxde不能更改密碼;
Locking password for user linuxde.
passwd: Success           //鎖定成功;

[linuxde@localhost ~]# su linuxde   //通過su切換到linuxde用戶;
[linuxde@localhost ~]$ passwd      //linuxde來更改密碼;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password:          //輸入linuxde的當前密碼;
passwd: Authentication token manipulation error     //失敗,不能更改密碼;

再來一例:

[root@localhost ~]# passwd -d linuxde  //清除linuxde用戶密碼;
Removing password for user linuxde.
passwd: Success                         //清除成功;

[root@localhost ~]# passwd -S linuxde    //查詢linuxde用戶密碼狀態;
Empty password.                         //空密碼,也就是沒有密碼;

注意:當我們清除一個用戶的密碼時,登錄時就無需密碼,這一點要加以注意

 

/etc/passwd每一個分段的含義:
1、賬戶名稱:
    用來對應UID
2、密碼:
    早起Unix系統的密碼就是防止這個欄位上,但是英文這個檔案的特性是所有程式都能讀取,容易造成密碼數據被竊取
    應此後來就將這個欄位的密碼數據放到了/etc/shadow中了,所以這裡使用【X】,
3、UID:
    這就是使用者標示符,UId有以下限制:
    ID             該ID使用的者特性
    0            UID是0時,代表這個帳號是【系統管理員】!所以當你的其他啊帳號名稱也具有root
                的許可權是,就將該帳號的UID改為0即可,一個系統上面的系統管理不見得只有root,
                不過不建議有多個UID為0的帳號。
    1~499        保留給系統使用的ID,默認500以下的數字給系統作為保利帳號只是一個習慣。
                由於系統上面啟動的服務希望使用較小的許可權去運行,應此不希望使用root的身份去執行
                這些服務,所以我們就得要提供這些運行中的程式的擁有者帳號才行,這些系統帳號通常是不可登陸的,
                所以才會有/sbin/nologin這個特殊的shell的存在。
    500~        一般使用者
4、GID:
        這個與/etc/group有關!其實/etc/group的觀念與/etc/passwd差不多,應用來規範組名
5、用戶資訊說明欄:
6、家目錄:
        root的家目錄在/root,所以當root登陸的之後,就會立刻跑到/root目錄裡頭,如果壞、這個帳號需要使用
        特別大的空間,就可以對這個欄位進行修改,已移動到其他同硬碟。默認的用戶家目錄在/home/youIdname
             
/etc/shadow文件結構:
    
8、Shell:
        定義用戶登陸系統使用什麼shell,這裡需要注意,有一個shell可以用來特帶成讓賬戶無法取得shell環境的登陸動作!
        那就是/sbin/nologin這個特殊東西,也可以用來製作pop郵件帳號者的數據。(Post Office Protocol)

 

通過查看「/etc/passwd」文件,可以得到如下完整的系統帳號文件

 

 

 

 

2.用戶影子文件——shadow

 

 /etc/shadow

由於shadow文件的許可權,所以,只有root可以讀

vi /etc/shadow

一共有九列資訊:

第一列表示用戶名;

第二列表示經過加密之後的密碼,如果密碼是!!或者*,表示沒有密碼,不能登錄;

第三列表示密碼的最後一次修改日期,使用1970.1.1作為標準時間,每過一天時間戳+1;

第四列表示兩次密碼的修改間隔;

第五列表示密碼的有效期;

第六列表示密碼到期之前的警告時間;

第七列表示密碼過期之後的寬限天數(0表示到期後立即失效,-1則永久不失效);

第八列表示帳號失效時間,要用時間戳表示,時間戳換算為日期:date -d “1970-01-01 18382 days”,日期換算為時間戳:echo $(($(date –date=”2020/05/13” +%s)/86400+1));

第九列保留

 

3.用戶組帳號文件——group和gshadow

group:

/ect/group 文件是用戶組配置文件,即用戶組的所有資訊都存放在此文件中。

此文件是記錄組 ID(GID)和組名相對應的文件。前面講過,etc/passwd 文件中每行用戶資訊的第四個欄位記錄的是用戶的初始組 ID,那麼,此 GID 的組名到底是什麼呢?就要從 /etc/group 文件中查找。

/etc/group 文件的內容可以通過 Vim 看到:

 

 

 


可以看到,此文件中每一行各代表一個用戶組。在前面章節中,我們曾創建 lamp 用戶,系統默認生成一個 lamp 用戶組,在此可以看到,此用戶組的 GID 為 502,目前它僅作為 lamp 用戶的初始組。

各用戶組中,還是以 “:” 作為欄位之間的分隔符,分為 4 個欄位,每個欄位對應的含義為:

組名:密碼:GID:該用戶組中的用戶列表


接下來,分別介紹各個欄位具體的含義。

組名


也就是是用戶組的名稱,有字母或數字構成。同 /etc/passwd 中的用戶名一樣,組名也不能重複。

組密碼


和 /etc/passwd 文件一樣,這裡的 “x” 僅僅是密碼標識,真正加密後的組密碼默認保存在 /etc/gshadow 文件中。

不過,用戶設置密碼是為了驗證用戶的身份,那用戶組設置密碼是用來做什麼的呢?用戶組密碼主要是用來指定組管理員的,由於系統中的帳號可能會非常多,root 用戶可能沒有時間進行用戶的組調整,這時可以給用戶組指定組管理員,如果有用戶需要加入或退出某用戶組,可以由該組的組管理員替代 root 進行管理。但是這項功能目前很少使用,我們也很少設置組密碼。如果需要賦予某用戶調整某個用戶組的許可權,則可以使用 sudo 命令代替。

組ID (GID)


就是群組的 ID 號,Linux 系統就是通過 GID 來區分用戶組的,同用戶名一樣,組名也只是為了便於管理員記憶。

這裡的組 GID 與 /etc/passwd 文件中第 4 個欄位的 GID 相對應,實際上,/etc/passwd 文件中使用 GID 對應的群組名,就是通過此文件對應得到的。

組中的用戶


此欄位列出每個群組包含的所有用戶。需要注意的是,如果該用戶組是這個用戶的初始組,則該用戶不會寫入這個欄位,可以這麼理解,該欄位顯示的用戶都是這個用戶組的附加用戶。

舉個例子,lamp 組的組資訊為 “lamp:x:502:”,可以看到,第四個欄位沒有寫入 lamp 用戶,因為 lamp 組是 lamp 用戶的初始組。如果要查詢這些用戶的初始組,則需要先到 /etc/passwd 文件中查看 GID(第四個欄位),然後到 /etc/group 文件中比對組名。

每個用戶都可以加入多個附加組,但是只能屬於一個初始組。所以我們在實際工作中,如果需要把用戶加入其他組,則需要以附加組的形式添加。例如,我們想讓 lamp 也加入 root 這個群組,那麼只需要在第一行的最後一個欄位加入 lamp,即 root:x:0:lamp 就可以了。

一般情況下,用戶的初始組就是在建立用戶的同時建立的和用戶名相同的組。

到此,我們已經學習了/etc/passwd、/etc/shadow、/etc/group,它們之間的關係可以這樣理解,即先在 /etc/group 文件中查詢用戶組的 GID 和組名;然後在 /etc/passwd 文件中查找該 GID 是哪個用戶的初始組,同時提取這個用戶的用戶名和 UID;最後通過 UID 到 /etc/shadow 文件中提取和這個用戶相匹配的密碼。

 

gshadow:

前面講過,/etc/passwd 文件存儲用戶基本資訊,同時考慮到賬戶的安全性,將用戶的密碼資訊存放另一個文件 /etc/shadow 中。本節要將的 /etc/gshadow 文件也是如此,組用戶資訊存儲在 /etc/group 文件中,而將組用戶的密碼資訊存儲在 /etc/gshadow 文件中。

首先,我們藉助 Vim 命令查看一下此文件中的內容

文件中,每行代表一個組用戶的密碼資訊,各行資訊用 “:” 作為分隔符分為 4 個欄位,每個欄位的含義如下:

組名:加密密碼:組管理員:組附加用戶列表

組名


同 /etc/group 文件中的組名相對應。

組密碼


對於大多數用戶來說,通常不設置組密碼,因此該欄位常為空,但有時為 “!”,指的是該群組沒有組密碼,也不設有群組管理員。

組管理員


從系統管理員的角度來說,該文件最大的功能就是創建群組管理員。那麼,什麼是群組管理員呢?

考慮到 Linux 系統中帳號太多,而超級管理員 root 可能比較忙碌,因此當有用戶想要加入某群組時,root 或許不能及時作出回應。這種情況下,如果有群組管理員,那麼他就能將用戶加入自己管理的群組中,也就免去麻煩 root 了。

不過,由於目前有 sudo 之類的工具,因此群組管理員的這個功能已經很少使用了。

組中的附加用戶


該欄位顯示這個用戶組中有哪些附加用戶,和 /etc/group 文件中附加組顯示內容相同。