Linux 伺服器系統管理第五章 帳戶管理  上一頁    下一頁

5-4 帳戶管理檔案

內容:

一般 Unix/Linux 系統有四個主要的帳戶管理檔案,分別是 /etc/passwd/etc/shadow/etc/group /etc/gshadow,並且都設定成僅能『讀取』,不可修改或執行。管理者如要修改的話,則須先它設定成可寫入,完成後再改回來(利用 chmod)。以下分別介紹之。

5-4-1 帳戶檔案 - /etc/passwd

此檔案在建立系統時便已存在,管理者不用特地去產生它,而且當管理者操作增加、刪除或更新帳戶命令時,也會自動修改此檔案。當然,管理者也可以直接利用 vi 編輯此檔案來管理帳戶,但一般系統都不建議如此操作,還是利用正規管理命令(容後介紹)較為妥當。我們可以利用 # cat /etc/passwd 命令,觀察此檔案內容,如下所示:

# cat /etc/passed

root:BXOVk2FNVaoKs:0:0:root:/root:/bin/bash

bin:*:1:1:bin:/bin:/sbin/nologin

daemon:*:2:2:daemon:/sbin:/sbin/nologin

adm:*:3:4:adm:/var/adm:/sbin/nologin

lp:*:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:*:5:0:sync:/sbin:/bin/sync

shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown

halt:*:7:0:halt:/sbin:/sbin/halt

mail:*:8:12:mail:/var/spool/mail:/sbin/nologin

news:*:9:13:news:/etc/news:

uucp:*:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:*:11:0:operator:/root:/sbin/nologin

games:*:12:100:games:/usr/games:/sbin/nologin

gopher:*:13:30:gopher:/var/gopher:/sbin/nologin

ftp:*:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:*:99:99:Nobody:/:/sbin/nologin

…..

tsnien:GaB2MI0gT.psI:508:508::/home/tsnien:/bin/bash

其中每一行記錄(即是每一筆資料的意思)表示每一個使用者的帳戶資料。圖 5-4是每一筆記錄中每一欄位所代表的功能,各欄位功能(欄位之間以冒號分隔)如下:

5-4 帳戶檔案內容

  • 使用者名稱(User name,第 1 欄位):使用者身份的識別名稱,又稱為登入名稱(Login name)或帳戶名稱(Account name)。名稱最長為 32 個字元,且同一系統內不可以有兩個以上名稱相同。

  • 密碼(password,第 2 欄位):加密或雜湊演算後的密碼儲存位置。許多系統(如 Fedora core 4)並不會將密碼儲存於此欄位,而是將加密後的密碼儲存於 /etc/shadow 檔案內,此欄位顯示如下(x 的含意容後說明):

csu001:x:502:502:csu students:/home/csu001:/bin/bash

  • 使用者識別碼(User Identifier, UID,第 3 欄位):使用者獨一無二的識別碼。UID 號碼介於 0 ~ 65535 之間,其中 UID=0 root 識別碼;1 ~ 499 則保留給系統使用,大多分配給『系統操作者』帳戶使用;其餘 500 ~ 65535 則給一般使用者帳戶使用。

  • 群組識別碼(Group Identifier, GID,第 4 欄位):使用者所屬群組的識別碼。此欄位與 /etc/group 檔案內第三欄位相對應,表示該帳戶使用者是歸屬於哪一個群組。

  • 註解(Comment,第 5 欄位):此欄位僅做說明使用,大多使用於儲存使用者的全名。

  • 家目錄(Home directory,第 6 欄位):該帳戶的家目錄,使用者登入後會立即進入此帳戶。系統管理者在建立帳戶時,必須同時開啟該帳戶的家目錄,並將此目錄的擁有者設定為所建立的帳戶所有,如家目錄未建立完備,該帳戶將無法順利登入系統。

  • 外殼(Shell,第 7 欄位):此欄位指定使用者登入後,執行哪一個外殼程式(如 /bin/bash),亦即指定外殼環境。

5-4-2 群組檔案 - /etc/group

