Linux中的用戶配置文件(passwd、shadow、group、gshadow)

一、用戶信息文件  : /etc/passwd

首先我們可以使用命令man 5 passwd查看以下 passwd 文件的格式

我們看出 passwd 文件的格式是由七個字段組成,每個字段通過冒號分隔,並且每一行代表一個用戶。下面我們將通過我個人的passwd文件作爲模板,詳細介紹每一個字段的含義。

第一字段  :用戶名稱(account)

這個字段沒什麼可說的,就是用戶個人的用戶名,不過,需要注意的是用戶在起名時要遵守相應規範。

第二字段  :密碼標識(password)

該字段若是 x ,則代表這個用戶設有密碼。x 不能省略,如果省略,系統在登錄時就不會去 /etc/shadow 中搜索真正的密碼,從而認爲這個用戶沒有密碼,於是直接登錄,很不安全。

真正的密碼並不存在於 passwd 文件,而是保存在/etc/shadow中,這裏保存的只是一個密碼標識。

第三字段  :UID

0 :表示該賬戶是超級用戶

1~499 : 表示該賬戶是系統用戶(僞用戶)。專門用來爲系統的啓動服務或啓動命令服務,一旦刪除這些僞用戶,系統會崩潰。

                 這些用戶不能登錄,其原因在於最後一個字段的 /sbin/nologin ,我們之後再談。

500及以上  :  普通用戶

當我們想把一個普通用戶變爲超級用戶,只需把該用戶的這個字段改爲 0 ,這樣,該用戶便擁有了超級用戶的權限。

注意 : 改變的只是該用戶的權限,其家目錄還是原來的位置。

第四字段   : GID(用戶初始組ID)

初始組:指用戶一登錄就立刻擁有這個用戶組的相關權限,每個用戶都必須有一個初始組,並且初始組只能有一個,一般就是和這個用戶的用戶名相同的組名作爲這個用戶的初始組。

附加組: 指用戶可以加入多個其他的用戶組,並擁有這些組的權限,附加組可以有多個

在 passwd 該字段下看到的 GID 是這個用戶的初始組 GID,那麼這個組到底指的是哪一個組呢?這時就需要匹配 /etc/group 文件,才能看到。我們不建議更改初始組,如果需要把用戶添加到其他組中,請使用附加組。

第五字段  :  用戶說明

該字段只是對本用戶的一個備註說明,用戶可以把一些重要信息保存在這裏,方便日後的查看。

第六字段  :  家目錄

普通戶  : /home/用戶名/

管理員  : /root/

第七字段  :登錄之後的 shell

shell :命令解釋器。我們需要通過 shell 才能與系統內核進行交流,shell有很多種,Linux 中的默認 shell 是 bash。

我們發現所有僞用戶在這個字段是 /sbin/nologin , 我們知道 log in 是登錄的意思,那麼no log in就是禁止登陸,所以,所有的僞用戶才無法登錄。

也就是說,如果我把某一普通用戶的這一字段由 /bin/bash 改爲 /sbin/nologin ,該用戶就會被禁用,無法登陸。

當然,如果粗心大意把這個字段的 shell 名字寫錯了,也會造成無法登陸的情況。

 

二 、影子文件  /etc/shadow

這個文件也是每一行代表一個用戶,而且它與 passwd 文件的內容是對應的。shadow 下的每一行由冒號分隔的九個字段組成。

我們依然進行詳細介紹。

第一字段  :  用戶名

不贅述。

第二字段  : 加密密碼

真正的密碼就是保存在這一字段,這裏是顯示的加密後的密碼。雖然經過加密,但我們還是不要輕易把這個文件傳給別人,因爲完全可以通過暴力破解來從加密密碼中得到真正的密碼。

如果這一字段是兩個感嘆號 !!或者一個星號 * ,表示該用戶沒有設置密碼,無法登錄。

第三字段  : 密碼最後一次的修改日期

該字段是用時間戳表示的。(以1970年1月1日爲起始時間,每過一天加一,得出來的數字稱爲時間戳。)

如果我們想通過命令行對時間戳進行換算,可以用以下命令:

時間戳換算日期

date  -d  “1970-01-01 17066 days”

日期換算時間戳

echo  $(($(date  --date=”2018/01/01”+%s)/86400+1))

第四字段 : 兩次密碼的修改時間間隔

該字段所謂的間隔是與上一字段相比較的。

