欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

第五章 使用者管理

5.1 賬號(hào)管理

5.1.1 新增使用者

新增使用者時(shí),我們會(huì)以 adduser 這個(gè)指令來(lái)進(jìn)行,adduser 指令其實(shí)是將新增使用者所必須做的事寫(xiě)成一個(gè)執(zhí)行檔來(lái)自動(dòng)幫我們做,在 FreeBSD 4.x 是以 perl 所寫(xiě)成,而 FreeBSD 5.x 改以 shell scripts 來(lái)實(shí)作。為了了解系統(tǒng)對(duì)于使用者管理細(xì)節(jié),讓我們先回顧一下 3.6 節(jié)關(guān)于使用 adduser 新增使用者的過(guò)程。在 4.x 和 5.x adduser 指令的細(xì)節(jié)有一點(diǎn)不同,但大同小異。

# adduser
Username: jack

執(zhí)行了 adduser 之后,首先要輸入使用者名稱(chēng),使用者名稱(chēng)除了英文字、數(shù)字及 -_ 外不可以包含其它特殊字符。

Full name: Jack

接著我們要輸入使用者全名,這個(gè)字段可以是空的,如果您不輸入則直接按 Enter 即可。

Uid (Leave empty for default):

這個(gè)字段是使用者編號(hào),直接留白按 Enter 即可,系統(tǒng)會(huì)自動(dòng)指定。

Login group [jack]:

輸入使用者群組名稱(chēng),群組名稱(chēng)預(yù)設(shè)會(huì)自動(dòng)產(chǎn)生一個(gè)和新增的使用者同名的群組,如果要使用不同的群組,必須先手動(dòng)新增群組。我們直接按 Enter 即可。

Login group is jack. Invite jack into other groups? []:wheel

是否要將新的使用者加入其它群組,由于這是我們新增的第一個(gè)一般使用者,所以我們將它加入系統(tǒng)管理者 wheel 這個(gè)群組,讓他可以使用 su 這個(gè)指令來(lái)切換身份成 root。

Login class [default]:

登入的類(lèi)別,這是用來(lái)分類(lèi)控制使用者對(duì)于系統(tǒng)資源的使用,請(qǐng)參考下一節(jié)系統(tǒng)資源限制的說(shuō)明。在這里我們直接按 Enter 使用默認(rèn)值即可。

Shell (sh csh tcsh nologin) [sh]: tcsh

輸入所要使用的 Shell,建議輸入 tcsh,如果您不想讓該使用者登入系統(tǒng),可以輸入 nologin。

Home directory [/home/jack]:

輸入使用者的家目錄,也就是使用者在系統(tǒng)中的數(shù)據(jù)夾,所有使用者的目錄我們都放在 /home 下,所以我們直接按 Enter 即可。

Use password-based authentication? [yes]:

是否要使用密碼認(rèn)證的方式,預(yù)設(shè)為是,我們直接按 Enter 即可。

Use an empty password? (yes/no) [no]:

是否要使用空密碼,預(yù)設(shè)為否。

Use a random password? (yes/no) [no]:

是否使用隨機(jī)產(chǎn)生的密碼,如果使用隨機(jī)產(chǎn)生的密碼,在新增完畢后,系統(tǒng)會(huì)告知我們產(chǎn)生的密碼,預(yù)設(shè)為否。

Enter password:

輸入該使用者的密碼。

Enter password again:

再輸入一次密碼,以確認(rèn)輸入無(wú)誤。

Lock out the account after creation? [no]:

在新增完使用者后,是否要先將該賬戶(hù)關(guān)閉。

看了 adduser 指令的過(guò)程,您對(duì)于新增使用者應(yīng)有的步驟應(yīng)該已經(jīng)有初步的了解了,接下來(lái)我們要介紹 adduser 這個(gè)指令到底做了哪些事。

知道了以上的流程,我們也可以手動(dòng)自己做上述的步驟,但我們必須先知道 group 及 master.passwd 等檔案的格式。所以我們接下來(lái)要介紹這些檔案。

5.1.2 /etc/group介紹

在使用者的管理方面,F(xiàn)reeBSD 大致上可以分為群組管理及賬號(hào)管理。每一個(gè)賬號(hào)至少屬于一個(gè)群組,這樣子有利于權(quán)限控制。例如學(xué)生的賬號(hào)就有一個(gè)學(xué)生群組,而老師的賬號(hào)就屬于教師群組,某幾位老師屬于管理者的群組。這樣一來(lái),我們除了可以針對(duì)個(gè)人設(shè)定權(quán)限外,也可以針對(duì)不同群組給予不同的權(quán)限。