由群組檔案 /etc/group 可以看出系統上已設定的群組,以及每一群組包含的使用者,檔案範例如下(# cat /etc/group):

root::0:root,systexftp,service

bin::1:root,bin,daemon

daemon::2:root,bin,daemon

sys::3:root,bin,adm

adm::4:root,adm,daemon

tty::5:

disk::6:root

lp::7:daemon,lp

……

tsnien:x:508:

上述中,每一列表示一筆記錄,並代表一個群組的屬性,其格式如下:

groupname:password:gid:user-list

其中:

  • 群組名稱(Group name,第 1 欄位):每一群組的名稱,如 binroot 等。某些名稱是系統內定的,多半有其特殊功能。

  • 群組密碼(password,第 2 欄位):目前此欄位不使用。

  • 群組識別碼(Group ID, GID,第 3 欄位):範圍 0 ~ 65535,其中 0 ~ 99 保留給系統使用,其中 root GID 0。此 GID /etc/passwd 內的 GID (第三欄位)相同。如果使用者有獨立群組的話,則 GID UID 的號碼相同。

  • 使用者列表(User list,第 4 欄位):此群組底下的使用者。相同群組的使用者的權限大致上相同,譬如上例中,除了 root 具有超級使用者權限外,systexftp service 使用者都具有相當的權限,這樣的做法是非常危險的。

5-4-3 帳戶隱藏檔 - /etc/shadow

加密或雜湊計算後的密碼是否就安全呢?這是值得深思的問題。如圖 5- 所建立的帳戶,將加密後的密碼儲存於帳戶檔案 /etc/passwd 。我們利用 ls –l 觀察此檔案的安全性如何:

$  ls -l /etc/passwd

-rw-r--r--  1 root root 7716 Jul 16 10:07 /etc/passwd

由它的存取控制碼(-rw-r--r--0644)可以看出,雖然該檔案僅能由 root 修改,但其他所有人都可以讀取它。這是因為系統上還有許多地方必定會利用到 /etc/passwd 檔,所以無法限制他人讀取。如此一來,任何人都可以讀取所有帳戶加密後的密碼,有心人士便可以利用暴力攻擊法或字典攻擊法(請參考拙著『資訊與網路安全技術』),去猜測或破解某一特殊使用者的密碼。一般系統大多利用 MD5 演算法,有心人士只要輸入不同的密碼,再經過 MD5 計算後所得的雜湊值,比較是否與 root 欄位的密碼相同。如果相同的話,表示就已破解 root 的密碼,再利用所猜測的密碼,便可以順利以 root 身份進入系統,如此一來,不但入侵成功而且還享有最高優先權。

由此可見,將加密後的密碼存放於 /etc/passwd 檔案是不可靠的。還好一般 Unix/Linux 都可利用 Shadow 套件來解決此困厄。Shadow 套件不但可以隱藏密碼,還可以擴充密碼的功能,譬如設定帳戶有效期限、密碼更換週期等等。安裝 Shadow 套件之後,系統會另外建立一個密碼管理檔案,其名為 /etc/shadow,是儲存加密後的檔案,亦即相關密碼控制訊息。然而,加密後的密碼就不再存放於 /etc/passwd 檔案,其中每筆記錄將變更為下列格式:(# cat /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

…..

tsnien:x:502:502::/home/tsnien:/bin/bash

原來儲存密碼的第二個欄位,不再儲存加密後的密碼,而以『x』取代,表示加密後密碼已移植到 /etc/shadow 檔案上。另外,觀察 /etc/shadow 檔案屬性如下:

$ ls -l /etc/shadow

-r--------  1 root root 8709 Jul 16 10:07 /etc/shadow

我們可以發現 /etc/shadow 的存取控制碼為 0400,亦即只有 root 可以讀取,其他使用者是不允許讀取的。儲存於 /etc/shadow 的加密後密碼,一般使用者是無法讀取,如此便可以增加破解密碼的困難度(當然還可利用其他方法破解)。

欲觀察 /etc/shadow 的檔案內容,必須以 root 帳號登入系統,如下所示(# cat /etc/shadow):

root:$1$oa4Fm13y$b1aJSwPYX2JDJSIuTVDxV0:12832:0:99999:7:::

bin:*:12832:0:99999:7:::

daemon:*:12832:0:99999:7:::

adm:*:12832:0:99999:7:::

lp:*:12832:0:99999:7:::

sync:*:12832:0:99999:7:::

shutdown:*:12832:0:99999:7:::

halt:*:12832:0:99999:7:::

mail:*:12832:0:99999:7:::

….

radiusd:!!:12832:0:99999:7:::

ldap:!!:12832:0:99999:7:::

mysql:!!:12832:0:99999:7:::

…..

tsnien:$1$EvORlBb6$zhui.EoD70ir8FiWVhIj/0:12838:0:99999:7:::

如同 /etc/passwd 檔案一樣,每一行表示一筆記錄並對應到 /etc/passwd 檔案資料,表示某一帳戶的密碼管理訊息。每一筆資料包含若干個欄位,欄位之間以冒號(:)分隔,如圖 5-5 所示。各欄位功能如下說明:

5-5 /etc/shadow 各欄位功能

  • 使用者名稱(User name,第 1 欄位):該筆記錄的使用者名稱(或稱帳戶名稱、登入名稱),此欄位與 /etc/passwd 檔案相對應的使用者名稱。

  • 密碼(Password,第 2 欄位):儲存該帳戶的加密或雜湊演算後的密碼。如果該欄位內容是兩個驚嘆號(!!),表示該帳戶已被鎖定而且無法登入(或還未開啟);如果是一個星號(*),則表示該帳戶是特殊使用者,並且無法直接登入,如 lp 等等。

  • 最後變更日期(Last changed,第 3 欄位):儲存該帳戶密碼最後變更的日期,但不是直接儲存某年某月的日期,而是取某一日期(如 1970 1 1 日)到所變更日期之間的天數。

  • 至少使用天數(Min days,第 4 欄位):密碼至少必須使用的天數。譬如若此欄位為 10,表示密碼上次變更後(Last changed 欄位),至少必須經過 10 天之後才可以再變更密碼。此欄位一般甚少使用,大多設定為 0

  • 使用最多天數(Max days,第 5 欄位):密碼最多可使用的天數,亦即在這個期間必須變更密碼。譬如若此欄位為 30,則表示上次變更密碼後(Last changed 欄位值),30 天內必須重新變更密碼。如果沒有特定指定可以使用幾天,可將此欄位設定成最大值(99999),表示永遠有效的意思。

  • 警告(Warning,第 6 欄位):密碼過期之前警告的天數。譬如若此欄位是 7,表示該密碼使用最多天數的最後 7 天內,使用者登入時,都會發出警告的訊息;如果沒有特殊指定,此欄位大多設定為 7

  • 過期天數(Expires,第 7 欄位):此欄位記錄著允許密碼過期變更的天數。譬如若此欄位設定為 5,表示密碼過期的 5 天內還可登入,如果再超過的話,則帳戶就會被鎖定而且無法登入(需管理者重新設定)。此欄位若為 0 表示密碼永遠有效。

  • 鎖定(Disabled,第 8 欄位):此欄位為 0,表示該帳戶已被鎖定;否則表示未被鎖定。

5-4-4群組隱藏檔 - /etc/gshadow

雖然目前甚少使用群組密碼,但 Shadow 套件還是建立一個群組密碼隱藏檔案 /etc/gshadow。因為甚少使用此檔案,這裡僅簡單介紹。檔案範例如下(# cat /etc/gshadow):

root:::root

bin:::root,bin,daemon

daemon:::root,bin,daemo

….

tsnien:!!::

其中每一行表示一個群組的管理訊息,它是由四個欄位所構成,欄位之間以冒號(:)分隔,如圖 5-6 所示。各欄位功能如下:

  • 群組名稱(Group name,第 1 欄位): /etc/group 相對應的群組名稱。

  • 密碼(Password,第 2 欄位):加密後群組密碼。

  • 管理者(Administrators,第 3 欄位):群組管理員的帳戶名稱,如果超過一位管理員,會以逗號(,)分隔。

  • 成員(Members,第 4 欄位):群組成員的帳戶名稱;如果超過一個成員,會以逗號(,)分隔。

5-6 /etc/gshadow 各欄位功能

翻轉工作室:粘添壽

 

Linux 伺服器系統管理 - CentOS:

 

 

 

翻轉電子書系列: