FreeBSD連載(12):用戶管理-增加用戶
王波
用戶管理
為了使用多用戶的FreeBSD操作系統,必須是系統的登記用戶。用戶信息保存在/etc目錄下passwd
文件中,在這個文件中定義的一個FreeBSD用戶應具有以下屬性:
用戶名(Username):在系統中使用這個用戶名來標識用戶,每個用戶名不超過8個字符,
且是大小寫敏感的。習慣上用戶名只使用小寫字母,通常根據用戶真實名字的縮寫來選擇合適的用戶名。
用戶標識號(User ID):由于計算機中處理數字比處理字符串更容易,因而使用數字方式的
用戶標識號來區分不同用戶更為適合。事實上Unix系統就是使用唯一的用戶標識號來區分用戶的,在某些特定目的下,可
以存在多個有不同用戶名、但用戶標識號相同的用戶,這表示這些不同用戶名的用戶實際上是同一個用戶。
口令(password):系統用它來驗証用戶是否合法。超級用戶root可以使用系統程序
passwd來更改每個用戶的口令,用戶也可以使用passwd來更改自己的口令。較老的Unix系統中直接在
passwd文件中保存口令的密文,由于passwd文件是系統中的每個用戶都可以讀取的,只通過加密來保証口令的安全性。然
而現代計算機的發展使得情形發生了變化,高速計算能力使得通過猜測的方式來破譯口令成為可能。因此現在Unix中口令
均不再直接保存在passwd文件中了,而passwd文件中的口令域使用一個 “*” 來代替。FreeBSD使用
/etc/master.passwd作為真正的口令文件,保存包括個人口令在內的數據,但這個文件不能被普通用戶讀
取。
命令解釋程序(shell):用戶登錄后啟動這個程序來接收用戶的輸入并執行輸入相應命令,標
准的shell有sh和csh,更復雜易用的shell有bash和tcsh等,但它們不是基本系統的一部分,必須額
外安裝。shell程序是一個標准的Unix程序,但系統在/etc/shells文件中定義了一些標准shell的
名字,很多應用程序檢查這個文件中內容和用戶的shell來判斷這個用戶是普通用戶,還是用于特定目的而創建的用戶。
個人目錄(home directory):由于FreeBSD是多用戶系統,每個用戶都要有
自己的獨立使用環境,不同用戶的文件不能相互交叉存放,因此Unix中為每個用戶配置了自己的個人目錄,用戶的文件都
放置在各自的目錄下,從而互不干擾。習慣上FreeBSD下用戶的個人目錄位于/home目錄下,使用用戶名作為子目
錄名,多數shell中使用波浪符號~,來代表該用戶的個人目錄。
組標識號(Group ID):具有相似屬性的多個用戶可以被分配到一個組內,每個組都有自己
的組名,且以自己的組標識號相區分(組標識號和組的對應關系在/etc/group文件中給出),用戶的組標識號保存
在passwd文件中。早期的Unix中,每個用戶只能屬于一個組,而現代Unix中每個用戶可以同時屬于多個組,除
了在passwd文件中指定了其歸屬的基本組之外,還可以在文件/etc/group中,明確指定一個組包括某個用戶
,使得該用戶能屬于多個組。
除此之外,用戶還有其他屬性,例如登錄類別,這些信息記錄在另一個口令文件:/etc/master.passwd中。
雖然可以使用系統安裝程序/stand/sysinstall中的Add User選項來增加用戶和組,但熟
練的管理員并不喜歡這種全屏幕操作方式。Unix下的習慣做法是使用命令行方式,如使用adduser命令來或pw命
令添加用戶。
adduser命令使用配置文件/etc/adduser.conf來保存添加用戶使用的缺省數據,如果沒有
這個配置文件,第一次執行adduser時會詢問缺省設置,以自動生成這個設置文件。這樣對于很多基本一致的用戶數據
就設置了正確的缺省值,以減少輸入的工作量。
# adduser
Use option ``-silent'' if you don't want see all warnings & questions.
Check /etc/shells
Check /etc/master.passwd
Check /etc/group
Enter your default shell: bash csh date no sh [sh]:
Your default shell is: sh -> /bin/sh
Enter your default HOME partition: [/home]:
Copy dotfiles from: /usr/share/skel no [/usr/share/skel]:
Send message from file: /etc/adduser.message no
[/etc/adduser.message]:
Use passwords (y/n) [y]:
Ok, let's go.
在前面的過程中生成了配置文件之后,還可以使用編輯器來修改它的內容以更改adduser的配置。雖然生成了
配置文件,但每次啟動adduser還會詢問這些缺省參數是否需要更改,使得操作不太簡便。為了讓adduser直接
進入用戶數據輸入狀態,可以使用 “adduser -quiet” 減少提示信息,-quiet的縮寫方式為-q,
-silent和-s參數也有同樣的效果。更一勞永逸的方式是直接修改adduser.conf文件,將其中的
verbose參數改為0,表示盡量減少提示。這個參數的缺省值為1,將進行設置缺省值的提示,而設置為2能提供更多的配置
參數。
# adduser -s
Use option ``-verbose'' if you want see more warnings & questions
or try to repair bugs.
Enter username [a-z0-9_-]: user22
Enter full name []:
Enter shell bash csh date no sh [sh]:
Enter home directory (full path) [/home/user22]:
Uid [1007]:
Enter login class: default []:
Login group user22 [user22]:
Login group is ``user22''. Invite user22 into othergroups: guest no
[no]:
Enter password []:
Use an empty password? (y/n) [y]:
Name: user22
Password: ****
Fullname: user22
Uid: 1007
Gid: 1007 (user22)
Class:
Groups: user22
HOME: /home/user22
Shell: /bin/sh
OK? (y/n) [y]:
Added user ``user22''
Send message to ``user22'' and: no root second_mail_address
[no]:
your account ``user22'' was created.
Have fun!
See also chpass(1), finger(1), passwd(1)
Add anything to default message (y/n) [n]:
Send message (y/n) [y]:
Add another user? (y/n) [y]:n
因此可以使用-s參數使adduser直接進入增加用戶的操作步驟,這將詢問增加用戶的必要數據,包括用戶名
、口令等數據。adduser將使用adduser.conf中的一些內容作為缺省提示,通常有提示的步驟可以直接利
用缺省提示進行操作。
比adduser命令功能更復雜的命令為pw,管理員能使用它來完成各種復雜的用戶管理任務,包括增加、刪除
用戶,以及修改用戶的各項參數設置。
另一種更直接的管理用戶的方式是直接編輯口令文件的內容。這是Unix早期常見的做法,但隨著Unix的發展
,當前的Unix使用shadow的方法保存加密口令數據,用戶數據不僅保存在passwd文件中,而真實的口令等內
容被系統保存在另一個口令文件中,必須同時修改這兩個口令文件,使其保持一致才可以。因此不能直接使用vi等編輯器來
編輯一個/etc/passwd文件,而應該使用系統提供的vipw命令修改這口令文件,并同時寫入兩個文件。出于安
全的考慮,vipw將使用一個內部編輯器(與vi相同)編輯master.passwd文件,保存時同步這兩個口令文
件。事實上master.passwd文件才是真正的口令文件,單獨改變/etc/passwd文件,對用戶數據沒有
影響。
由于系統中會反復讀取用戶口令,而在普通文本形式的passwd文件中查找用戶的速度與用戶數量是一種線性關
系,當用戶數量一多,查找效率就急劇下降。而數據庫的形式更適合這些經常發生的查找任務,因為數據庫將自動維護數據的
索引,這些索引可以用來提高查找效率。FreeBSD中提供了一種簡單的的標准數據庫文件格式,口令文件可以使用這種
db數據格式來提高性能。因此口令文件有對應的數據庫形式:/etc/pwd.db和/etc/spwd.db,用來
獲得用戶信息的系統調用事實上首先查詢這兩個數據庫文件,而由系統來自動維護這兩個數據庫文件與前兩個passwd文
件同步。系統管理者可以使用pwd_mkdb來從文本形式的口令文件來生成數據庫文件。通常,普通文本形式的passwd
文件只適合于有几百帳號的系統,而db數據庫形式適合一萬以上帳號的系統。
在其他Unix系統中,第二個口令文件的名字與bsd系統使用的文件名不同,大部分Unix System V
系統使用/etc/shadow文件。使用不同的名字只是習慣的問題,文件格式都是passwd文件格式。因此如果
要求兼容,可以為/etc/master.passwd建立一個叫shadow的符號連接。
組能幫助權限的分配,與管理用戶類似,管理組也可以通過sysinstall來完成,或直接改動/etc/group
文件。用戶除了屬于passwd文件中定義的組之外,還可以被邀請進入其他組中。adduser添加用戶時會
詢問是否將用戶加入其他組,如果在用戶生成之后在將用戶加入其他組,就需要直接改動/etc/group文件。例如
group文件中有這樣一行:
wheel:*:0:root,admin
admin:*:100:admin
這表示用戶admin不但屬于自己在passwd中規定的組,還屬于wheel和admin組。可以使用groups
命令來獲得用戶的屬組列表。
未完,待續。。。
|