/etc/group 這個(gè)檔案就是記錄群組的檔案,這是一個(gè)文字文件,我們可以使用 ee 等文字編輯軟件打開(kāi)它。在 group 檔案中,其格式如下:

wheel:*:0:root,alex
students:*:1000:
teachers:*:1001:
webadmin:*:1002:alex,john,tom

每一個(gè)字段以冒號(hào)分開(kāi),以最后一行為例,第一個(gè)字段代表群組名稱(chēng)為 teachers,而群組代號(hào)(gid) 是 1001。我們可以自行使用文字編輯器加入想要的群組名稱(chēng)及 gid,但要注意的是群組名稱(chēng)和 gid 不能重復(fù)。

第一行的最后面是 root,alex,表示該群組成員。由于記錄使用者數(shù)據(jù)的檔案中只能記錄使用者的預(yù)設(shè)群組,如果使用者還屬于其它群組,則必須記錄在 /etc/group 中。例如使用者 alex 的預(yù)設(shè)群組是 alex,我們希望他同時(shí)是 webadmin 群組,則我們必須在 webadmin 群組后加上該使用者。

在 FreeBSD 中,如果其它使用者要能使用 su 變成超級(jí)使用者的話,必須將其賬號(hào)加入 wheel 群組中。
新增群組時(shí),除了可以使用文字編輯外,也可以使用指令 pw 來(lái)新增群組:

# pw groupadd newgroup
# pw groupshow newgroup
newgroup:*:1002:

第一個(gè)指令是以參數(shù) groupadd 來(lái)新增群組 newgroup,再以參數(shù) groupshow 來(lái)顯示 newgoup 的信息。

5.1.3 /etc/master.passwd介紹

FreeBSD 使用 shadow password 的方式來(lái)保護(hù)密碼文件,只有 root 才可以讀取編碼后的密碼文件 /etc/master.passwd。但是這并不是系統(tǒng)用來(lái)驗(yàn)證的檔案,為了加快速度,F(xiàn)reeBSD 將該文件做成數(shù)據(jù)庫(kù) /etc/spwd.db/etc/pwd.db, 因此在修改完 master.passwd 后,必須使用指令 pwd_mkdb 來(lái)將 master.passwd 做成數(shù)據(jù)庫(kù)檔案。不過(guò)一般而言,我會(huì)使用 vipw 這個(gè)指令來(lái)修改 master.passwd,vipw 會(huì)先將 master.passwd 以預(yù)設(shè)的文書(shū)編輯軟件打開(kāi),修改完存盤(pán)后,它會(huì)視需要自動(dòng)更新數(shù)據(jù)庫(kù)。如果您沒(méi)有修改過(guò) ~/.cshrc,則預(yù)設(shè)的文書(shū)編輯軟件是 vi。vi 在使用上比較復(fù)雜,如果您要離開(kāi)編輯器,請(qǐng)依序按 Esc : q ! 再按 Enter 即可不存檔離開(kāi)。關(guān)于 vi 的用法,您可以參考第三章相關(guān)章節(jié)。

在執(zhí)行 vipw 之后,會(huì)出現(xiàn):

# $FreeBSD: src/etc/master.passwd,v 1.25.2.6 2002/06/30 17:57:17 des Exp $
#
root:$1$94sxalyM$w1lBLBGAsRPfdVciGqNfL/:0:0::0:0:Charlie &:/root:/bin/tcsh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/sbin/nologin
smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/sbin/nologin
mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin
www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
tom:Bk5AI4MiRKCJ2:1000:1000::0:0:Tom Chang:/home/tom:/bin/tcsh

master.passwd 這個(gè)檔案內(nèi)容中,每個(gè)使用者都是獨(dú)立的一行,每個(gè)字段使用冒號(hào)分開(kāi),它的格式是:

name:password:UID:GID:class:change:expire:fullname:home:shell

每個(gè)字段的說(shuō)明如下:

# expr `date +%s` + 86400 \* 30

我們可以看到在 master.passwd 中已經(jīng)有許多使用者,這些使用者是系統(tǒng)服務(wù)的使用者。例如 smmsp 是郵件服務(wù)器的 daemon 所使用的使用者名稱(chēng)。nobody 這個(gè)使用者是預(yù)設(shè)無(wú)任何權(quán)限的使用者,但有很多系統(tǒng)服務(wù)軟件的預(yù)設(shè)使用者都是 nobody,我們應(yīng)該要注意不要以 nobody 負(fù)責(zé)為太多服務(wù),否則它不就變成了擁有許多權(quán)限的使用者了嗎!

