FreeBSD handbook中文版 8 用戶和基本的帳戶管理
2024-07-26 00:29:05
供稿:網友
目錄
8 用戶和基本的帳戶管理
8.1 概要
8.2 介紹
8.3 超級用戶帳戶
8.4 系統用戶
8.5 普通用戶帳戶
8.6 修改帳戶
8.7 受限制的用戶
8.8 私有化用戶
8.9 組
=============================================================
第8 章用戶和基本的帳戶管理
=============================================================
(翻譯中出現的任何問題或錯誤,請廣大讀者及時反饋給我:freebsdhandbook@163.com)
8.1 概要
FreeBSD 允許多個用戶同時使用電腦。當然,這些用戶中不是很多人同時坐在同一臺電
腦前,而是其他用戶可以通過網絡來使用同一臺電腦以完成他們的工作。要使用系統,每一
個人都要有一個帳戶。
讀完這章,你將了解到:
在一個FreeBSD 系統上不同用戶帳戶之間的區別。.
如何添加用戶帳戶。.
如何刪除用戶帳戶。.
如何改變帳戶細節,如用戶的全名,或首選的shell。.
如何在每個帳戶基礎上設置限制,來控制象內存,CPU 時鐘這樣的資源。.
如何使用組來使帳戶管理更容易。.
在閱讀這章之前,你應當了解:
了解UNIX 和FreeBSD 的基礎知識。.
8.2 介紹
所有訪問系統的用戶必須通過帳戶才能完成,所以在FreeBSD 系統中用戶和用戶帳戶的
管理是非常重要的。有三種類型的帳戶:超級用戶、系統用戶和普通用戶。超級用戶帳戶通
常叫做root,可以毫無限制地管理系統。系統用戶運行服務。最后,普通用戶帳戶給那些
登陸系統,閱讀郵件等的人們使用。
用戶名
第1 頁FreeBSD 使用手冊
在登陸時需要鍵入用戶名。用戶名對于一臺電腦來講是唯一的;你不可以使用兩個相同
的用戶名來登陸。有很多規則可以來創建用戶名,可以看看passwd 的文檔;你使用的用戶
名通常需要8 個或更少的小寫字母。
口令
每個帳戶都有一個口令與它對應??诹羁梢允强盏?,這樣不需要密碼就可以訪問系統。
這通常不是一個好主意;每個帳戶都應當要有一個密碼。
用戶ID (UID)
UID 是系統用來識別用戶的0 到65536 之間的數字。在用它工作以前,允許你指定一個
用戶名的任何命令都會把它轉換成UID。這意味著你可以為不同的用戶名使用多個帳戶,但
它們的UID 是一樣的。FreeBSD 會把這些帳戶認定是一個人的。
組ID (GID)
GID 是用來識別用戶所在的組的0 到65536 之間的數字。組是一種用來控制用戶訪問資
源的機制。它可以減少一些配置文件的大小。一個用戶也可以屬于多個組。
登陸類
登陸類是一個組機制的擴展,當把系統分配給用戶時,它提供了額外的靈活性。
口令的定期轉換
默認情況下,FreeBSD 不會強迫用戶去改變他們的密碼。你可以在每個用戶的基礎上強
迫執行,當一個帳戶過期了,可以強迫一些或所有的用戶改變他們的密碼。
帳戶到期了
默認情況下,FreeBSD 不會終止帳戶。如果你正在創建帳戶,你要知道有一個有限的使
用期限。例如,在學校里,你會為每個學生設立一個帳號,當帳號到期了,你可以重新指定
它。帳戶到期后,雖然帳戶的目錄和文件仍然存在,帳戶就不能再使用了。
用戶的全名
用戶名可以唯一地識別FreeBSD 的帳戶,但不會反映用戶的全名。這些信息可能與帳戶
是相關的。
第2 頁FreeBSD 使用手冊
主目錄
主目錄是用戶用來啟動的目錄的完全路徑。一個通常的規則是把所有用戶的主目錄都放
在/home/username下。用戶將會把他們的個人文件放在他們的主目錄下,他們可以在那兒
創建任何目錄。
用戶shell
Shell 提供了用戶用來操作系統的默認環境。有很多不同的shell,有經驗的用戶會根
據他們的經驗來選擇。
8.3 超級用戶帳戶
超級用戶帳戶通常叫做root,可以重新配置和管理系統,在收發郵件、系統檢查或編程
時盡量不要使用root 權限。
這是因為不象普通用戶帳戶,超級用戶能夠毫無限制地操作系統,超級用戶帳戶的濫用
可能會引起無法想象的災難。普通的用戶帳戶不會由于出錯而破壞系統。所以通常要盡可能
地使用普通帳戶,除非你需要額外的特權。
另外,在使用超級帳戶時要再三檢查命令,因為一個額外的空格或缺少某個字符的命令
都可能會引起數據丟失。當你要改為超級用戶的時候,你的普通用戶的安全措施將不起作用。
所以,你在閱讀了這章后要做的第一件事是在平時使用的時候,創建一個沒有特權的用戶帳
戶。無論你使用的是多用戶還是單用戶的機器,這樣的申請都是相同的。在這一章的后面,
我們將討論如何創建一個額外的帳戶和如何在普通用戶和超級用戶之間進行切換。
8.4 系統用戶
系統用戶可能要使用諸如DNS,mail,web 等的服務。使用帳戶的原因就是為了安全。
如果所有的服務都由超級用戶來運行,那他們就可以不受約束地做任何事情。系統用戶可以
是后臺程序、操作員、bind 或新聞。系統管理員經常創建httpd 來運行web 服務器。
8.5 用戶帳戶
用戶帳戶是讓真實用戶訪問系統的主要方式。這些帳戶把用戶和環境分隔開,能阻止用
戶破壞系統或其它用戶,在不影響其它用戶的情況下定置它們的環境。
每個人訪問你的系統必須要有它們自己的唯一帳戶。這允許你可以找到誰做了些什么,
阻止人們破壞其它用戶的設置和閱讀其它人的郵件等等。
第3 頁FreeBSD 使用手冊
每個用戶能夠設置它們自己的環境,以利于它們通過改變shell、編輯器、鍵盤綁定和
語言等適應使用這個系統。
8.6 修改帳戶
pw 是一個功能強大,靈活修改帳戶的方式,但還是建議用adduser 來創建新的帳戶,
使用rmuser 來刪除帳戶。chpass 允許系統管理員和普通用戶來調整口令,shell 和個人信息。
Passwd 是個更普通的改變口令的方式。
8.6.1 增加用戶
adduser 是個簡單的增加新用戶的命令。它為用戶創建passwd 和group,也創建它們
的主目錄,從/usr/share/skel 拷貝文件形成一個默認的.files 的文件,另外給用戶發送一個帶
歡迎信息的郵件。
創建一個初始的配置文件,使用adduser –s –config_create。下面,我們配置adduser
的默認設置,創建我們第一個用戶帳戶。
例8-1,改變adduser 的配置
# adduser -v
Use option “-silent” if you don’t want to see all warnings and questions.
Check /etc/shells
Check /etc/master.passwd
Check /etc/group
Enter your default shell: csh date no sh tcsh [sh]: tcsh
Your default shell is: tcsh -> /usr/local/bin/tcsh
Enter your default HOME 分區: [/home]:
Copy dotfiles from: /usr/share/skel no [/usr/share/skel]:
Send message from file: /etc/adduser.message no
[/etc/adduser.message]: no
Do not send message
Use passWords (y/n) [y]: y
Write your changes to /etc/adduser.conf? (y/n) [n]: y
Ok, let’s go.
第4 頁Enter username [a-z0-9_-]: jru
Uid [1001]:
Enter login class: default []:
Login group jru [jru]:
FreeBSD 使用手冊
Don’t worry about mistakes. I will give you the chance later to correct any input.
Enter full name []: J. Random User
Enter shell csh date no sh tcsh [tcsh]:
Enter home directory (full path) [/home/jru]:
Login group is “jru”. Invite jru into other groups: guest no
[no]: wheel
Enter password []:
Enter password again []:
Name: jru
Password: ****
Fullname: J. Random User
Uid: 1007
Gid: 1007 (jru)
Class:
Groups: jru wheel
HOME: /home/jru
Shell: /usr/local/bin/tcsh
OK? (y/n) [y]: y
Added user “jru”
Copy files from /usr/share/skel to /home/jru
Add another user? (y/n) [y]: n
Goodbye!
#
總的來講,我們把默認的shell 設置成tcsh,關閉歡迎郵件。然后,保存配置,接著創
建一個jru 的帳戶,并且確信jru 在wheel 組里面。
注意:你輸入的口令是不會顯示出來的,而只會顯示星號。確保輸入兩次密碼時,不
第5 頁FreeBSD 使用手冊
要輸錯。從現在起,只要使用adduser,你不必改變默認設置。如果程序要求你改變默認設
置,先退出程序,然后執行程序時加上-s 選項。
8.6.2 rmuser
rmuser 能從系統中刪除用戶,包括超越用戶數據庫的任何線索。rmuser 執行下面的步
驟:
1, 刪除用戶的crontab 記錄
2, 刪除屬于用戶的at 工作
3, 殺掉所有屬于用戶的所有線程
4, 刪除本地密碼文件中的用戶
5, 刪除用戶的主目錄
6, 刪除來自/var/mail 的屬于用戶的郵件
7, 刪除所有諸如/tmp 的臨時文件存儲區中的文件
8, 最后,刪除在/etc/group 中所有屬于組的用戶名
注意:如果一個組變成空,而組名和用戶名一樣,組將被刪除;rmuser 不能用
來刪除超級用戶的帳戶。
例8-2. rmuser interactive account removal
# rmuser jru
Matching password entry:
jru:*:1000:1000::0:0:J. Random User:/home/jru:/usr/local/bin/tcsh
Is this the entry you wish to remove? y
Remove user’s home directory (/home/jru)? y
Updating password file, updating databases, done.
Updating group file: trusted (removing group jru—personal group is empty) done.
Removing user’s incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
#
第6 頁FreeBSD 使用手冊
8.6.3 pw
Pw 是一個用來創建,刪除,修改,顯示用戶和組的命令行工具,它還有系統用戶和組
文件編輯器的功能。Pw 有一個非常強大的命令行設置選項,但新用戶可能會覺得它比這兒
講的其它命令要復雜得多。
8.6.4 chpass
Chpass 可以改變用戶的密碼,shells,和個人信息的數據庫信息。只有超級用戶才能改
變其它用戶的信息。除了可選擇的用戶名,不需要任何選項,chpass 顯示一個包含用戶信息
的編輯器,而且可以試圖改變在用戶數據庫中的信息。
例如8-3. Interactive chpass by Superuser
#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1000
Gid [# or name]: 1000
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/tcsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
The normal user can change only a small subsection of this information, and only for
themselves.
例如8-4. Interactive chpass by Normal User
#Changing user database information for jru.
Shell: /usr/local/bin/tcsh
第7 頁FreeBSD 使用手冊
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
8.6.5 passwd
passwd 是改變你自己的密碼的常用方法。
注意:在改變密碼前用戶必須鍵入原來的密碼。當使用者離開他們的控制臺時,可以阻
止一個沒有經過認證的人改變他們的密碼。
例如8-5. passwd
% passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done
# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done
8.7 受限制的用戶
如果你運行一個多用戶系統,你不信任的用戶對系統所作的修改可能會損壞你的系統。
FreeBSD 提供了系統管理員限制用戶訪問系統資源的方法。這些限制通常被分成兩種:磁盤
配額和其他資源限制。磁盤配額為系統管理員提供了一個告訴文件系統給用戶使用多少磁盤
空間的方法。而且,它還提供了一種快速檢查用戶所使用的磁盤數量而不需要時刻計算的方
第8 頁FreeBSD 使用手冊
法。配額將在第11 章討論。其他資源限制包括限制CPU、memory 的數量和用戶可能會使
用的其他資源。這些是通過對登陸進行分類來完成的,下面將作討論。
登陸的類由/etc/login.conf 文件來定義。比較精確的表述超出了本章的范圍,但login.conf
的參考文檔會有比較細致的描述。
資源限制與普通的登陸限制是有區別的。首先,對于每一種限制,有軟限制和硬限制之
分。一個軟限制可能被用戶或應用程序調整過了,但不會超越硬限制。越往后可能會越降低,
但不會升高。第二,絕大多數資源限制會分配每個處理給一個特殊的用戶。
下面就是絕大多數資源限制的例子:
coredumpsize
很明顯,由程序產生的核心文件大小的限制在磁盤使用上是從屬于其他限制的(如,
文件大小,或磁盤配額)。然而,既然用戶自己無法產生核心文件,而且經常不刪除
它們,設置這個可以減少由于一個大型應用程序的崩潰所造成的大量磁盤空間的浪
費。
cputime
這是一個用戶程序所能消耗掉的最大的CPU 時鐘數量。一些不理想的進程會被內核
殺掉。
注意:這是一個有關CPU 消耗的時鐘的限制問題,不是在使用top 和ps 命令時屏
幕上顯示的CPU 消耗的百分比。
filesize
這是用戶可以處理的一個文件的最大值。不象磁盤配額,這個限制是對單個文件強
制執行的。
maxPRoc
這是一個用戶可以運行的最大的進程數。這包括前臺和后臺處理。很明顯,這不可
能比系統指定的限制要大。當然,如果設置得太小可能會削弱用戶的處理能力:可
能需要多次登陸或執行多個管道。一些任務,象編譯一些大的程序,也可能會產生
多進程。(象make,cc,和其他一些預處理程序)。
memorylocked
這是一個進程可能會被鎖定到主內存中的最大內存數量。一些比較大型的程序,象
第9 頁FreeBSD 使用手冊
amd ,這樣做,在遇到問題時,他們得到的巨大交換量無法傳遞給系統進行處理。
memoryuse
這是在給定時間內一個進程可能消耗的最大的內存數量。它包括核心內存和交換內
存。在限制內存消耗方面,這個不是一個完全的限制,但它是一個好的開始。
openfiles
這是一個進程可以打開的最大的文件數。在FreeBSD 中,文件可能用來表現套接字
和ipC 通道;然而,注意不要把這個設置得太小。對這個更深入的限制是由
kern.maxfiles sysctl 來定義的。
sbsize
這是網絡內存數量的限制。這可以通過創建許多套接字來生成一些針對老式的DoS
的攻擊的回應,但它通常被用來限制網絡通訊。
stacksize
這是一個進程堆棧可能達到的最大值。這個不能單獨地限制一個程序可能使用的內
存數量,而是要和其他的限制一起配合。
在設置資源限制時,有一些其他的事情需要記住。下面是一些通常的技巧,建議,和各
種注意事項。
1. 系統啟動的進程會被指派給后臺的登陸類。
2. 雖然來自系統的/etc/login.conf 文件是一個對于絕大多數的限制做合理配置的資源
文件,但只有你,系統管理員,才能知道什么對你的系統才是最適當的。限制設得
太高可能會把你的系統開放得太大而被人濫用,而設置得太低可能會處理時效率很
低。
3. X 視窗系統的用戶可能要比其他用戶使用更多的資源。X11 本身就要使用很多資
源,但它也可以讓用戶同時運行更多的程序。
4. 記住許多限制會被應用于單獨的處理進程,不是所有的用戶。例如,設置openfiles
為50 意味著用戶運行的每個進程可能最高只能打開50 個文件。然而,用戶可以打
開的文件的總的大小是根據maxproc 的值逐步增加的openfiles 的值。這也適用于
內存的消耗。有關資源限制,登陸類的更深入信息可以看看相關的聯機手冊:
cap_mkdb, getrlimit, login.conf。
第10 頁FreeBSD 使用手冊
8.8 私有化用戶
本地化是由系統管理員或用戶設置的一個環境,它可以用來調整不同的語言,字符設置,
時鐘標準等。這將在第14 章本地化-I18N/L10N 使用與設置作詳細討論。
8.9 組
組簡單來講就是許多用戶的列表。組可以通過他們的組名和他們的編號來識別。在
FreeBSD(和其他絕大多數的Unix 系統)中,這兩個要素通常被內核用來決定一個允許被執
行的進程是否是它的用戶ID,還是它所屬的組的列表。不象用戶ID,一個進程有一個與它
相關聯的組的列表。你可能聽說過一些有關一個用戶或進程的組ID 的事情;在大多數情況
下,這只意味著在列表中的第一個組。
與組ID 地圖對應的組名在/etc/group中。這是一個用四個冒號來界定的文本文件。第
一部分是組名,第二部分是加密的密碼,第三部分是組ID,第四部分是以逗號分割的成員
列表。它可以用手工的方式進行編輯。對于更完整的描述,可以參看group 的參考頁。如果
你不想手工編輯/etc/group,你可以使用pw 命令來增加和編輯組。例如,要增加一個叫
teamtwo 的組,確信它存在:
例如8-6. 使用pw 增加一個組:
# pw groupadd teamtwo
# pw groupshow teamtwo
teamtwo:*:1100:
上面的1100 數字是組teamtwo 的組ID。在這兒,teamtwo 沒有成員,那它也就沒有多
大用處。
例如8-7.使用pw 在組中添加一些成員:
# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
teamtwo:*:1100:jru
使用-M 參數為了用逗號劃分開一個組成員中的用戶的列表。你可能知道密碼文件也會
為每個用戶包含一個組;當使用pw 來詢問組成員的時候,在密碼文件中的組會自動被添加
到組列表中,而不會出現在成員列表中。如果你想知道一個用戶屬于哪個組,你可以使用
id 命令:
第11 頁FreeBSD 使用手冊
例如8-8.使用id 來決定組成員
% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
正如你所看到的,jru 是組jru 和teamtwo 的成員。
有關pw 的更多信息,可以參看它的聯機手冊,更多有關/etc/group格式的信息,可參
考group 的聯機手冊。
第12 頁