Linux系統中每個用戶的信息,包括用戶名、密碼以及所屬組等都會被存儲在/etc/passwd文件中。
類似的,/ect/group 文件存放用戶組的所有信息。
一、 /etc/passwd
我們可以通過more /etc/passwd 查看該服務器中的用戶信息。
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
andy:x:1000:1000:andy:/home/andy:/bin/bash
文件內容比較規律,一行代表一個用戶,每行有7個字段,字段之間用 冒號 : 分隔,字段含義從左往右依次是:
用戶名、用戶密碼(x)、UID(用戶的ID,唯一表示),GID(用戶的初始組ID),一些說明(沒用),用戶的家目錄,登錄之后的shell
=》LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL
1.用戶名是登錄時使用的名字,區分大小寫,在同一個Linux操作系統中不允許重復,但是操作系統並不以它作為唯一標識字段,而是UID。
2.用戶密碼:你可能會發現用戶密碼都是同樣的x。這是因為Linux出於系統安全考慮,為用戶提供了MD5和Shadow安全密碼服務(安裝時可選,默認都有,建議有),把真正的密碼(密文形式)放在了/etc/shadow文件里。因此,需要注意的是這三個文件對應的權限最好設置成:
/etc/passwd 644 /etc/group 644 /etc/shadow 000
如果/etc/shadow這個文件的權限發生了改變,則需要注意是否是惡意攻擊。
3.UID是用戶的唯一標識,系統是通過 UID 來識別不同的用戶和分配用戶權限的。你可能會有疑問,我明明只有一個root和一個普通(andy)用戶,為什么這里有這么多個用戶。其實只有UID>500的用戶才是普通用戶ID,UID<499的都是系統用戶(也稱為偽用戶),是用來運行系統服務的,可以理解成是不能登錄的,但是也不能刪除的。
0是超級用戶 UID。如果用戶 UID 為 0,則代表這個賬號是管理員賬號。那么在 Linux 中如何把普通用戶升級成管理員呢?只需把其他用戶的 UID 修改為 0 就可以了,這一點和 Windows 是不同的。不過不建議建立多個管理員賬號。
1~499:系統用戶(偽用戶)UID。這些 UID 是系統保留給系統用戶的 UID,也就是說 UID 是 1~499 范圍內的用戶是不能登錄系統的,而是用來運行系統或服務的。其中,1~99 是系統保留的賬號,系統自動創建;100~499 是預留給用戶創建賬號的。
500~65535:普通用戶 UID。建立的普通用戶 UID 從 500 開始,最大到 65535。
注意,其中很多的系統用戶是攻擊者入侵的常用入口,一定要熟悉他們,並注意密碼域是否不為空。
adm擁有賬號文件,起始目錄/var/adm通常包括日志文件
bin擁有用戶命令的可執行文件
daemon用來執行系統守護進程
games用來玩游戲
halt用來執行halt命令
lp擁有打印機后台打印文件
mail擁有與郵件相關的進程和文件
news擁有與usenet相關的進程和文件
nobody被NFS(網絡文件系統)使用
shutdown執行shutdown命令
sync執行sync命令
uucp擁有uucp工具和文件
4.GID(Group ID):用戶的初始組ID
所謂初始組,指用戶一登錄就立刻擁有這個用戶組的相關權限。每個用戶的初始組只能有一個,一般就是將和這個用戶的用戶名相同的組名作為這個用戶的初始組。舉例來說,我們手工創建用戶 lamp,在創建用戶 lamp 的同時就會自動創建一個 lamp 組作為 lamp 用戶的初始組。
所謂附加組,指用戶可以加入多個其他的用戶組,並擁有這些組的權限。每個用戶只能有一個初始組,除初始組要把用戶再加入其他的用戶組外,這些用戶組就是這個用戶的附加組。附加組可以有多個,而且用戶可以有這些附加組的權限。比如,剛剛的 lamp 用戶除屬於初始組 lamp 外,我又把它加入了 users 組,那么 lamp 用戶同時屬於 lamp 組、users 組,其中 lamp 是初始組,users 是附加組。當然,初始組和附加組的身份是可以修改的,但是我們在工作中不修改初始組,只修改附加組,因為修改了初始組有時會讓管理員邏輯混亂。
需要注意的是,在 /etc/passwd 文件的第四個字段中看到的 ID 是這個用戶的初始組。
5.一些說明的內容,可以省略,沒什么影像。
6.用戶的家目錄,即登錄后進入的~目錄路徑。root用戶是/root,普通用戶一般是/home/username
7.登錄之后用的shell(可以理解成用戶登錄之后的所有權限或者不能登錄)
比如:
/bin/bash 就代表這個用戶可以登錄,且登錄后使用/bin/bash
/sbin/nologin就是禁止該用戶登錄。(如果我想要讓某個具有 /sbin/nologin 的用戶知道,他們不能登陸主機時,可以新建 /etc/nologin.txt 這個文件,在文件內面寫上不能登陸的原因,當用戶登錄時,屏幕上就會出現這個文件里面的內容) 注:一般情況下我們要禁止ftp等用戶登錄。
/usr/bin/passwd則是該用戶可以登錄,但是登錄之后只能使用passwd命令修改自身的密碼,不能用其他的命令,如ls。
注意:工作中不建議直接修改/etc/passwd文件,而推薦使用相關的修改命令。
二、/etc/shadow
/etc/shadow雖然是/etc/passwd的影子文件,用來存儲用戶的真正密碼數據,但是/etc/shadow並不是由/etc/passwd生成的,而是互相補充的關系。
root用戶可以通過more /etc/shadow查看影子文件內容:
root:$6$rfOvmKlnnRFX/cB5$Jccj9ZeTrFJoTsz6oI.u6nnRKIeyxkRllD87WezlIYd.zP9tJGs1URLLtdVWbabeNO4u60oz59bvooycrQ3Aq.::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
systemd-network:!!:18096::::::
dbus:!!:18096::::::
polkitd:!!:18096::::::
postfix:!!:18096::::::
sshd:!!:18096::::::
andy:$6$7ujSunxrBHuEijDv$uAMuLBmSDv9wd0hSTIbw5FjFal07A5yuDkXqGyMb78rER4mD8oCN1f4S58.Cmo26/MmRkxQgbpKOYObAB.MWG.:18096:0:99999:7:::
文件內容依然規律,一行對應一個用戶,比較明顯的區別是第二個字段不再是x而是一串密文。
9個字段從左往右依次是=》用戶名:加密口令:上一次修改的時間(從1970年1月1日起的天數):兩次修改口令間隔的最小天數:兩次修改口令間隔的的最大天數:提前多少天警告用戶口令將國企:口令過期之后多少天禁用用戶:用戶過期日期(從1970年1月1日起的天數):保留字段(目前為空)
1.用戶名(也被稱為登錄名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯系在一起;這個字段是非空的;
2.密碼(已被加密),這個字段是非空的;
3.上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改用戶的密碼,然后查看/etc/shadow中此字段的變化;
4.兩次修改口令間隔最少的天數;如果這個字段的值為空,帳號永久可用;
5.兩次修改口令間隔最多的天數;如果這個字段的值為空,帳號永久可用;
6.提前多少天警告用戶口令將過期;如果這個字段的值為空,帳號永久可用;
7.在口令過期之后多少天禁用此用戶;如果這個字段的值為空,帳號永久可用;
8.用戶過期日期;此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數),如果這個字段的值為空,帳號永久可用;
9.保留字段,目前為空,以備將來發展之用;
三、/etc/group
/etc/group 文件是用戶組的配置文件,通過more /etc/group命令查看文件內容
root:x:0:
bin:x:1:
...
...
andy:x:1000:andy
cgred:x:996:
docker:x:995:
文件中一行表示一個組,4個字段從左往右依次為:用戶組(Group)、用戶組口令、GID、該用戶組所包含的用戶=》group_name:passwd:GID:user_list
1.用戶組名
2.用戶組密碼,和/etc/passwd一樣是用x代替,真正的密碼數據存放在/etc/gshadow中
3.GID 組的唯一標識,和/etc/passwd中的GID關聯起來
4.用戶列表,每個用戶之間用,號分割;本字段可以為空;如果字段為空表示用戶組為GID的用戶名;
到此,已經梳理了/etc/passwd、/etc/shadow、/etc/group,它們之間的關系可以這樣理解,先在 /etc/group 文件中查詢用戶組的 GID 和組名;然后在 /etc/passwd 文件中查找該 GID 是哪個用戶的初始組,同時提取這個用戶的用戶名和 UID;最后通過 UID 到 /etc/shadow 文件中提取和這個用戶相匹配的密碼。