5.1.4 刪除使用者

知道了新增使用者的步驟后,您大概已經(jīng)知道要怎么刪除使用者了吧。只要把新增使用者的步驟反過(guò)來(lái)即可。

以上這些步驟其實(shí)就是指令 rmuser 所做的事。我們可以使用這個(gè)指令來(lái)快速的移除使用者賬號(hào)。以下即為 rmuser test 的執(zhí)行結(jié)果:

Matching password entry:
test:J7kPK0pKTn2oQ:1001:1001::0:0:Tom:/home/test:/bin/tcsh
Is this the entry you wish to remove? y →真的要移除這一個(gè)使用者嗎?
Remove user's home directory (/home/test)? y →是否要移除使用者家目錄?
# 移除使用者正在執(zhí)行的程序及更新系統(tǒng)數(shù)據(jù)
Removing user's at jobs:Updating password file, updating databases, done.
# 移除使用者群組
Updating group file: (removing group test -- personal group is empty) done.
# 移除使用者家目錄
Removing user's home directory (/home/test): done.
# 移除使用者信件
Removing user's incoming mail file /var/mail/test: done.
# 移除使用者暫存目錄
Removing files belonging to test from /tmp: done.
Removing files belonging to test from /var/tmp: done.
Removing files belonging to test from /var/tmp/vi.recover: done.

5.2 系統(tǒng)資源限制

如果您的 FreeBSD 系統(tǒng)允許多位使用者同時(shí)使用,每個(gè)使用者可能同時(shí)執(zhí)行許多工作,例如 Alex 可能會(huì)執(zhí)行龐大的數(shù)學(xué)運(yùn)作程序,而 Tom 在系統(tǒng)中執(zhí)行占用海量存儲(chǔ)器的數(shù)據(jù)庫(kù)程序。如此一來(lái),我們的系統(tǒng)資源將全部被幾個(gè)使用者耗盡,其它正常的系統(tǒng)服務(wù)便無(wú)法擁有較高的效能。我們不能單純的假設(shè)系統(tǒng)中所有使用者都會(huì)乖乖的使用單純的服務(wù),因此,在一個(gè)多重使用者的環(huán)境中,系統(tǒng)管理者有必要針對(duì)每個(gè)使用者限于他們所可以使用的系統(tǒng)資源,例如 CPU、內(nèi)存、磁盤(pán)空間的使用量等。

5.2.1 登入類(lèi)別

我們?cè)谛略鍪褂谜邥r(shí)會(huì)設(shè)定使用者的 login class,所謂的 login class 就是將使用者分類(lèi)管理,以限制不同類(lèi)別的使用者對(duì)于系統(tǒng)資源的使用。

/etc/login.conf 定義了不同的 login class。這個(gè)檔案中所有對(duì)于使用者限制的設(shè)定都是以 key=value 的方式來(lái)表示。這些限制大部份是針對(duì)某個(gè)使用者所執(zhí)行的某一個(gè)行程 (process) 所能占用的資源,而非該使用者全部執(zhí)行的行程所占用的資源總合。因此,除了每個(gè)行程所能占用的資源外,我們還會(huì)設(shè)定使用者最多可以執(zhí)行多少個(gè)行程。

以下為 /etc/login.conf 中關(guān)于 default class 的設(shè)定:

# defaults
# These settings are used by login(1) by default for classless users
# Note that entries like "cputime" set both "cputime-cur" and "cputime-max"

default:\
	:passwd_format=md5:\
	:copyright=/etc/COPYRIGHT:\
	:welcome=/etc/motd:\
	:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES:\
	:path=/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin
	:nologin=/var/run/nologin:\
	:cputime=unlimited:\
	:datasize=unlimited:\
	:stacksize=unlimited:\
	:memorylocked=unlimited:\
	:memoryuse=unlimited:\
	:filesize=unlimited:\
	:coredumpsize=unlimited:\
	:openfiles=unlimited:\
	:maxproc=unlimited:\
	:sbsize=unlimited:\
	:vmemoryuse=unlimited:\
	:priority=0:\
	:ignoretime@:\

以下為關(guān)于系統(tǒng)資源限制的字段說(shuō)明,每一個(gè)字段都有可使用的數(shù)值類(lèi)型,例如 size、time 等,讓我們來(lái)看看每個(gè)字段的說(shuō)明:

