每個Linux系統都至少有一個人負責系統的維護和操作,這就是系統管理員。對於PC機用戶來說,可以身兼數職,既是用戶,又是系統管理員。系統管理員的職責就是保證系統平穩的操作和執行各種需要特權的任務。具體說來,系統管理員要做以下幾方面的工作:
設置整個計算機系統,包括硬件和軟件,如安裝硬件設備、安裝操作系統和軟件包、為用戶建立賬戶等。
做適當的備份(系統中常規文件拷貝)和需要時的恢復。
處理由於計算機有限資源的使用(如磁盤空間、進程數目等)而遇到的問題。
排除由於連接問題而造成的系統通信(網絡)阻塞。
進行操作系統的升級和維護。
為用戶提供常規支持。
依據系統的規模和用戶數目的多少,系統管理的工作可多可少,可以是日常隨時要做的工作,也可能是每天一次甚至每月一次的維護工作。如果系統較小,則維護工作就可以不斷地進行。系統管理員必須認真負責地工作,他手中握有控制系統運行的特權,若粗心應付,必然影響系統的性能,甚至使系統崩潰。
用戶和工作組管理
所有新用戶要想進入Linux系統,必須由系統管理員預先在該系統中建立一個賬戶。用戶賬戶可幫助系統管理員記載使用系統的人們,並控制他們對系統資源的存取。賬戶管理也有助於組織用戶文件和控制其它用戶對它們的訪問。這樣,管理和維護用戶的賬號、口令及權限也就成為系統管理員日常工作的一個重要組成部分。
用戶賬號
用戶在使用Linux時,必須確保自己是系統授權的合法用戶。對於用戶的賬號、口令、訪問權限的管理是Linux系統管理員日常工作中的一個重要組成部分。
在Unix/Linux系統中,用戶賬號的概念具有多種意義,其中最主要的是基於身份鑒別和安全的原因。系統必須對使用機器的人加以區別,賬號概念給系統提供了一種區別用戶的方法。系統中每個用戶有一個個人賬號,每個賬號有著不同的用戶名和口令。用戶可以為自己的文件設置保護,允許或限制別人訪問它們。
除了一般個人賬號之外,系統上還必須存在能夠管理系統的高級用戶,如root賬號就是系統管理員用於維護系統的缺省賬號。另外,系統中還存在一些不能與人交互的特殊賬號,如bin、sync等。
1.passwd文件)
通常在Linux系統中,用戶的關鍵信息被存放在系統的/etc/passwd文件中,系統的每一個合法用戶賬號對應於該文件中的一行記錄。這行記錄定義了每個用戶賬號的屬性。下面是一個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
......
desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin
mengqc:x:500:500:mengqc:/home/mengqc:/bin/bash
在該文件中,每一行用戶記錄的各個數據段用“:”分隔,分別定義了用戶的各方面屬性。各個字段的順序和含義如下:
注冊名:口令:用戶標識號:組標識號:用戶名:用戶主目錄:命令解釋程序
(1)注冊名(login_name):用於區分不同的用戶。在同一系統中注冊名是惟一的。在很多系統上,該字段被限制在8個字符(字母或數字)的長度之內;並且要注意,通常在Linux系統中對字母大小寫是敏感的。這與MS DOS/Windows是不一樣的。
(2)口令(passwd):系統用口令來驗證用戶的合法性。超級用戶root或某些高級用戶可以使用系統命令passwd來更改系統中所有用戶的口令,普通用戶也可以在登錄系統後使用passwd命令來更改自己的口令。
現在的Unix/Linux系統中,口令不再直接保存在passwd文件中,通常將passwd文件中的口令字段使用一個“x”來代替,將 /etc/shadow作為真正的口令文件,用於保存包括個人口令在內的數據。當然shadow文件是不能被普通用戶讀取的,只有超級用戶才有權讀取。
此外,需要注意的是,如果passwd字段中的第一個字符是“*”的話,那麼,就表示該賬號被查封了,系統不允許持有該賬號的用戶登錄。
(3)用戶標識號(UID):UID是一個數值,是Linux系統中惟一的用戶標識,用於區別不同的用戶。在系統內部管理進程和文件保護時使用UID字段。在Linux系統中,注冊名和UID都可以用於標識用戶,只不過對於系統來說UID更為重要;而對於用戶來說注冊名使用起來更方便。在某些特定目的下,系統中可以存在多個擁有不同注冊名、但UID相同的用戶,事實上,這些使用不同注冊名的用戶實際上是同一個用戶。
(4)組標識號(GID):這是當前用戶的缺省工作組標識。具有相似屬性的多個用戶可以被分配到同一個組內,每個組都有自己的組名,且以自己的組標識號相區分。像UID一樣,用戶的組標識號也存放在passwd文件中。在現代的Unix/Linux中,每個用戶可以同時屬於多個組。除了在passwd文件中指定其歸屬的基本組之外,還在/etc/group文件中指明一個組所包含用戶。
(5)用戶名(user_name):包含有關用戶的一些信息,如用戶的真實姓名、辦公室地址、聯系電話等。在Linux系統中,mail和finger等程序利用這些信息來標識系統的用戶。
(6)用戶主目錄(home_Directory):該字段定義了個人用戶的主目錄,當用戶登錄後,他的Shell將把該目錄作為用戶的工作目錄。在 Unix/Linux系統中,超級用戶root的工作目錄為/root;而其它個人用戶在/home目錄下均有自己獨立的工作環境,系統在該目錄下為每個用戶配置了自己的主目錄。個人用戶的文件都放置在各自的主目錄下。
(7)命令解釋程序(Shell):Shell是當用戶登錄系統時運行的程序名稱,通常是一個Shell程序的全路徑名,如/bin/bash。
當用戶登錄後,將啟動這個程序來接收用戶的輸入,並執行相應的命令。從Linux核心的角度看來,Shell就是用戶和核心交流的一種中間層面,用於將用戶輸入的命令串解釋為核心所能理解的系統調用或中斷子例程,同時又將核心的工作結果解釋為用戶能理解的可視化輸出結果。所以,對用戶而言,Shell被稱為命令解釋程序;而對於核心而言,Shell又被稱為外殼程序。
需要注意的是,系統管理員通常沒有必要直接修改passwd文件,Linux提供一些賬號管理工具幫助系統管理員來創建和維護用戶賬號。
2.shadow文件
目前,在大多數Unix/Linux系統中,利用/etc/shadow文件存放用戶賬號的加密口令信息和口令的有效期信息。下面示例是shadow文件中的幾條記錄(與上面的passwd文件相對應):
root:$1$Vfcp2rdI$R0bDID/CvD3FfTeTtnk7u.:12489:0:99999:7:::
bin:*:12489:0:99999:7:::
daemon:*:12489:0:99999:7:::
......
desktop:!!:12489:0:99999:7:::
mengqc:$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
在Linux系統的shadow文件中,為每個用戶提供一條記錄,各個字段用“:”隔開,這9個字段按先後順序分別是:
◆注冊名;
◆密文口令;
◆上次更改口令時間距1970年1月1日的天數;
◆口令更改後,不可以更改的天數;
◆口令更改後,必須再次更改的天數(即口令的有效期);
◆口令失效前警告用戶的天數;
◆口令失效後距賬號被查封的天數;
◆賬號被查封時間距1970年1月1日的天數;
◆保留字段。
Unix/Linux修改口令的機制很簡單:用戶修改口令時使用passwd命令,該命令通常位於/usr/bin。普通用戶只能修改自己的口令,而且必須回答老的口令;root可以修改系統中任何用戶的口令,並且此時系統不會詢問老的用戶口令。
建立和刪除賬號
對系統而言,創建一個用戶賬號需要完成以下幾個步驟:
第一步,添加一個記錄到/etc/passwd文件;第二步,創建用戶的主目錄;第三步,在用戶的主目錄中設置用戶的默認配置文件(如.bashrc)。
在幾乎所有的Linux系統中都提供了useradd或adduser命令,它們能完成以上這一系列工作。通常這兩個命令沒有區別。另外,root用戶可以使用KDE桌面系統為新用戶建立賬號和口令。其過程是“控制面板”→“用戶和組群”→“添加新用戶”,按照屏幕上的提示要求輸入相應的參數,包括用戶名、描述信息(可選)、密碼及確認,然後設置用戶-組的關系。
要刪除已經存在的用戶賬號,必須從/etc/passwd文件中刪除此用戶的記錄項,從/etc/group文件中刪除提及的此用戶,並且刪除用戶的主目錄及其它由該用戶創建或屬於此用戶的文件。這些工作可以使用userdel命令來完成,也可以使用桌面系統“控制面板”→“用戶和組群”,在“本地用戶和組”的窗口中選定要刪除的用戶,然後單擊“刪除”小圖標,並予以“確定”。
某些時候,需要臨時使某個賬號失效,例如用戶沒有付費,或者是系統管理員懷疑黑客得到了某個賬戶的口令,解除限制後,該賬號仍舊可以登錄,這就是所謂的查封賬號。當需要查封某個賬號時,可以將用戶記錄從/etc/passwd文件中去掉,但是保留該用戶的主目錄和其它文件;或者在/etc/passwd (或/etc/shadow)文件中,在相關用戶記錄的passwd字段的首字符前加上符號“*”,例如,希望查封前面提到過的用戶賬號mengqc,則在/etc/shadow文件中將該用戶記錄修改如下:
mengqc:*$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
這樣,就限制了該用戶賬號的登錄。
但是要注意,這樣做會使得用戶弄不清發生了什麼事情。為了避免引起不必要的誤會,管理員還可以使用另一種方法來查封用戶:將用戶賬號的Shell設置成一個特定的、只打印出一條信息的程序。用這種方法,任何想登錄此賬號的人將無法登錄,並能得知具體原因。該信息還可以告訴用戶應與系統管理員聯系,以處理相關問題。
下面就是這樣一個用於取代用戶Shell程序的“tail scripts”示例程序:
#!/usr/bin/tail +2
This account has been closed due to a security breach.
Please call 36 and wait for the men in black to arrive.
上面代碼中前2個字符(#!)告訴核心,本行的其它部分是解釋本文件要運行的命令。這樣,tail命令將在屏幕上顯示除第一行外的所有東西。通常這種tail scripts被存放在獨立於用戶目錄的路徑中,以免和用戶命令產生混淆。
工作組管理
利用工作組可以方便地把相關用戶賬號邏輯地組織在一起。在組的支持下,允許用戶在組內共享文件。Linux系統中每一個文件都有一個用戶和一個組的屬主,也就是說系統中任何一個文件都歸屬於某個組中的一個用戶。使用“ls -l”的命令可以看到文件所屬的用戶和組,例如/home/mengqc目錄下存在文件ex1,運行“ls -l”將輸出如下結果:
$ ls -l ex1
-rwxr-x--- 1 mengqc mengqc 31 3月27 09:18 ex1
每個用戶至少屬於一個組,這種從屬關系對應於系統/etc/group文件中的GID字段,但是一個用戶可以從屬於多個組。類似於/etc/passwd文件,系統中的每個組都對應/etc/group文件中一行記錄。記錄的各字段屬性依次定義如下:
組名:口令:組標識號:用戶列表
其中,各個字段的含義如下:
◆組名(group_name):顧名思義,組名就是工作組的名字。
◆口令(passwd):組的口令,但口令字段不常用,允許不在這個組中的其它用戶用newgrp命令來訪問屬於這個組的資源。
◆組標識號(GID):GID是系統用來區分不同組的標識號,它在系統中是惟一的。在/etc/passwd文件中,用戶的組標識號字段就是用這個數字來指定用戶的缺省組。
◆用戶列表(user_list):用戶列表是用“,”分隔的用戶注冊名集合,列出了這個組的所有成員。但是需要注意的是,這些被列出的用戶在 /etc/passwd文件中對應的GID字段(即用戶的缺省組)與當前/etc/group文件中相應的GID字段是不同的。也就是說,組的默認用戶不必列在該字段中。
下面是從一個/etc/group文件中摘錄的部分記錄項:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
......
desktop:x:80:
mengqc:x:500:
在Linux系統中,root和bin都是管理組。系統中很多文件都屬於這兩個組。mengqc是一個普通的用戶組。
在實際的應用中,口令字段是完全沒有必要的。事實上,很多系統沒有提供設置組口令的工具。這是因為要使一個用戶成為多個組的成員,只需要把用戶注冊名加入到這些組的用戶列表字段中。
用戶可以使用groups命令列出當前用戶所屬的所有組的名稱。
當用戶登錄時,被自動賦予/etc/passwd文件中的GID屬性,也自動成為/etc/group文件中列出該用戶組的成員。
對於工作組的設置主要包括以下幾項工作:
◆創建和刪除工作組;
◆修改組的屬性;
◆調整用戶所屬組;
◆組權限的設定。
添加組的命令是groupadd,刪除組的命令是groupdel,修改組屬性的命令是groupmod,也可以利用桌面系統實現上述功能。
每個Linux系統都至少有一個人負責系統的維護和操作,這就是系統管理員。對於PC機用戶來說,可以身兼數職,既是用戶,又是系統管理員。系統管理員的職責就是保證系統平穩的操作和執行各種需要特權的任務。具體說來,系統管理員要做以下幾方面的工作:
設置整個計算機系統,包括硬件和軟件,如安裝硬件設備、安裝操作系統和軟件包、為用戶建立賬戶等。
做適當的備份(系統中常規文件拷貝)和需要時的恢復。
處理由於計算機有限資源的使用(如磁盤空間、進程數目等)而遇到的問題。
排除由於連接問題而造成的系統通信(網絡)阻塞。
進行操作系統的升級和維護。
為用戶提供常規支持。
依據系統的規模和用戶數目的多少,系統管理的工作可多可少,可以是日常隨時要做的工作,也可能是每天一次甚至每月一次的維護工作。如果系統較小,則維護工作就可以不斷地進行。系統管理員必須認真負責地工作,他手中握有控制系統運行的特權,若粗心應付,必然影響系統的性能,甚至使系統崩潰。
用戶和工作組管理
所有新用戶要想進入Linux系統,必須由系統管理員預先在該系統中建立一個賬戶。用戶賬戶可幫助系統管理員記載使用系統的人們,並控制他們對系統資源的存取。賬戶管理也有助於組織用戶文件和控制其它用戶對它們的訪問。這樣,管理和維護用戶的賬號、口令及權限也就成為系統管理員日常工作的一個重要組成部分。
用戶賬號
用戶在使用Linux時,必須確保自己是系統授權的合法用戶。對於用戶的賬號、口令、訪問權限的管理是Linux系統管理員日常工作中的一個重要組成部分。
在Unix/Linux系統中,用戶賬號的概念具有多種意義,其中最主要的是基於身份鑒別和安全的原因。系統必須對使用機器的人加以區別,賬號概念給系統提供了一種區別用戶的方法。系統中每個用戶有一個個人賬號,每個賬號有著不同的用戶名和口令。用戶可以為自己的文件設置保護,允許或限制別人訪問它們。
除了一般個人賬號之外,系統上還必須存在能夠管理系統的高級用戶,如root賬號就是系統管理員用於維護系統的缺省賬號。另外,系統中還存在一些不能與人交互的特殊賬號,如bin、sync等。
1.passwd文件)
通常在Linux系統中,用戶的關鍵信息被存放在系統的/etc/passwd文件中,系統的每一個合法用戶賬號對應於該文件中的一行記錄。這行記錄定義了每個用戶賬號的屬性。下面是一個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
......
desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin
mengqc:x:500:500:mengqc:/home/mengqc:/bin/bash
在該文件中,每一行用戶記錄的各個數據段用“:”分隔,分別定義了用戶的各方面屬性。各個字段的順序和含義如下:
注冊名:口令:用戶標識號:組標識號:用戶名:用戶主目錄:命令解釋程序
(1)注冊名(login_name):用於區分不同的用戶。在同一系統中注冊名是惟一的。在很多系統上,該字段被限制在8個字符(字母或數字)的長度之內;並且要注意,通常在Linux系統中對字母大小寫是敏感的。這與MS DOS/Windows是不一樣的。
(2)口令(passwd):系統用口令來驗證用戶的合法性。超級用戶root或某些高級用戶可以使用系統命令passwd來更改系統中所有用戶的口令,普通用戶也可以在登錄系統後使用passwd命令來更改自己的口令。
現在的Unix/Linux系統中,口令不再直接保存在passwd文件中,通常將passwd文件中的口令字段使用一個“x”來代替,將 /etc/shadow作為真正的口令文件,用於保存包括個人口令在內的數據。當然shadow文件是不能被普通用戶讀取的,只有超級用戶才有權讀取。
此外,需要注意的是,如果passwd字段中的第一個字符是“*”的話,那麼,就表示該賬號被查封了,系統不允許持有該賬號的用戶登錄。
(3)用戶標識號(UID):UID是一個數值,是Linux系統中惟一的用戶標識,用於區別不同的用戶。在系統內部管理進程和文件保護時使用UID字段。在Linux系統中,注冊名和UID都可以用於標識用戶,只不過對於系統來說UID更為重要;而對於用戶來說注冊名使用起來更方便。在某些特定目的下,系統中可以存在多個擁有不同注冊名、但UID相同的用戶,事實上,這些使用不同注冊名的用戶實際上是同一個用戶。
(4)組標識號(GID):這是當前用戶的缺省工作組標識。具有相似屬性的多個用戶可以被分配到同一個組內,每個組都有自己的組名,且以自己的組標識號相區分。像UID一樣,用戶的組標識號也存放在passwd文件中。在現代的Unix/Linux中,每個用戶可以同時屬於多個組。除了在passwd文件中指定其歸屬的基本組之外,還在/etc/group文件中指明一個組所包含用戶。
(5)用戶名(user_name):包含有關用戶的一些信息,如用戶的真實姓名、辦公室地址、聯系電話等。在Linux系統中,mail和finger等程序利用這些信息來標識系統的用戶。
(6)用戶主目錄(home_directory):該字段定義了個人用戶的主目錄,當用戶登錄後,他的Shell將把該目錄作為用戶的工作目錄。在 Unix/Linux系統中,超級用戶root的工作目錄為/root;而其它個人用戶在/home目錄下均有自己獨立的工作環境,系統在該目錄下為每個用戶配置了自己的主目錄。個人用戶的文件都放置在各自的主目錄下。
(7)命令解釋程序(Shell):Shell是當用戶登錄系統時運行的程序名稱,通常是一個Shell程序的全路徑名,如/bin/bash。
當用戶登錄後,將啟動這個程序來接收用戶的輸入,並執行相應的命令。從Linux核心的角度看來,Shell就是用戶和核心交流的一種中間層面,用於將用戶輸入的命令串解釋為核心所能理解的系統調用或中斷子例程,同時又將核心的工作結果解釋為用戶能理解的可視化輸出結果。所以,對用戶而言,Shell被稱為命令解釋程序;而對於核心而言,Shell又被稱為外殼程序。
需要注意的是,系統管理員通常沒有必要直接修改passwd文件,Linux提供一些賬號管理工具幫助系統管理員來創建和維護用戶賬號。
2.shadow文件
目前,在大多數Unix/Linux系統中,利用/etc/shadow文件存放用戶賬號的加密口令信息和口令的有效期信息。下面示例是shadow文件中的幾條記錄(與上面的passwd文件相對應):
root:$1$Vfcp2rdI$R0bDID/CvD3FfTeTtnk7u.:12489:0:99999:7:::
bin:*:12489:0:99999:7:::
daemon:*:12489:0:99999:7:::
......
desktop:!!:12489:0:99999:7:::
mengqc:$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
在Linux系統的shadow文件中,為每個用戶提供一條記錄,各個字段用“:”隔開,這9個字段按先後順序分別是:
◆注冊名;
◆密文口令;
◆上次更改口令時間距1970年1月1日的天數;
◆口令更改後,不可以更改的天數;
◆口令更改後,必須再次更改的天數(即口令的有效期);
◆口令失效前警告用戶的天數;
◆口令失效後距賬號被查封的天數;
◆賬號被查封時間距1970年1月1日的天數;
◆保留字段。
Unix/Linux修改口令的機制很簡單:用戶修改口令時使用passwd命令,該命令通常位於/usr/bin。普通用戶只能修改自己的口令,而且必須回答老的口令;root可以修改系統中任何用戶的口令,並且此時系統不會詢問老的用戶口令。
建立和刪除賬號
對系統而言,創建一個用戶賬號需要完成以下幾個步驟:
第一步,添加一個記錄到/etc/passwd文件;第二步,創建用戶的主目錄;第三步,在用戶的主目錄中設置用戶的默認配置文件(如.bashrc)。
在幾乎所有的Linux系統中都提供了useradd或adduser命令,它們能完成以上這一系列工作。通常這兩個命令沒有區別。另外,root用戶可以使用KDE桌面系統為新用戶建立賬號和口令。其過程是“控制面板”→“用戶和組群”→“添加新用戶”,按照屏幕上的提示要求輸入相應的參數,包括用戶名、描述信息(可選)、密碼及確認,然後設置用戶-組的關系。
要刪除已經存在的用戶賬號,必須從/etc/passwd文件中刪除此用戶的記錄項,從/etc/group文件中刪除提及的此用戶,並且刪除用戶的主目錄及其它由該用戶創建或屬於此用戶的文件。這些工作可以使用userdel命令來完成,也可以使用桌面系統“控制面板”→“用戶和組群”,在“本地用戶和組”的窗口中選定要刪除的用戶,然後單擊“刪除”小圖標,並予以“確定”。
某些時候,需要臨時使某個賬號失效,例如用戶沒有付費,或者是系統管理員懷疑黑客得到了某個賬戶的口令,解除限制後,該賬號仍舊可以登錄,這就是所謂的查封賬號。當需要查封某個賬號時,可以將用戶記錄從/etc/passwd文件中去掉,但是保留該用戶的主目錄和其它文件;或者在/etc/passwd (或/etc/shadow)文件中,在相關用戶記錄的passwd字段的首字符前加上符號“*”,例如,希望查封前面提到過的用戶賬號mengqc,則在/etc/shadow文件中將該用戶記錄修改如下:
mengqc:*$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
這樣,就限制了該用戶賬號的登錄。
但是要注意,這樣做會使得用戶弄不清發生了什麼事情。為了避免引起不必要的誤會,管理員還可以使用另一種方法來查封用戶:將用戶賬號的Shell設置成一個特定的、只打印出一條信息的程序。用這種方法,任何想登錄此賬號的人將無法登錄,並能得知具體原因。該信息還可以告訴用戶應與系統管理員聯系,以處理相關問題。
下面就是這樣一個用於取代用戶Shell程序的“tail scripts”示例程序:
#!/usr/bin/tail +2
This account has been closed due to a security breach.
Please call 36 and wait for the men in black to arrive.
上面代碼中前2個字符(#!)告訴核心,本行的其它部分是解釋本文件要運行的命令。這樣,tail命令將在屏幕上顯示除第一行外的所有東西。通常這種tail scripts被存放在獨立於用戶目錄的路徑中,以免和用戶命令產生混淆。
工作組管理
利用工作組可以方便地把相關用戶賬號邏輯地組織在一起。在組的支持下,允許用戶在組內共享文件。Linux系統中每一個文件都有一個用戶和一個組的屬主,也就是說系統中任何一個文件都歸屬於某個組中的一個用戶。使用“ls -l”的命令可以看到文件所屬的用戶和組,例如/home/mengqc目錄下存在文件ex1,運行“ls -l”將輸出如下結果:
$ ls -l ex1
-rwxr-x--- 1 mengqc mengqc 31 3月27 09:18 ex1
每個用戶至少屬於一個組,這種從屬關系對應於系統/etc/group文件中的GID字段,但是一個用戶可以從屬於多個組。類似於/etc/passwd文件,系統中的每個組都對應/etc/group文件中一行記錄。記錄的各字段屬性依次定義如下:
組名:口令:組標識號:用戶列表
其中,各個字段的含義如下:
◆組名(group_name):顧名思義,組名就是工作組的名字。
◆口令(passwd):組的口令,但口令字段不常用,允許不在這個組中的其它用戶用newgrp命令來訪問屬於這個組的資源。
◆組標識號(GID):GID是系統用來區分不同組的標識號,它在系統中是惟一的。在/etc/passwd文件中,用戶的組標識號字段就是用這個數字來指定用戶的缺省組。
◆用戶列表(user_list):用戶列表是用“,”分隔的用戶注冊名集合,列出了這個組的所有成員。但是需要注意的是,這些被列出的用戶在 /etc/passwd文件中對應的GID字段(即用戶的缺省組)與當前/etc/group文件中相應的GID字段是不同的。也就是說,組的默認用戶不必列在該字段中。
下面是從一個/etc/group文件中摘錄的部分記錄項:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
......
desktop:x:80:
mengqc:x:500:
在Linux系統中,root和bin都是管理組。系統中很多文件都屬於這兩個組。mengqc是一個普通的用戶組。
在實際的應用中,口令字段是完全沒有必要的。事實上,很多系統沒有提供設置組口令的工具。這是因為要使一個用戶成為多個組的成員,只需要把用戶注冊名加入到這些組的用戶列表字段中。
用戶可以使用groups命令列出當前用戶所屬的所有組的名稱。
當用戶登錄時,被自動賦予/etc/passwd文件中的GID屬性,也自動成為/etc/group文件中列出該用戶組的成員。
對於工作組的設置主要包括以下幾項工作:
◆創建和刪除工作組;
◆修改組的屬性;
◆調整用戶所屬組;
◆組權限的設定。
添加組的命令是groupadd,刪除組的命令是groupdel,修改組屬性的命令是groupmod,也可以利用桌面系統實現上述功能。
每個Linux系統都至少有一個人負責系統的維護和操作,這就是系統管理員。對於PC機用戶來說,可以身兼數職,既是用戶,又是系統管理員。系統管理員的職責就是保證系統平穩的操作和執行各種需要特權的任務。具體說來,系統管理員要做以下幾方面的工作:
設置整個計算機系統,包括硬件和軟件,如安裝硬件設備、安裝操作系統和軟件包、為用戶建立賬戶等。
做適當的備份(系統中常規文件拷貝)和需要時的恢復。
處理由於計算機有限資源的使用(如磁盤空間、進程數目等)而遇到的問題。
排除由於連接問題而造成的系統通信(網絡)阻塞。
進行操作系統的升級和維護。
為用戶提供常規支持。
依據系統的規模和用戶數目的多少,系統管理的工作可多可少,可以是日常隨時要做的工作,也可能是每天一次甚至每月一次的維護工作。如果系統較小,則維護工作就可以不斷地進行。系統管理員必須認真負責地工作,他手中握有控制系統運行的特權,若粗心應付,必然影響系統的性能,甚至使系統崩潰。
用戶和工作組管理
所有新用戶要想進入Linux系統,必須由系統管理員預先在該系統中建立一個賬戶。用戶賬戶可幫助系統管理員記載使用系統的人們,並控制他們對系統資源的存取。賬戶管理也有助於組織用戶文件和控制其它用戶對它們的訪問。這樣,管理和維護用戶的賬號、口令及權限也就成為系統管理員日常工作的一個重要組成部分。
用戶賬號
用戶在使用Linux時,必須確保自己是系統授權的合法用戶。對於用戶的賬號、口令、訪問權限的管理是Linux系統管理員日常工作中的一個重要組成部分。
在Unix/Linux系統中,用戶賬號的概念具有多種意義,其中最主要的是基於身份鑒別和安全的原因。系統必須對使用機器的人加以區別,賬號概念給系統提供了一種區別用戶的方法。系統中每個用戶有一個個人賬號,每個賬號有著不同的用戶名和口令。用戶可以為自己的文件設置保護,允許或限制別人訪問它們。
除了一般個人賬號之外,系統上還必須存在能夠管理系統的高級用戶,如root賬號就是系統管理員用於維護系統的缺省賬號。另外,系統中還存在一些不能與人交互的特殊賬號,如bin、sync等。
1.passwd文件)
通常在Linux系統中,用戶的關鍵信息被存放在系統的/etc/passwd文件中,系統的每一個合法用戶賬號對應於該文件中的一行記錄。這行記錄定義了每個用戶賬號的屬性。下面是一個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
......
desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin
mengqc:x:500:500:mengqc:/home/mengqc:/bin/bash
在該文件中,每一行用戶記錄的各個數據段用“:”分隔,分別定義了用戶的各方面屬性。各個字段的順序和含義如下:
注冊名:口令:用戶標識號:組標識號:用戶名:用戶主目錄:命令解釋程序
(1)注冊名(login_name):用於區分不同的用戶。在同一系統中注冊名是惟一的。在很多系統上,該字段被限制在8個字符(字母或數字)的長度之內;並且要注意,通常在Linux系統中對字母大小寫是敏感的。這與MS DOS/Windows是不一樣的。
(2)口令(passwd):系統用口令來驗證用戶的合法性。超級用戶root或某些高級用戶可以使用系統命令passwd來更改系統中所有用戶的口令,普通用戶也可以在登錄系統後使用passwd命令來更改自己的口令。
現在的Unix/Linux系統中,口令不再直接保存在passwd文件中,通常將passwd文件中的口令字段使用一個“x”來代替,將 /etc/shadow作為真正的口令文件,用於保存包括個人口令在內的數據。當然shadow文件是不能被普通用戶讀取的,只有超級用戶才有權讀取。
此外,需要注意的是,如果passwd字段中的第一個字符是“*”的話,那麼,就表示該賬號被查封了,系統不允許持有該賬號的用戶登錄。
(3)用戶標識號(UID):UID是一個數值,是Linux系統中惟一的用戶標識,用於區別不同的用戶。在系統內部管理進程和文件保護時使用UID字段。在Linux系統中,注冊名和UID都可以用於標識用戶,只不過對於系統來說UID更為重要;而對於用戶來說注冊名使用起來更方便。在某些特定目的下,系統中可以存在多個擁有不同注冊名、但UID相同的用戶,事實上,這些使用不同注冊名的用戶實際上是同一個用戶。
(4)組標識號(GID):這是當前用戶的缺省工作組標識。具有相似屬性的多個用戶可以被分配到同一個組內,每個組都有自己的組名,且以自己的組標識號相區分。像UID一樣,用戶的組標識號也存放在passwd文件中。在現代的Unix/Linux中,每個用戶可以同時屬於多個組。除了在passwd文件中指定其歸屬的基本組之外,還在/etc/group文件中指明一個組所包含用戶。
(5)用戶名(user_name):包含有關用戶的一些信息,如用戶的真實姓名、辦公室地址、聯系電話等。在Linux系統中,mail和finger等程序利用這些信息來標識系統的用戶。
(6)用戶主目錄(home_directory):該字段定義了個人用戶的主目錄,當用戶登錄後,他的Shell將把該目錄作為用戶的工作目錄。在 Unix/Linux系統中,超級用戶root的工作目錄為/root;而其它個人用戶在/home目錄下均有自己獨立的工作環境,系統在該目錄下為每個用戶配置了自己的主目錄。個人用戶的文件都放置在各自的主目錄下。
(7)命令解釋程序(Shell):Shell是當用戶登錄系統時運行的程序名稱,通常是一個Shell程序的全路徑名,如/bin/bash。
當用戶登錄後,將啟動這個程序來接收用戶的輸入,並執行相應的命令。從Linux核心的角度看來,Shell就是用戶和核心交流的一種中間層面,用於將用戶輸入的命令串解釋為核心所能理解的系統調用或中斷子例程,同時又將核心的工作結果解釋為用戶能理解的可視化輸出結果。所以,對用戶而言,Shell被稱為命令解釋程序;而對於核心而言,Shell又被稱為外殼程序。
需要注意的是,系統管理員通常沒有必要直接修改passwd文件,Linux提供一些賬號管理工具幫助系統管理員來創建和維護用戶賬號。
2.shadow文件
目前,在大多數Unix/Linux系統中,利用/etc/shadow文件存放用戶賬號的加密口令信息和口令的有效期信息。下面示例是shadow文件中的幾條記錄(與上面的passwd文件相對應):
root:$1$Vfcp2rdI$R0bDID/CvD3FfTeTtnk7u.:12489:0:99999:7:::
bin:*:12489:0:99999:7:::
daemon:*:12489:0:99999:7:::
......
desktop:!!:12489:0:99999:7:::
mengqc:$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
在Linux系統的shadow文件中,為每個用戶提供一條記錄,各個字段用“:”隔開,這9個字段按先後順序分別是:
◆注冊名;
◆密文口令;
◆上次更改口令時間距1970年1月1日的天數;
◆口令更改後,不可以更改的天數;
◆口令更改後,必須再次更改的天數(即口令的有效期);
◆口令失效前警告用戶的天數;
◆口令失效後距賬號被查封的天數;
◆賬號被查封時間距1970年1月1日的天數;
◆保留字段。
Unix/Linux修改口令的機制很簡單:用戶修改口令時使用passwd命令,該命令通常位於/usr/bin。普通用戶只能修改自己的口令,而且必須回答老的口令;root可以修改系統中任何用戶的口令,並且此時系統不會詢問老的用戶口令。
建立和刪除賬號
對系統而言,創建一個用戶賬號需要完成以下幾個步驟:
第一步,添加一個記錄到/etc/passwd文件;第二步,創建用戶的主目錄;第三步,在用戶的主目錄中設置用戶的默認配置文件(如.bashrc)。
在幾乎所有的Linux系統中都提供了useradd或adduser命令,它們能完成以上這一系列工作。通常這兩個命令沒有區別。另外,root用戶可以使用KDE桌面系統為新用戶建立賬號和口令。其過程是“控制面板”→“用戶和組群”→“添加新用戶”,按照屏幕上的提示要求輸入相應的參數,包括用戶名、描述信息(可選)、密碼及確認,然後設置用戶-組的關系。
要刪除已經存在的用戶賬號,必須從/etc/passwd文件中刪除此用戶的記錄項,從/etc/group文件中刪除提及的此用戶,並且刪除用戶的主目錄及其它由該用戶創建或屬於此用戶的文件。這些工作可以使用userdel命令來完成,也可以使用桌面系統“控制面板”→“用戶和組群”,在“本地用戶和組”的窗口中選定要刪除的用戶,然後單擊“刪除”小圖標,並予以“確定”。
某些時候,需要臨時使某個賬號失效,例如用戶沒有付費,或者是系統管理員懷疑黑客得到了某個賬戶的口令,解除限制後,該賬號仍舊可以登錄,這就是所謂的查封賬號。當需要查封某個賬號時,可以將用戶記錄從/etc/passwd文件中去掉,但是保留該用戶的主目錄和其它文件;或者在/etc/passwd (或/etc/shadow)文件中,在相關用戶記錄的passwd字段的首字符前加上符號“*”,例如,希望查封前面提到過的用戶賬號mengqc,則在/etc/shadow文件中將該用戶記錄修改如下:
mengqc:*$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
這樣,就限制了該用戶賬號的登錄。
但是要注意,這樣做會使得用戶弄不清發生了什麼事情。為了避免引起不必要的誤會,管理員還可以使用另一種方法來查封用戶:將用戶賬號的Shell設置成一個特定的、只打印出一條信息的程序。用這種方法,任何想登錄此賬號的人將無法登錄,並能得知具體原因。該信息還可以告訴用戶應與系統管理員聯系,以處理相關問題。
下面就是這樣一個用於取代用戶Shell程序的“tail scripts”示例程序:
#!/usr/bin/tail +2
This account has been closed due to a security breach.
Please call 36 and wait for the men in black to arrive.
上面代碼中前2個字符(#!)告訴核心,本行的其它部分是解釋本文件要運行的命令。這樣,tail命令將在屏幕上顯示除第一行外的所有東西。通常這種tail scripts被存放在獨立於用戶目錄的路徑中,以免和用戶命令產生混淆。
工作組管理
利用工作組可以方便地把相關用戶賬號邏輯地組織在一起。在組的支持下,允許用戶在組內共享文件。Linux系統中每一個文件都有一個用戶和一個組的屬主,也就是說系統中任何一個文件都歸屬於某個組中的一個用戶。使用“ls -l”的命令可以看到文件所屬的用戶和組,例如/home/mengqc目錄下存在文件ex1,運行“ls -l”將輸出如下結果:
$ ls -l ex1
-rwxr-x--- 1 mengqc mengqc 31 3月27 09:18 ex1
每個用戶至少屬於一個組,這種從屬關系對應於系統/etc/group文件中的GID字段,但是一個用戶可以從屬於多個組。類似於/etc/passwd文件,系統中的每個組都對應/etc/group文件中一行記錄。記錄的各字段屬性依次定義如下:
組名:口令:組標識號:用戶列表
其中,各個字段的含義如下:
◆組名(group_name):顧名思義,組名就是工作組的名字。
◆口令(passwd):組的口令,但口令字段不常用,允許不在這個組中的其它用戶用newgrp命令來訪問屬於這個組的資源。
◆組標識號(GID):GID是系統用來區分不同組的標識號,它在系統中是惟一的。在/etc/passwd文件中,用戶的組標識號字段就是用這個數字來指定用戶的缺省組。
◆用戶列表(user_list):用戶列表是用“,”分隔的用戶注冊名集合,列出了這個組的所有成員。但是需要注意的是,這些被列出的用戶在 /etc/passwd文件中對應的GID字段(即用戶的缺省組)與當前/etc/group文件中相應的GID字段是不同的。也就是說,組的默認用戶不必列在該字段中。
下面是從一個/etc/group文件中摘錄的部分記錄項:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
......
desktop:x:80:
mengqc:x:500:
在Linux系統中,root和bin都是管理組。系統中很多文件都屬於這兩個組。mengqc是一個普通的用戶組。
在實際的應用中,口令字段是完全沒有必要的。事實上,很多系統沒有提供設置組口令的工具。這是因為要使一個用戶成為多個組的成員,只需要把用戶注冊名加入到這些組的用戶列表字段中。
用戶可以使用groups命令列出當前用戶所屬的所有組的名稱。
當用戶登錄時,被自動賦予/etc/passwd文件中的GID屬性,也自動成為/etc/group文件中列出該用戶組的成員。
對於工作組的設置主要包括以下幾項工作:
◆創建和刪除工作組;
◆修改組的屬性;
◆調整用戶所屬組;
◆組權限的設定。
添加組的命令是groupadd,刪除組的命令是groupdel,修改組屬性的命令是groupmod,也可以利用桌面系統實現上述功能。
mengqc:*$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::
這樣,就限制了該用戶賬號的登錄。
但是要注意,這樣做會使得用戶弄不清發生了什麼事情。為了避免引起不必要的誤會,管理員還可以使用另一種方法來查封用戶:將用戶賬號的Shell設置成一個特定的、只打印出一條信息的程序。用這種方法,任何想登錄此賬號的人將無法登錄,並能得知具體原因。該信息還可以告訴用戶應與系統管理員聯系,以處理相關問題。
下面就是這樣一個用於取代用戶Shell程序的“tail scripts”示例程序:
#!/usr/bin/tail +2
This account has been closed due to a security breach.
Please call 36 and wait for the men in black to arrive.
上面代碼中前2個字符(#!)告訴核心,本行的其它部分是解釋本文件要運行的命令。這樣,tail命令將在屏幕上顯示除第一行外的所有東西。通常這種tail scripts被存放在獨立於用戶目錄的路徑中,以免和用戶命令產生混淆。
工作組管理
利用工作組可以方便地把相關用戶賬號邏輯地組織在一起。在組的支持下,允許用戶在組內共享文件。Linux系統中每一個文件都有一個用戶和一個組的屬主,也就是說系統中任何一個文件都歸屬於某個組中的一個用戶。使用“ls -l”的命令可以看到文件所屬的用戶和組,例如/home/mengqc目錄下存在文件ex1,運行“ls -l”將輸出如下結果:
$ ls -l ex1
-rwxr-x--- 1 mengqc mengqc 31 3月27 09:18 ex1
每個用戶至少屬於一個組,這種從屬關系對應於系統/etc/group文件中的GID字段,但是一個用戶可以從屬於多個組。類似於/etc/passwd文件,系統中的每個組都對應/etc/group文件中一行記錄。記錄的各字段屬性依次定義如下:
組名:口令:組標識號:用戶列表
其中,各個字段的含義如下:
◆組名(group_name):顧名思義,組名就是工作組的名字。
◆口令(passwd):組的口令,但口令字段不常用,允許不在這個組中的其它用戶用newgrp命令來訪問屬於這個組的資源。
◆組標識號(GID):GID是系統用來區分不同組的標識號,它在系統中是惟一的。在/etc/passwd文件中,用戶的組標識號字段就是用這個數字來指定用戶的缺省組。
◆用戶列表(user_list):用戶列表是用“,”分隔的用戶注冊名集合,列出了這個組的所有成員。但是需要注意的是,這些被列出的用戶在 /etc/passwd文件中對應的GID字段(即用戶的缺省組)與當前/etc/group文件中相應的GID字段是不同的。也就是說,組的默認用戶不必列在該字段中。
下面是從一個/etc/group文件中摘錄的部分記錄項:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
......
desktop:x:80:
mengqc:x:500:
在Linux系統中,root和bin都是管理組。系統中很多文件都屬於這兩個組。mengqc是一個普通的用戶組。
在實際的應用中,口令字段是完全沒有必要的。事實上,很多系統沒有提供設置組口令的工具。這是因為要使一個用戶成為多個組的成員,只需要把用戶注冊名加入到這些組的用戶列表字段中。
用戶可以使用groups命令列出當前用戶所屬的所有組的名稱。
當用戶登錄時,被自動賦予/etc/passwd文件中的GID屬性,也自動成為/etc/group文件中列出該用戶組的成員。
對於工作組的設置主要包括以下幾項工作:
◆創建和刪除工作組;
◆修改組的屬性;
◆調整用戶所屬組;
◆組權限的設定。
添加組的命令是groupadd,刪除組的命令是groupdel,修改組屬性的命令是groupmod,也可以利用桌面系統實現上述功能。