linux中group_passwd_shadow文件詳解

linux中與用戶管理、用戶組控制相關的主要的三個文件是 /etc/group /etc/passwd/etc/shadow。這三個文件中確定了系統中的所有用戶以及其所在組的信息,包括用戶名,用戶密碼,用戶組,用戶ID和組ID等等,直接通過修改這些文件就可以實現增加用戶等操作,而如adduser <username>這樣的指令本質上最終也是在修改這些文件。下面對這個三個文件的內容做一個簡要分析。

/etc/group

使用vim打開該文件

vim /etc/group

可以看到文件中由多行組成,其中每行代表一個組的信息,以root組為例說明每一行的格式及含義:

root:x:0:

該行由四段組成,每一段間以:區分,每段含義如下:

組名稱 組密碼 組ID 組成員
root x 0
  • 其中組密碼均顯示為x,在unix的早期這里是直接顯示明文密碼的,后來出于安全考慮使用加密算法進行加密,并將加密后的值單獨使用一個文件進行保存
  • 組成員如果顯示空缺則該組只有一個用戶且用戶名與組名相同,如果該組有多個用戶,則該字段顯示所有的用戶名,中間以,隔開

/etc/passwd

同樣使用vim打開該文件,可以看到該文件格式與group類似由多行組成,每行代表了一個用戶的信息,依然以root用戶為例,該行顯示:

root:x:0:0:root:/root:/bin/bash

其中由7段組成,每段間以:分隔,每段含義如下

用戶名 用戶密碼 用戶ID 組ID 備注 家目錄 啟動shell
root x 0 0 root /root /bin/bash
  • 用戶密碼與上面的組密碼類似,都是為了與早期版本兼容而均顯示為x,實際的用戶密碼加密后將加密值存儲在etc/shadow文件中,即接下來要介紹的一個文件
  • 用戶ID必須為非負數,同時0固定為root用戶,1~499為系統保留用戶,500以上則為普通用戶
  • 備注為一行不含空格的字符串,用于簡要表明該用戶的信息
  • 啟動shell為從該用戶登錄系統后所使用的shell程序,常用的shell有sh csh ksh tcsh bash等等,默認情況下為/bin/sh,該段也可以為一個程序如python等,這樣從該用戶登錄系統后只能運行該程序,結束后退出

/etc/shadow

該文件保存用戶的密碼加密后的信息,打開該文件需要root權限,打開后第一行為root的密碼信息:

root:$id$salt$encrypted:17051:0:99999:7:::

由8個:分割成9個字段,每個字段定義如下

用戶名 加密值 最近密碼修改時間 密碼最短使用天數 密碼最長使用天數 n天前提示密碼即將過期 密碼非活動天數 密碼額定日期 保留字段
root $id$salt$encrypted 17051 0 99999 7

對部分字段的說明:

  • 加密值:上表中$id$salt$encrypted并不是實際顯示在文件中的值,而是由兩個$符號隔開的三個字段
    • id:為加密方法
id 加密方法
1 MPS
2a Blowfish
5 SHA-256
6 SHA-512
    • salt: 從[a-zA-Z0-9]中選若干字符用于進行擾亂算法
    • encrpted:經過加密后的值
      如果整個字段顯示!則代表該用戶被鎖定,無法登陸,可以使用usermod -U <username解鎖
  • 最近密碼修改時間: 從1970年1月1日距密碼修改日期共經歷多少天
  • 最短使用密碼使用天數:0為無限制
  • 最長使用密碼使用天數:99999為無限制
  • 密碼非活動天數:0表示過期立即鎖定,-1表示永不鎖定

關于這三個文件的常用bash指令

一般來說不建議直接修改這三個文件,因為這三個文件之間相互之間,以及與其他文件之間是有聯系關系的,單獨修改其中一個文件時還需要對其他關聯文件進行同步修改,而一些常用操作可以通過bash指令來完成,下面指令中<>內為用戶定義的變量值。

  • 用戶添加 useradd <usernamer>
  • 用戶刪除 userdel <username>
  • 用戶名修改 usermod -l <newname> <oldname>注意這個操作僅僅只修改用戶名稱,家目錄名等需要手動更改
  • 鎖定用戶 usermod -L <username>鎖定后用戶無法登陸,需要root權限,會導致etc/passwd的密碼字段顯示為!
  • 解鎖用戶 usermod -U <sername> 解鎖后會去除etc/passwd的密碼字段的!
  • 用戶密碼修改 passwd <username>
  • 更改用戶所在組 usermod -G <groups> <username>這個指令會更改用戶到<groups>列表中的組中,如果用戶原先所在的組沒有寫入這個列表中,則用戶會自動從這個組退出,如果增加-a選項,則不會從原先所在而沒有在<groups>中出現的的組中退出。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容