字段名稱(chēng) 數(shù)值類(lèi)型 說(shuō)明
coredumpsize Size 當(dāng)使用者所執(zhí)行的程序出了問(wèn)題 (coredump),系統(tǒng)會(huì)將該程序的執(zhí)行狀況從內(nèi)存中寫(xiě)到硬盤(pán)上,這個(gè)值就是在限制 core file 的檔案大小。如果使用者所執(zhí)行的程序是需要消耗許多內(nèi)存的程序,則所產(chǎn)生的 core file 也會(huì)很大。這個(gè)值不應(yīng)該比使用者的磁盤(pán)配額限制大。
cputime Time 這是一個(gè)行程所能使用的最長(zhǎng) CPU 時(shí)間,這個(gè)時(shí)間指的不是我們?cè)?top 或 ps 中看到的 CPU usage 百分比,而是一個(gè)行程所使用的 CPU 時(shí)間。當(dāng)超過(guò)時(shí)間,系統(tǒng)核心會(huì)自動(dòng)停止該行程。
filesize Size 使用者單一檔案的最大容量。我們對(duì)于使用者磁盤(pán)配額只能限制使用者對(duì)于硬盤(pán)的使用總額,而這個(gè)設(shè)定可以限制單一檔案的大小。
maxproc Number 限制使用者最多可以執(zhí)行的行程總量。這個(gè)限制包含所有以該使用者名稱(chēng)所執(zhí)行的程序,有的程序在執(zhí)行時(shí),會(huì)自動(dòng)產(chǎn)生許多子行程,如果這個(gè)值設(shè)定的太小,可能會(huì)造成使用者的困擾。
memorylocked Size FreeBSD 系統(tǒng)中有所謂的虛擬內(nèi)存空間,當(dāng)物理內(nèi)存不足時(shí),系統(tǒng)會(huì)將某部份的內(nèi)存數(shù)據(jù)放到虛擬內(nèi)存中。而有的程序會(huì)使用 mlock() 這個(gè)系統(tǒng)呼叫要求系統(tǒng)將它所占用的內(nèi)存空間全部放在物理內(nèi)存中,memorylocked 就是限制使用 mlock() 的內(nèi)存大小。
memoryuse Size 限制行程最大的內(nèi)存使用量,包含物理內(nèi)存及虛擬內(nèi)存。
openfiles Number 限制使用者同一時(shí)間最多可以開(kāi)啟的檔案數(shù)量。所謂的檔案數(shù)量包含了一般的檔案及 socket。
sbsize Size 用以限制最大的網(wǎng)絡(luò)緩沖區(qū)的使用量。
stacksize Size 行程可使用的最大堆棧 (stack) 空間。

以下為上表中數(shù)值類(lèi)型的說(shuō)明:

類(lèi)型 說(shuō)明
Size 我們可以單純的以數(shù)字來(lái)表示 Size,預(yù)設(shè)的單位是 byte。例如 1234 表示 1234 bytes。除此之外,我們也可以在數(shù)字之后加上單位。例如:
    b: 表示 512-byte block (1b = 512bytes)。
    k: 表示 kilobytes,即 KB (1k=1024 bytes)。
    m: 表示 megabytes,即 MB (1m=1048576 bytes)。
    g: 表示 gigabytes,即 GB。
    t: 表示 terabytes,即 TB。
Time 當(dāng)我們只寫(xiě)數(shù)字時(shí),預(yù)設(shè)的單位是秒?;蛘呶覀円部梢栽跀?shù)字后加上單位 y (年)、w (周)、d (天)、h (時(shí))、m (分)、s (秒)。

例如,三小時(shí)四十分可以表示為:13200s、220m、或是 3h40m。

Number 您可以使用 0 到 9 的數(shù)字,預(yù)設(shè)為十進(jìn)制。您也可以使用開(kāi)頭為 0x 的數(shù)字來(lái)表示十六進(jìn)制。

當(dāng)要修改類(lèi)別時(shí),我們以將 default class 復(fù)制一份,并更名為其它類(lèi)別,最后再進(jìn)行編輯。類(lèi)別新增完畢后,我們必須執(zhí)行下列指令以重建系統(tǒng)數(shù)據(jù)庫(kù)。

# cap_mkdb /etc/login.conf

接下來(lái)我們就可以執(zhí)行 vipw 在想要限制的使用者的 class 的字段填入我們新增的類(lèi)別了。

除了限制系統(tǒng)資源的使用外,我們也可以使用 login.conf 來(lái)客制化每個(gè)使用者的登入環(huán)境、所使用的語(yǔ)言等,請(qǐng) man login.conf 以得到更多的說(shuō)明。

5.2.2 磁盤(pán)配額

