6.3. Red Hat Enterprise Linux 的特定資訊
底下章節描述了多種 Red Hat Enterprise Linux 的特定功能,能幫助管理者管理使用者帳號與相關資源。
6.3. Red Hat Enterprise Linux 的特定資訊
底下章節描述了多種 Red Hat Enterprise Linux 的特定功能,能幫助管理者管理使用者帳號與相關資源。
CCTSGRPS-BASICS">6.3.1. 使用者帳號、群組、以及存取權限
在 Red Hat Enterprise Linux 中,只要建立了使用者帳號,使用者就可以登入系統、執行任何系統允許存取的應用程式或檔案。Red Hat Enterprise Linux 會根據為使用者或群組設定的存取權限,決定是不是讓他們存取資源。
不管是檔案、目錄、或是應用程式,都有三種不同的存取權限,用來允許或禁止某種存取方式。在檔案列表時,每個獨立字元都代表一種存取權限。以下是這些字元的意義:
r — 表示某個特定的使用者群組可以讀取檔案。
w — 表示某個特定的使用者群組可以寫入檔案。
x — 表示某個特定的使用者群組可以執行檔案。
第四種字元(-)表示不允許存取。
而這三種存取權限,又分別及於三種使用者,分別為:
擁有者(owner) — 擁有這檔案或應用程式的人。
群組(group) — 擁有這檔案或應用程式的群組。
所有人(everyone) — 所有能接觸系統的使用者。
如先前所述,您可以用 ls -l 指令,列出檔案的詳細資料,看出其存取權限。舉例來說,如果使用者 juan 建立了名為 foo 的可執行檔,輸入 ls -l foo 指令可能會顯示如下:
-rwxrwxr-x 1 juan juan 0 Sep 26 12:25 foo |
這檔案的存取權限列在最前面,以一組 rwx 開始。第一組表示的是檔案擁有者的權限 — 以本例來說,使用者 juan 有完整的存取權限,他可以讀、寫、執行檔案。第二組 rwx 則定義了他所屬群組的存取權限(一樣是完整的存取權限);而最後一組則記述了所有其他使用者的存取權限:其他使用者可以讀取、執行檔案,但不能以任何形式修改檔案。
有一點很重要,是您必須牢記在心的:不管 Red Hat Enterprise Linux 上每個應用程式的存取權限與使用者帳號為何,每個使用者執行同一支程式時,都是互不相關的。這意思是說,如果使用者 juan 執行了一個應用程式,那麼這程式只會在他的工作環境中運行。不過有些應用程式需要特別的存取等級,以完成特定任務;包括編輯系統設定或紀錄使用者行為的程式。為了這理由,我們就需要建立特別的存取權限。
Red Hat Enterprise Linux 中共有三種特別的存取權限,分別是:
setuid — 這權限只用在應用程式上,表示應用程式會以檔案擁有者的身份運行,而非執行該應用程式的使用者身份。它會以小寫 s 取代擁有者一欄的 x。如果檔案擁有者並沒有執行權限,那麼系統會以大寫 S 顯現,以反映這項事實。
setgid — 主要供應用程式使用。這權限表示應用程式會以擁有這檔案的群組身份來執行,而非執行這檔案的群組身份。
如果套用到目錄上,那麼在這目錄中建立的所有檔案,其所有權會屬於擁有這目錄的群組,而非建立這檔案的群組。setgid 權限會以小寫 s 取代群組欄位中的 x。如果擁有這檔案或目錄的群組沒有執行權限,那麼系統會以大寫 S 反映出來。
sticky bit — 這位元主要用在目錄上,表示在這目錄中建立的檔案,只能由建立這檔案的人刪除。這權限會以小寫 t 取代所有人欄位中的 x。如果所有人並沒有執行權限,那麼系統會以大寫 T 反映這狀況。
也因為這個原因,Red Hat Enterprise Linux 預設上會把 /tmp/ 目錄設上 sticky bit。
6.3.1.1. 使用者名稱與 UID;群組與 GID
在 Red Hat Enterprise Linux 中,使用者帳號跟群組名稱都是給人方便使用的;在系統內部使用的是數字型態的辨識方式。以使用者帳號來說,這數字稱為「UID」;而對群組來說,這數字稱為「GID」。要讓使用者存取使用者或群組資訊,系統有專門的程式將 UID / GID 翻譯成人類讀得懂的相對格式。
重要 | |
---|---|
如果您打算在公司網路上分享檔案與資源,那麼千萬不能讓任何 UID 與 GID 重複。否則的話,不管您用了什麼存取控制的方法,最後都可能無法正常運作,因為這些方法都以 UID 與 GID 為基礎,而非使用者名稱與群組名稱。 更明確的說,如果檔案伺服器與使用者電腦上的 /etc/passwd 與 /etc/group 檔案中,分別包含了不同 UID 與 GID,那麼設定不良的存取權限就會導致安全性漏洞。 舉例來說,如果使用者 juan 在桌上型電腦的 UID 是500,那麼 juan 在檔案伺服器上建立的檔案,其擁有者的 UID 就會紀錄為 500。但如果另一個使用者 bob 直接從檔案伺服器上登入(甚至是從其他電腦上登入),同時 bob 帳號的 UID 恰巧也是 500,那麼 bob 對 juan 的檔案,就有完整的存取權限,反之亦然。 因此,您一定要不盡任何代價的,避免 UID 與 GID 相衝突。 |
UID 與 GID 的數字,有兩個非常特別的意義。當 UID 與 GID 為零(0)的時候,那表示是 root 使用者,Red Hat Enterprise Linux 會給予特別待遇 — 自動授予所有權限。
第 二個特殊的意義在於:小於 500 的 UID 與 GID 是保留給系統使用的。但跟為零(0)時的 UID / GID 不同,Red Hat Enterprise Linux 不會給予小於 500 的 UID / GID 任何特別待遇。然而,這些號碼是絕對不會分派給一般使用者的;因為這些數字如果不是已經指定給一些系統元件,就是會留待將來指定用。欲知更多關於標準使用 者與群組的相關資訊,請參閱《Red Hat Enterprise Linux 參考手冊》中 使用者與群組 一章。
當您使用 Red Hat Enterprise Linux 的標準工具新增使用者時,使用者帳號的 UID 與 GID 會從 500 開始設定,下一個使用者的 UID/GID 則是 501,再下一個是 502,餘此類推。
我們將在本章稍後的地方,為您介紹 Red Hat Enterprise Linux 中多種建立使用者帳號的工具。但在看這些工具之前,下一節將為您介紹 Red Hat Enterprise Linux 用來定義系統帳號與群組的檔案。
6.3.2. 控制使用者帳號與群組的檔案
在 Red Hat Enterprise Linux 中,使用者帳號與群組的資訊,都儲存在 /etc/ 目錄中。當系統管理者建立新帳號時,必須一併手動編輯這些檔案,或交由應用程式代勞,做適當的變更。
底下記述了 Red Hat Enterprise Linux 的 /etc/ 目錄中,儲存使用者與群組資訊的幾個檔案。
6.3.2.1. /etc/passwd
/etc/passwd 是個所有人都讀得到的檔案,每一行都記載了一位使用者的資訊,每項資訊都由冒號隔開,包含以下資訊:
使用者名稱(Username) — 當使用者登入系統時,需要輸入的名稱。
密碼(Password) — 包含了加密過的密碼(如果系統採用了 shadow password,那會以 x 代替 — 我們待會兒就會跟您討論這點)。
使用者 ID(UID,User ID) — 這數字相當於該使用者,當系統與應用程式要決定存取權限時,就會用到這號碼。
群組 ID(GID,Group ID) — 這數字相當於群組,當系統與應用程式要決定存取權限時,就會用到這號碼。
GECOS — GECOS[1] 以某些歷史原因而命名,是選用的欄位,可以用來儲存額外的訊息(例如使用者的全名)。您可以在這欄位中儲存多種訊息,以逗號隔開。一些工具程式,例如 finger 就會讀取這個欄位,以獲得使用者的額外資訊。
家目錄(Home directory) — 這絕對路徑指向使用者的家目錄,例如 /home/juan/。
Shell — 當使用者登入時,會自動執行的程式。這程式通常是命令列解譯器(通常稱為 shell)。在 Red Hat Enterprise Linux 下,預設值為 /bin/bash。如果這欄位是空白的,那麼系統會採用 /bin/sh。如果這欄位指向一個不存在的檔案,那麼使用者就無法登入系統。
底下是 /etc/passwd 的一筆範例:
root:x:0:0:root:/root:/bin/bash |
這行文字顯示了 root 使用了 shadow password,UID 與 GID 都是 0。root使用者的家目錄為/root/,並採用 /bin/bash為 shell。
欲知更多 /etc/passwd 的資訊,請參閱 passwd(5) 的 man page。
6.3.2.2. /etc/shadow
因為 /etc/passwd 檔案必須讓所有人讀到(這是為了將 UID 轉譯成使用者名稱),所以把所有人的密碼都存在 /etc/passwd中,會有潛在的危險。沒錯,雖然所有密碼都是加密過的;但有了加密過的密碼,就有可能將原有的密碼破解出來。
如果攻擊者拿到一份 /etc/passwd 檔案,那他就可以用某些方法,讓秘密不再是秘密。攻擊者不用冒著一直登入系統,用破解程式不斷嘗試密碼的風險;他只要用以下步驟,執行破解程式即可:
用密碼破解程式產生可能的密碼
用與系統相同的演算法則,為可能的密碼加密
把加密過後的結果,跟 /etc/passwd 中的加密密碼相比對
這種攻擊最危險的地方,是攻擊者可以在您的公司以外破解密碼。他也可以使用高效能的硬體,用最快的破解速度找出密碼。
因此,包含了密碼(可能還包括密碼過期資訊)的/etc/shadow 檔案就只能由 root 使用者讀取。跟 /etc/passwd 檔案一樣,每個使用者的資訊各佔一行,每行的所有欄位都以冒號隔開,包括以下資訊:
使用者名稱(Username) — 這是使用者登入系統時,需要輸入的名稱。這可以讓 login(登入)程式讀取使用者的密碼(與相關資訊)。
加密過後的密碼(Encrypted password) — 13 到 24 個字元的密碼。密碼會用 crypt(3) 函式庫或 md5 雜湊演算法加密。這欄位可能會儲存正確格式的密碼、或雜湊以外的文字,以控制使用者登入,並顯示密碼狀態。例如 ! 或 * 表示該帳號已經被鎖定,使用者不能登入。如果其中的值為 !!,那表示之前從來沒有設定過密碼(也因此該使用者不能登入)。
最後變更密碼的日期 — 這是自 1970 年 1 月 1 日(也稱為「epoch(新紀元時間;UNIX 標準時))」算起,最後一次變更密碼的日數。這欄位會跟下幾個欄位相結合,組成密碼過期政策。
下次可變更密碼前的經過天數 — 要改變密碼前,至少得經過的天數。
距離下次變更密碼的天數 — 這欄位記載距離下次變更密碼前,所經過的天數。
距離下次變更密碼前,提示使用者的天數 — 在密碼過期前幾天,系統會通知使用者最後期限。這欄位記載了這個天數。
距離帳號停用前的天數 — 在密碼過期後、帳號停用前的天數。
帳號被停用的日子 — 這日期(以 epoch 格式紀錄)記載了使用者帳號被停用的日子。
保留欄位 — Red Hat Enterprise Linux 會忽略這個欄位。
底下這行文字是 /etc/shadow 的範例:
juan:$.QKDPc5E$SWlkjRWexrXYgc98F.:12825:0:90:5:30:13096: |
這行文字顯示了使用者 juan 的資訊:
最後一次變更密碼的日子是 2005 年 2 月 11 日
使用者可以隨時變更密碼,不需要先等待一段時間
使用者每 90 天得變更一次密碼
在必須變更密碼前五天,使用者會收到警告訊息
在密碼過期後 30 天,如果使用者依舊沒登入,那麼帳號會被停用
這帳號將在 2005 年 11 月 9 日過期
欲知更多 /etc/shadow 的相關訊息,請參閱 shadow(5) man page。
6.3.2.3. /etc/group
/etc/group 是個所有人都讀得到的檔案,包含了群組清單,每一行都記載了一筆群組資訊,每項資訊都由冒號隔開,包含以下資訊:
群組名稱(Group name) — 群組的名稱,多種工具程式會使用這清晰易懂的名稱來辨識群組。
群組密碼(Group password) — 如果您設定這個值的話,那麼非本群組的使用者就可以用 newgrp 指令,輸入此處記載的密碼,以加入群組。如果這個欄位顯示的是 x,那就表示使用了 shadow group password。
群組 ID(GID,Group ID) — 這數值等同於群組名稱。作業系統與應用程式會使用這個欄位,決定存取權限。
使用者清單(Member list) — 這欄位用逗號分隔所有屬於這群組的使用者。
底下一行是 /etc/group 的部份範例:
general:x:502:juan,shelley,bob |
這一行顯示 general 群組使用了 shadow password,GID 為 502,同時使用者 juan、shelley、以及 bob 都屬於這個群組。
欲知關於 /etc/group 的更多資訊,請參閱 group(5) man page。
6.3.2.4. /etc/gshadow
/etc/gshadow 只能由 root 使用者讀取,其中紀錄了每個群組加密過後的密碼,以及使用者與管理者資訊。跟 /etc/group 檔案一樣,每筆群組資訊都除存在同一行裡,每一行的欄位都以冒號隔開,包括以下資訊:
群組名稱(Group name) — 群組的名稱,多種工具程式會使用這清晰易懂的名稱來辨識群組。
加密過後的密碼(Encrypted password) — 這個群組加密過後的密碼。如果您設定了這個值,那麼不是這個群組的使用者可以利用 newgrp 指令,輸入這個密碼,加入這個群組。如果這個欄位的值是 !,那麼使用者就不能以 newgrp 指令加入本群組。!! 的作用跟 ! 相同 — 不過這表示之前沒有設定過群組密碼。如果這是個空值,那表示只有這個群組的使用者可以登入群組。
群組管理者(Group administrators) — 列在這欄位的使用者(多使用者則用逗號隔開)可以使用 gpasswd 指令,新增或移除群組使用者。
群組使用者(Group members) — 這欄位列出了屬於這群組的一般使用者(以逗號隔開),群組管理者不在其中。
底下一行是 /etc/gshadow 的部份範例:
general:!!:shelley:juan,bob |
這一行表示 general 並沒有密碼,但也不允許其他使用者利用 newgrp 指令加入本群組。除此之外,使用者 shelley 是群組管理者,而 juan 與 bob 是一般使用者,與管理工作無關。
由於手動修改這檔案可能會因為人為疏失而引起錯誤,所以我們建議您使用 Red Hat Enterprise Linux 提供的應用程式來修改這檔案。接下來的章節將為您介紹這些工作。
6.3.3. 使用者帳號與群組應用程式
在 Red Hat Enterprise Linux 系統中,有兩種基本的應用程式可以用來管理使用者帳號與群組:
圖形化的 使用者管理員 應用程式
一系列的命令列工具
欲了解使用 使用者管理員 的更多詳細指引,請參閱《Red Hat Enterprise Linux 系統管理手冊》中,使用者與群組設定(User and Group Configuration)章節。
雖然 使用者管理員 應用程式與命令列的工具組作用相同;但後者可以寫進 script 檔案中,更容易當作系統自動化的依據。
底下的表格描述了用來建立、管理使用者帳號與群組的基本命令列工具:
應用程式 | 功能 |
---|---|
/usr/sbin/useradd | 新增使用者帳號。這工具也可以用來設定使用者所屬的首要與次要的群組。 |
/usr/sbin/userdel | 刪除使用者帳號。 |
/usr/sbin/usermod | 編輯帳號的屬性,包括修改密碼過期政策等等。如果您要使用更細部的設定,請使用 passwd 指令。usermod 也可以用來設定使用者所屬的首要與次要的群組。 |
passwd | 設定密碼。雖然這工具主要用來變更使用者密碼,但它也用來控制有關密碼過期問題的所有選項。 |
/usr/sbin/chpasswd | 這工具會讀入包含使用者名稱與密碼組合的檔案,然後更新每個使用者的密碼。 |
chage | 改變使用者的密碼過期政策。passwd 也能達到相同的目的。 |
chfn | 改變使用者的 GECOS 資訊。 |
chsh | 改變使用者的預設 shell。 |
表格 6-2. 管理使用者帳號的命令列工具
底下的表格描述了用來建立、管理群組的基本命令列工具:
應用程式 | 功能 |
---|---|
/usr/sbin/groupadd | 新增群組,但不把任何使用者加入其中。您接下來該使用 useradd 與 usermod 指令,將使用者加入群組。 |
/usr/sbin/groupdel | 刪除群組。 |
/usr/sbin/groupmod | 修改群組名稱或 GID;但不變更群組內的使用者。您接下來該使用 useradd 與 usermod 指令,將使用者加入群組。 |
gpasswd | 改變群組的會員資料並設定密碼,好讓知道群組密碼的非群組使用者加入群組。這工具也可以用來指定群組管理者。 |
/usr/sbin/grpck | 檢查 /etc/group 與 /etc/gshadow 檔案的完整性。 |
表格 6-3. 管理群組的命令列工具
這裡列出的工具提供系統管理者更多的彈性,控制所有使用者帳號與群組的相關事宜。要了解更多詳細內容,請參閱這些檔案的 man page。
不過,這些應用程式並不能決定使用者與群組能控制哪些資源。要達到這目的,系統管理者必須使用檔案權限應用程式。
注
[1] | GECOS 是奇異泛用作業管理者(General Electric Comprehensive Operating Supervisor)的縮寫,用在貝爾實驗室(Bell Labs)的最原始 UNIX 版本中。當時在實驗室裡有多種不同的電腦,其中一台執行了 GECOS,儲存的訊息可以讓 UNIX 作業系統發送批次作業與列印工作的資訊。 |
文章来源于领测软件测试网 https://www.ltesting.net/
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073