如果該字段是 0,則可在任意時刻修改該用戶的密碼。

假如該字段是 10 ,則要求 10 天內不允許用戶修改密碼。

第五字段  : 密碼有效期

比如設置爲30,則每隔30天必須改密碼。如果到期,根據後面第六、第七字段來行動。

我這裏的這一字段顯示的是99999,是個相當長的時間,等同永遠不會失效。

第六字段 :修改密碼警告天數 n

當距離密碼有效期(第五字段)還剩 n 天時,系統每天都會提醒你修改密碼。

第七字段 :密碼到期後的寬限天數

0:代表密碼過期後立即失效

-1:代表密碼永遠不會失效

n :往後寬限 n 天

第八字段 :賬號失效時間

要用時間戳表示。該賬號到期立即失效。

第九字段 : 保留

 

三、組信息文件  /etc/group

該文件顯示的是用戶組的內容,有四個字段,每個字段的特性與前面的 passwd 和 shadow 的一些字段是相似的,所以這裏簡單介紹一下。

第一字段:組名

第二字段:組密碼標誌

與 passwd 中的第二字段特性相同,只是一個密碼標誌,真正的密碼在 /etc/gshadow 中。只是我們通常不給組設置密碼。

第三字段:GID

第四字段:組中附加用戶

我們發現這個字段是空的,說明我們沒有向其中添加其他用戶。並且在這一字段,我們是看不到初始用戶的,要想查看該組的初始用戶,則要通過 GID 來與 passwd 文件對照查看。也許有人疑惑用戶名和用戶組名不是一樣嗎,何必特意去查看呢?因爲這只是一般情況,有時候也會有人故意設置成不同的名字。

四、組密碼文件  /etc/gshadow

該文件每行也是四個字段,group 和 gshadow 是兩個對應的文件,但因爲我們也很少用到它,所以這裏也只是簡述。

第一字段 : 組名

第二字段 : 組密碼

第三字段 :組管理員的用戶名

第四字段 : 組中附加用戶

這四個字段我們從名字就可以瞭解其功能和特性,不在贅述。

 

五、用戶管理的相關文件

關於用戶,除了以上比較重要的四個配置文件,我們還需要了解一些其他相關文件。

1、家目錄

     在前文提到過,在這裏溫習一下。

     普通用戶: /home/用戶名/,所有者和所屬組都是此用戶,權限是700

     超級用戶: /root/,所有者和所屬組都是root用戶,權限是550

2、用戶的郵箱   : /var/spool/mail/用戶名/

      之後的學習會用到,這裏先做一瞭解。

3、用戶模板目錄  :  /etc/skel

   這裏解釋一下什麼叫模板目錄。當我們添加一個新用戶時,進入其家目錄會發現是空的,但其實不然,這裏面還有一些隱藏文件(見下圖),這些文件自然不會是憑空出現,而是從某個地方複製過來的,這個地方就是模板目錄。 

 所以,我們可以進入這個模板目錄中,創建一個名爲new的文件,這樣,每次當我們添加新用戶時,這個文件就會自動複製到該用戶的家目錄中。一般我們可以寫一些警告或者注意事項在裏面。

 

六、用戶管理命令及探究

1、添加用戶

useradd  [選項]   用戶名

-u  UID  : 手工指定用戶的UID號

-d 家目錄  : 手工指定用戶的家目錄

-c 用戶說明 : 手工指定用戶的說明

-g 組名 : 手工指定用戶的初始組

-G 組名 : 指定用戶的附加組

-s  shell :  手工指定用戶登錄的shell,默認是 /bin/bash

 

接下來我們思考一下,在添加一個新用戶時,系統都做了哪些操作呢?

由前面的配置文件我們知道,首先,它在passwd、shadow、group、gshadow中都添加了一行該用戶及其用戶組的信息,然後在 /home 下創建自己的家目錄,並且從模板目錄 /etc/skel 中複製文件到其家目錄,在 /var/spool/mail 中建立自己的郵箱。

我們其實可以通過手動更改這些文件達到添加用戶的目的,不過有點繁瑣罷了。

另外在我們創建新用戶時,許多值都是系統默認的,這些值大多被保存在以下兩個配置文件中。

第一個是  /etc/default/useradd

GROUP=100        用戶默認組(公有模式,我們用的是私人模式,所以不同)

HOME=/home       用戶家目錄

INACTIVE=-1        密碼過期寬限天數

EXPIRE=               密碼失效時間

SHELL=/bin/bash  默認shell

SKEL=/etc/skel     模板目錄

CREATE_MAIL_SPOLL=yes  是否建立郵箱

 

第二個是 /etc/login.defs

PASS_MAX_DAYS 99999     密碼有效期

PASS_MIN_DAYS  0             密碼修改間隔

PASS_MIN_LEN  5                密碼最小位數(由於太簡單了,所以這裏未生效,真正的位數定義在別的地方)

PASS_WARN_AGE  7            密碼到期時間

UID MIN  500                           最小和最大UID範圍       

UID_MAX  60000

GID MIN  500                           最小和最大GID範圍       

GID_MAX  60000

 

2、更改密碼

passwd  [選項]  用戶名

-S   查詢用戶的密碼狀態 (root權限)

-l (小寫 L)   鎖定用戶(實際上是在shadow中的加密密碼字段前加了兩個感嘆號, root權限)

-u   解鎖用戶 (root權限)

--stdin 可通過管道符輸出的數據作爲用戶的密碼(echo “123” | passwd -–stdin 用戶名)

我們之前在介紹shadow配置文件時,曾說過其第二字段加密密碼,如果密碼位是 !! 或 * 代表沒有密碼,不能登錄。現在把這句更新一下,如果在該字段的加密密碼前有感嘆號,其效果也是一樣的。這樣用戶無法登陸,也就達到了鎖定用戶的結果。這就是 passwd -l 鎖定用戶和 passwd -u 解鎖用戶的原理。(詳見下圖)

 

3、修改用戶信息(針對已存在的用戶)

usermod  [選項]  用戶名

 -u  修改UID

-c   修改說明信息

-G   修改附加組

-L   鎖定用戶

(實際上是在 shadow 中的加密密碼字段前加了一個感嘆號,通過passwd鎖定用戶是加兩個感嘆號,其實作用都一樣)

-U  解鎖用戶

 

4、更改用戶密碼狀態

chage [選項] 用戶名

-l (小寫L) : 列出用戶詳細的密碼狀態

-d 日期   : 修改密碼的最後一次的修改日期

-m 天數   : 兩次密碼修改間隔(shadow字段4)

-M 天數   :密碼有效期(shadow字段5)

-w 天數    :密碼過期前警告天數(shadow字段6)

-I  天數     : 密碼過期後寬限天數(shadow字段7)

-E  日期    : 賬號失效時間(shadow字段8)

實際上,這些命令都可以通過修改配置文件 shadow 來達到,其實這個命令中最常用的一條命令爲

chage  -d  0  用戶名

這個命令其實是把密碼修改日期歸零了,這樣用戶在一登錄就需要修改密碼,修改過後,shadow第三字段發生改變,該用戶以後就可以正常使用了。這條命令的作用常見於批量添加用戶後設置了一個極爲簡單的密碼,當某人使用其中的一個用戶第一次登錄時,就可以創建屬於自己的密碼。

5、刪除用戶

userdel  [選項]  用戶名

-r 刪除用戶同時刪除用戶家目錄

相當於手動刪除這些文件:

/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/var/spool/mail/用戶名、/home/用戶名

 

6、切換用戶身份

su    [選項]  用戶名

  -  : 連帶用戶的環境變量一起切換

 -c :僅執行一次命令,而不切換用戶身份

如果我們只用用 su root 命令切換用戶身份,通過 env 命令查看環境變量時,發現一些信息根本沒變(見下圖)。既然已經切換了root,爲什麼有些地方還是看起來還是之前的普通用戶?這一問題通常會導致一些常見的錯誤發生。所以我們在切換用戶時,一定要使用 “-” 選項

su – root -c “useradd test_3”

不切換成root,只是利用root身份執行一個命令。

7、添加組

groupadd  [選項]  組名

-g GID  :   指定組id

8、修改組

groupmod  [選項]  組名

-g  GID  :  修改組id

-n 新組名  :修改組名

例:group  -n  group2 group1       把組名從group1修改爲group2

 

9、刪除用戶組

groupdel  組名

如果該組中有初始用戶,該組是刪除不了的

如果該組中只有附加用戶,可以刪除

 

10、向組中添加用戶

gpasswd  [選項]   組名

-a 用戶名 :把用戶加入組

-d 用戶名 : 把用戶從組中刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章