當(dāng)系統(tǒng)中有多位使用者時(shí),如果其中一個(gè)人擁有大量檔案,那么其它使用者便無(wú)法有足夠的空間來(lái)使用。如果系統(tǒng)有許多使用者,而又不限制他們對(duì)磁盤(pán)的使用量,那么磁盤(pán)很容易就會(huì)爆掉,因此我們必須對(duì)使用者加以限制。您可以限制系統(tǒng)中每個(gè)使用者可使用的硬盤(pán)大小(quota)。步驟如下:

# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/ad0s1b	none	swap	sw	0	0
/dev/ad0s1a	/	ufs	rw	1	1
/dev/ad1s1f	/home	ufs	rw,userquota	2	2
/dev/ad0s1e	/usr	ufs	rw	2	2
/dev/ad1s1e	/var	ufs	rw	2	2

完成了上述的步驟并重新開(kāi)機(jī)之后,我們就可以使用指令 edquota 來(lái)編輯磁盤(pán)配額。首先,以指令 edquota -u tom 進(jìn)入文書(shū)編輯,我們通常會(huì)加入二行,一行限制檔案大小,一行限制檔案數(shù):

Quotas for user tom:
/home: blocks in use: 65, limits (soft = 50000, hard =55000)
        inodes in use: 7, limits (soft = 5000, hard = 6000)

共中 blocks 代表使用者使用檔案大小總合,而 inodes 代表檔案數(shù)目。soft limits 代表使用量達(dá)到多少時(shí)提出警告,而 hard limits 代表使用量達(dá)多少時(shí)立刻禁止寫(xiě)入。

上面的范例中,使用者 tom 目前使用的檔案大小為 65K,在檔案大小總合為 50000K 時(shí)提出警告,55000K 時(shí)禁止寫(xiě)入。目前該使用者有7個(gè)檔案,在檔案數(shù)達(dá) 5000 個(gè)時(shí)提出警告,達(dá) 6000 個(gè)時(shí)禁止寫(xiě)入。

我們也可以使用 edquota -p tom 2000-3000 來(lái)以使用者 tom 的設(shè)定為范例,將 UID 為 2000 到 3000 的使用者設(shè)定為和 tom 一樣?;蛘呤褂弥噶?edquota -p tom jack rose 來(lái)以使用者 tom 為范例,將 jack 及 rose 的設(shè)定變成和 tom 一樣。

您可以使用 quota -v tom 來(lái)看使用者 tom 目前的使用情形,或使用 repquota 來(lái)查看所有使用者目前的使用情形。

在 FreeBSD 3.2 以后的版本,系統(tǒng)開(kāi)機(jī)后預(yù)設(shè)會(huì)檢查所有使用者的 quota,但這必須要花上一段時(shí)間,如果您不想在開(kāi)機(jī)時(shí)自動(dòng)檢查 quota 的話,請(qǐng)?jiān)?/etc/rc.conf 中加入下列設(shè)定:

check_quotas="NO"

在 FreeBSD 3.2 版以前,開(kāi)機(jī)內(nèi)定是不檢查 quota 的,如果你想在開(kāi)機(jī)時(shí)即檢查的話,請(qǐng)?jiān)?/etc/rc.conf 中加入下列設(shè)定:

check_quotas="YES"

5.3 大量新增賬號(hào)

對(duì)于大型主機(jī)的管理者而言,要大量新增賬號(hào)時(shí),若沒(méi)有一套"撇步"的話,使用 adduser 指令來(lái)新增賬號(hào)將會(huì)非常累人,所以我們必須要想出一個(gè)大量新增賬號(hào)的方法。

大量新增賬號(hào)的方法有很多,最簡(jiǎn)單的就是寫(xiě)一個(gè)程序來(lái)處理,只要依照之前提及的新增賬號(hào)步驟使用程序來(lái)一步步建立或在程序中呼叫 FreeBSD 系統(tǒng)中新增賬號(hào)的指令并經(jīng)由循環(huán)來(lái)完成。但是 adduser 指令會(huì)問(wèn)一堆問(wèn)題,不適合拿來(lái)作程序中要呼叫的指令,所幸在 FreeBSD 中還有一個(gè)管理使用者賬號(hào)及群組的程序 pw ,所以筆者就以指令 pw 加上一些控制來(lái)寫(xiě)成 script。

一般而言,如果要新增的賬號(hào)是沒(méi)有規(guī)則性的,那么就必須先將賬號(hào)做成一個(gè)文字文件,再以程序讀入。若賬號(hào)是有規(guī)則性的,則可以給定參數(shù)來(lái)完成。您可以在本書(shū)所附的第二片光盤(pán)中的 examples 目錄中找到筆者所寫(xiě)的「新增大量賬號(hào)」程序,文件名是 adduser.tar.gz。

這個(gè)程序可以使用檔案匯入賬號(hào)及密碼,或只給賬號(hào)并自動(dòng)產(chǎn)生密碼,最后將賬號(hào)及密碼存成一個(gè)檔案(預(yù)設(shè)是 adduser.log)。我們也可以使用連續(xù)產(chǎn)生賬號(hào)的方式,產(chǎn)生一堆連續(xù)的賬號(hào),產(chǎn)生的結(jié)果同樣會(huì)放成 adduser.log 中。

首先,將第二片光盤(pán)放入光驅(qū)中,并使用下列指令將檔案復(fù)制到 root 的目錄下:

# mount /cdrom
# cp /cdrom/examples/adduser.tar.gz /root/

將檔案放到硬盤(pán)中后,請(qǐng)切換目錄到 /root 并以下列指令解壓縮:

# cd /root
# tar zxvf adduser.tar.gz

解壓縮后,進(jìn)入 adduser 目錄,你可以看到該目錄中有下列檔案:

檔名 用途
adduser.pl 主要執(zhí)行檔。
adduser.cfg 這是 pw 這個(gè)指令所要使用的設(shè)定檔,我們可以在其中設(shè)定預(yù)設(shè)所要使用的群組名稱(chēng)、shell、最大及最小的 uid、及家目錄等。您也可以 man pw.conf 來(lái)取得這個(gè)檔案格式的用法。

建議您至少應(yīng)該要修改 defaultgroup 這個(gè)字段,它是我們新增使用者預(yù)設(shè)所要使用的群組名稱(chēng),您必要先在 /etc/group 中加入所要使用的群組。如果 defaultgroup 所指定的群組不在 /etc/group 中,則預(yù)設(shè)會(huì)以讓使用者的名稱(chēng)作為群組名稱(chēng)。

readme.txt 這是 adduser.pl 的說(shuō)明檔。
user.txt 你可以使用檔案匯入使用者的方式來(lái)新增使用者,這個(gè)檔案存放了我們所要新增的使用者及密碼。其格式是 username,password。如果只有使用者名稱(chēng)而無(wú)密碼,我們會(huì)隨機(jī)產(chǎn)生新的密碼,并將密碼及使用者名稱(chēng)存放在 adduer.log 中。

adduser.pl 這個(gè)程序的使用方式如下:

./adduser.pl -f users.txt 參數(shù) -f 或 -file 表示使用檔案匯入,文件名稱(chēng)可以自由命名,檔案每一行內(nèi)容即一個(gè)賬號(hào) 的設(shè)定,每一行的格式可以是只有賬號(hào)或者是有賬號(hào)及密碼,賬號(hào)和密碼間使用逗點(diǎn) "," 隔開(kāi)。本范例中將以檔案 user.txt 來(lái)產(chǎn)生賬號(hào)。
./adduser.pl -u alex 001 003 參數(shù) -u 或 -user 表示使用連續(xù)賬號(hào),此范例將產(chǎn)生 alex001 alex002 alex003 三個(gè)賬號(hào)。

在執(zhí)行完 adduser.pl 之后,在該目錄下會(huì)產(chǎn)生一個(gè) adduser.log,這個(gè)檔案將記錄我們新增的使用者及其密碼。

5.4 備份與移轉(zhuǎn)

在了解了新增使用者的步驟后,您對(duì)于備份使用者的作法在心中應(yīng)該也有個(gè)譜了吧。在更新系統(tǒng)時(shí),使用者的數(shù)據(jù)需要備份的有:

5.4.1備份

除非我們和使用者間已有共識(shí),不幫使用者備份其郵件及檔案,否則平常想要備份使用者數(shù)據(jù)的話,這是一件麻煩且費(fèi)時(shí)的工作。不管是外在因素或是硬件固障,系統(tǒng)都有可能數(shù)據(jù)流失。對(duì)于一個(gè)公眾服務(wù)器的管理者而言,事前明白告知使用者系統(tǒng)管理的原則是一件十分重要的事。如果未事前請(qǐng)使用者自行備份個(gè)人的檔案及郵件的話,首先,備份的工作將非常耗時(shí),尤其是使用者擁有大量檔案時(shí)。再者,若未備份文件,當(dāng)系統(tǒng)數(shù)據(jù)流失時(shí),容易和使用者產(chǎn)生爭(zhēng)議,就算平常每天都有備份,也只能保住備份當(dāng)時(shí)的檔案,從備份到系統(tǒng)出問(wèn)題的時(shí)候所產(chǎn)生的檔案就無(wú)法回復(fù)了。

如果不必備份使用者個(gè)人數(shù)據(jù)的話,就只需把 /etc/master.passwd/etc/group 存在別的儲(chǔ)存設(shè)備或計(jì)算機(jī)中,要回復(fù)時(shí)只要依下列移轉(zhuǎn)的步驟做即可。

5.4.2 移轉(zhuǎn)

如果系統(tǒng)中已有其它使用者,要先編輯 /etc/group,加入和備份的 group 檔案有差異的地方,再使用 vipw 來(lái)將加入和備份的 master.passwd 有差異的地方。如果新系統(tǒng)中無(wú)其它使用者,則將所備份的 master.passwdgroup 放到新計(jì)算機(jī)的 /etc 下,再執(zhí)行下列指令以將密碼文件轉(zhuǎn)成數(shù)據(jù)庫(kù)格式即可:

# pwd_mkdb -p -d /etc /etc/master.passwd

如果沒(méi)有要移轉(zhuǎn)使用者個(gè)人數(shù)據(jù)的話,也必須建立使用者家目錄及郵件目錄。如果要移轉(zhuǎn)使用者目錄的話,記得移轉(zhuǎn)后要檢查一下該目錄的所有人是不是該使用者。如果不是,就必須使用下列指令來(lái)將使用者目錄擁有者更改為所屬的使用者:

# chown -R user:group /home/user

上面這個(gè)指令是將 /home/user 這個(gè)目錄及其下所有目錄的所有人變成使用者名稱(chēng)為 user,群組為 group。
我們也可以在密碼文件及群組數(shù)據(jù)移轉(zhuǎn)后,將舊的硬盤(pán)存放使用者數(shù)據(jù)的扇區(qū)(假設(shè)是 /home) mount 到 /mnt 下,再到 /mnt 下存放使用者數(shù)據(jù)的目錄中使用指令

# tar clf - . | tar xvpf - -C /home

來(lái)將使用者數(shù)據(jù)復(fù)制到 /home 中。并依此方法 mount 使用者郵件目錄扇區(qū)并復(fù)制到 /var/mail 下即可。

5.5 使用歷程記錄

5.5.1 記錄使用者指令

為什么要記錄使用者下過(guò)的指令?并不是為了要監(jiān)視使用者,而是在系統(tǒng)有問(wèn)題時(shí),可以找出原因。找出使用者曾經(jīng)使用過(guò)哪些指令,以了解問(wèn)題的所在。FreeBSD 提供指令 lastcomm 讓你查看系統(tǒng)中使用者執(zhí)行的指令,但是你必須先修改 /etc/rc.conf,加上下列一行設(shè)定:

accounting_enable="YES"

系統(tǒng)會(huì)將使用者的歷程記錄在 /var/account/acct* 中,最新的記錄是 acct,隨著數(shù)據(jù)越來(lái)越多,系統(tǒng)每天會(huì)將該檔案移成 acct1,而 acc1 將變成 acct2,依此類(lèi)推。如果站上使用者很多的話,acct 的檔案將變得非常大,所以你必須確保該目錄有足夠的空間存放數(shù)據(jù),為了避免檔案過(guò)多,系統(tǒng)內(nèi)定只會(huì)保留最近四天的數(shù)據(jù)。

當(dāng)下達(dá)指令 lastcomm 時(shí),如果我們未使用任何參數(shù),則系統(tǒng)會(huì)以 /var/account/acct 為參考,印出所記錄的數(shù)據(jù)。你也可以使用 lastcomm -f acct1 來(lái)查看前一天的資料。

5.5.2 監(jiān)看使用者

當(dāng)使用者登入系統(tǒng)后,root 可以使用 watch 指令來(lái)取得在線使用者的窗口畫(huà)面。也就是說(shuō)當(dāng)下達(dá)指令后,root 所看到的畫(huà)面就會(huì)和該在線使用者一樣。我們可以觀察該使用者在做些什么事,輸出的結(jié)果又是什么。

這個(gè)指令并不是要給人拿來(lái)做壞事用的。如果有不友善的使用者登入系統(tǒng)時(shí),可以使用它來(lái)觀察該使用者的動(dòng)作,并適時(shí)阻止。
只有超級(jí)使用者 root 可以執(zhí)行 watch,而且如果您使用的是 FreeBSD 4.6-RELEASE 以前的版本,在執(zhí)行前必須先在 kernel 中加入下列的設(shè)定并重新編譯核心:

pseudo-device snp

最后使用下列指令新增 snoop device:

# cd /dev
# ./MAKEDEV snp0 snp1 snp2 snp3

接下來(lái)就可 watch 指令了。首先,先下指令 w 來(lái)看一下站上有哪些使用者。指令結(jié)果的第二個(gè)字段部份,有使用者的 tty,例如 p0、v0 等,選定要監(jiān)看的使用者后,使用 watch ttyp0 來(lái)監(jiān)看該使用者,其中 ttyp0 即該使用者的 tty。你可以使用 CTRL+X 來(lái)切換不同的 tty,也可以使用 CTRL+G 離開(kāi)回到自己的畫(huà)面。

5.5.3 控制 root 的使用

如果我們有在 wheel 群組中加入一般的使用者,則該使用者可以使用指令 su 并輸入 root 的密碼后變成超級(jí)使用者。但如果系統(tǒng)中有多位使用者具有 root 的權(quán)限,我們根本不知道是誰(shuí)使用了 root 的權(quán)限、執(zhí)行了哪些指令;如果我們想針對(duì)不同人給予不同的權(quán)限,例如一個(gè)人只有備份的權(quán)限、另一個(gè)人只能觀看系統(tǒng)設(shè)定,su 也無(wú)法達(dá)成我們的要求。因此有人發(fā)展出 sudo 這個(gè)軟件來(lái)支持系統(tǒng)的管理。

不過(guò) sudo 并不是 FreeBSD 系統(tǒng)內(nèi)定的指令,我們必須自己安裝。所幸 FreeBSD 己將該軟件移植到 "port" 中,我們只要執(zhí)行下列指令即可輕松的安裝了。不過(guò)您必需先將所附光盤(pán)二 /ports/distfiles 目錄中的檔案復(fù)制到 /usr/ports/distfiles 中,或者先將光盤(pán) mount 進(jìn)來(lái),否則計(jì)算機(jī)必須先連上網(wǎng)絡(luò)喔!由于在 port 中 sudo 的安裝設(shè)定并未打開(kāi) sudo 執(zhí)行指令記錄,如果你希望它能將執(zhí)行 sudo 的 log 記下來(lái)的話,必須先編輯 /usr/ports/security/sudo/Makefile,將 CONFIGURE_ARGS 中的參數(shù) --disable-log-wrap 拿掉。

# cd /usr/ports/security/sudo
# make install clean

安裝完后,我們要先執(zhí)行 /usr/local/sbin/visudo 以設(shè)定 sudo 的設(shè)定檔 (/usr/loca/etc/sudoers)。以下簡(jiǎn)單說(shuō)明該設(shè)定檔如何設(shè)定,詳細(xì)說(shuō)明及范例請(qǐng)參考 /usr/local/etc/sudoers.sample

# Host alias specification(如果你只有一臺(tái)機(jī)器,可以不必設(shè))
    Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
    Host_Alias     SERVERS = master, mail, www, ns
    # User alias specification(把使用者分成群組,也可以不用分)
    User_Alias     PARTTIMERS = millert, mikef, dowdy
    User_Alias     WEBMASTERS = will, wendy, wim
    User_alias     BACKUP = tom, jack
    # Cmnd alias specification(把可以執(zhí)行的指令分成一個(gè)個(gè)群組)
    Cmnd_Alias     READ=/bin/ls,/bin/cat,/usr/bin/tail,/usr/bin/head
    Cmnd_Alias     BACKUP=/sbin/dump,/usr/bin/tar,/usr/bin/find, \
                      /usr/bin/cpio,/bin/cp,/sbin/mount,/bin/dd
    # User privilege specification(設(shè)定使用者的權(quán)限)
    root       ALL=(ALL) ALL
    %wheel     ALL = (ALL) ALL
    # 表示 jack 在 CUNET 中所有機(jī)器都可執(zhí)行指令群組中 BACKUP 指令
    jack       CUNETS = BACKUP
    # 表示使用者群組中 PARTTIMERS 群組的人,只能在 SERVERS
    #群組中的機(jī)器里執(zhí)行 READ 群組的指令
    PARTTIMERS SERVERS = READ

設(shè)定完后,使用者即可執(zhí)行 sudo <允許的指令> ,使用者只要輸入自己的密碼即可,不必知道 root 的密碼,而且 5 分鐘內(nèi)再次執(zhí)行 sudo 時(shí)不需再輸入密碼。如果你有打開(kāi) log 記錄功能,sudo 執(zhí)行成功或失敗的 log 都將被記錄到 /var/log/sudo.log 中。詳細(xì)說(shuō)明請(qǐng)閱讀說(shuō)明 man sudo。