歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> UNIX用戶和基本的帳戶管理

UNIX用戶和基本的帳戶管理

日期:2017/3/1 18:13:40   编辑:關於Unix
修改帳戶   在UNIX® 的處理用戶帳戶的環境中有很多不同的命令可用. 最普通的命令如下,接下來是詳細使用它們的例子。

命令 摘要 adduser(8) 在命令行添加新用戶. rmuser(8) 在命令行刪除用戶. chpass(1) 一個靈活的用於修改用戶數據庫信息的工具. passwd(1) 一個用於修改用戶口令的簡單的命令行工具. pw(8) 一個強大靈活修改用戶帳戶的工具.

FreeBSD允許多個用戶同時使用計算機。當然,這些用戶中不是很多人同時坐在同一台計算機前,而是其他用戶可以通過網絡來使用同一台計算機以完成他塹墓ぷ鳌R褂孟低常懇桓鋈碩家幸桓稣駛А?

讀完這章,你將了解到:

在一個FreeBSD系統上不同用戶帳戶之間的區別。

如何添加用戶帳戶。

如何刪除用戶帳戶。

如何改變帳戶細節,如用戶的全名,或首選的shell。

如何在每個帳戶基礎上設置限制,來控制像內存,CPU時鐘這樣的資源。

如何使用組來使帳戶管理更容易。

在閱讀這章之前,你應當了解:

了解UNIX和FreeBSD的基礎知識(第3章)。

8.2介紹

所有訪問系統的用戶都是通過帳戶完成的,所以在FreeBSD系統中用戶和用戶帳戶的管理是非常重要的。

用戶名

用戶名在login:提示符的後面鍵入。用戶名對於一台計算機來講是唯一的。你不可以使用兩個相同的用戶名來登陸。有很多用來創建正確用戶名的規則,可以看看passwd的聯機手冊。你使用的用戶名通常需要8個或更少的小寫字母。

口令(password)

每個帳戶都有一個口令與它對應。口令可以是空的,這樣不需要口令就可以訪問系統。這通常不是一個好主意。每個帳戶都應當要有一個口令。

用戶ID (UID)

UID是系統用來識別用戶的0到65536之間的數字。FreeBSD使用UID來識別用戶——在工作以前,任何允許你指定一個用戶名的FreeBSD命令都會把它轉換成UID。這意味著你可以用不同的用戶名使用多個帳戶,但它們的UID是一樣的。FreeBSD會把這些帳戶認定是同一個用戶。

組ID (GID)

GID是用來識別用戶所在的組的0到65536之間的數字。組是一種基於用戶GID而不是它們的UID的用來控制用戶訪問資源的機制。這可以減少一些配置文件的大小。一個用戶也可以屬於多個組。

登陸類

登陸類是對組機制的擴展,當把系統分配給不同用戶時,它提供了額外的靈活性。

口令的定期改變

默認情況下,FreeBSD不會強迫用戶去改變他們的口令。你可以在每個用戶的基礎上強迫執行,當一個帳戶過期了,可以強迫一些或所有的用戶改變他們的口令。

帳戶到期了

默認情況下,FreeBSD不會終止帳戶。如果你正在創建帳戶,你要知道有一個有限的使用期限。例如,在學校裡,你會為每個學生設立一個帳戶,當帳戶到期了,你可以重新指定它。帳戶到期後,雖然帳戶的目錄和文件仍然存在,但帳戶已經不能再使用了。

用戶的全名

用戶名可以唯一地識別FreeBSD的帳戶,但不會反映用戶的全名。這些信息可能與帳戶是相關的。

主目錄(home)

主目錄是用戶用來啟動的目錄的完全路徑。一個通常的規則是把所有用戶的主目錄都放在/home/username下。用戶將會把他們的個人文件放在他們自己的主目錄下,他們可以在那兒創建任何目錄。

用戶shell

Shell提供了用戶用來操作系統的默認環境。有很多不同的shell,有經驗的用戶會根據他們的經驗來選擇。

有三種類型的帳戶:超級用戶、系統用戶和普通用戶。超級用戶帳戶通常叫做root,可以毫無限制地管理系統。系統用戶運行服務。最後,普通用戶帳戶給那些登陸系統,閱讀郵件等的人們使用。

8.3超級用戶帳戶

超級用戶帳戶通常叫做root,可以重新配置和管理系統,在收發郵件、系統檢查或編程時盡量不要使用root權限。

這是因為不像普通用戶帳戶,超級用戶能夠毫無限制地操作系統,超級用戶帳戶的濫用可能會引起無法想象的災難。普通的用戶帳戶不會由於出錯而破壞系統。所以通常要盡可能地使用普通帳戶,除非你需要額外的特權。

另外,在使用超級帳戶時要再三檢查命令,因為一個額外的空格或缺少某個字符的命令都可能會引起數據丟失。

所以,你在閱讀了這章後要做的第一件事是,在平時使用的時候,創建一個沒有特權的用戶帳戶。無論你使用的是多用戶還是單用戶的系統,這樣的申請都是相同的。在這一章的後面,我們將討論如何創建一個額外的帳戶和如何在普通用戶和超級用戶之間進行切換。

8.4系統帳戶

系統用戶是那些要使用諸如DNS,mail,web等服務的用戶。使用帳戶的原因就是為了安全。如果所有的服務都由超級用戶來運行,那他們就可以不受約束地做任何事情。系統用戶可以是後台程序、操作員、bind或新聞。系統管理員經常創建httpd來運行web服務器。

Nobody是普通的沒有特權的系統用戶。然而,絕大多數與用戶聯系很密切的服務是使用nobody的,記住這一點是非常重要的,因此用戶可能會變得很有特權。

8.5用戶帳戶

用戶帳戶是讓真實用戶訪問系統的主要方式。這些帳戶把用戶和環境分隔開,能阻止用戶破壞系統或其他用戶,在不影響其他用戶的情況下定置它們的環境。

每個人訪問你的系統必須要有他們自己的唯一帳戶。這允許你可以找到誰做了些什麼,阻止人們破壞其他用戶的設置和閱讀其他人的郵件等等。

每個用戶能夠設置他們自己的環境,以利於他們通過改變shell、編輯器、鍵盤綁定和語言等適應使用這個系統。

8.6修改帳戶

在UNIX的處理用戶帳戶的環境中有很多不同的命令可用。最普通的命令總結如下:

命 令
摘 要

adduser
被推薦的用於添加新用戶的命令行應用。

rmuser
被推薦的用於刪除新用戶的命令行應用。

chpass
一個靈活的用於修改用戶數據庫信息的工具。

passwd
用於修改用戶口令的簡單的命令行工具。

pw
一個強大而又靈活的修改用來修改用戶帳戶的工具。


8.6.1增加用戶

adduser是個簡單的增加新用戶的命令。它為用戶創建passwd和group文件。它也為新用戶創建一個主目錄,從/usr/share/skel拷貝進一個默認的配置文件(“dotfiles”),然後給新用戶發送一個帶歡迎信息的郵件。

要創建一個初始的配置文件,使用adduser -s -config_create。既然給普通用戶創建root帳戶是很危險的,所以下面我們配置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 zsh [sh]: zsh

Your default shell is: zsh -_ /usr/local/bin/zsh

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]: 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.

Don’t worry about mistakes. I will give you the chance later to correct any input.

Enter username [a-z0-9_-]: jru

Enter full name []: J. Random User

Enter shell csh date no sh tcsh zsh [zsh]:

Enter home directory (full path) [/home/jru]:

Uid [1001]:

Enter login class: default []:

Login group jru [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: 1001

Gid: 1001 (jru)

Class:

Groups: jru wheel

HOME: /home/jru

Shell: /usr/local/bin/zsh

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設置成zsh(另一個可以在ports collection中找到的shell),關閉歡迎郵件。然後,保存配置,接著創建一個jru的帳戶,並且確信jru在wheel組裡面。(它可能假定已經用su轉換成了root)。

注意:你輸入的口令是不會顯示出來的,而只會顯示星號。確保輸入兩次口令時,不要輸錯。從現在起,只要使用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.

#

8.6.3 chpass

Chpass可以改變用戶的口令,shell和個人信息的數據庫信息。只有超級用戶才能改變其他用戶的信息。除了可選擇的用戶名,不需要任何選項,chpass顯示一個包含用戶信息的編輯器,而且可以試圖改變在用戶數據庫中的信息。

例如8-3.用超級用戶交互式執行chpass

#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. 用普通用戶交互式執行chpass

#Changing user database information for jru.

Shell: /usr/local/bin/tcsh

Full Name: J. Random User

Office Location:

Office Phone:

Home Phone:

Other information:

注意:chfn和chsh只連接到chpass。同樣的是,ypchpass,ypchfn和ypchsh。NIS支持是自動的,所以不一定要在命令前指定yp。如果你感到有點糊塗,請不要著急,NIS將在第17章講到。

8.6.4 passwd

passwd是改變你自己作為一個普通用戶的口令或另一個作為超級用戶口令的常用方法。

注意:在改變口令前,用戶必須鍵入原來的口令。當用戶離開他們的控制台時,可以阻止一個沒有經過認證的人改變他們的口令。

例如8-5. 改變你的口令

% passwd

Changing local password for jru.

Old password:

New password:

Retype new password:

passwd: updating the database...

passwd: done

例如8-6. 改變另一個用戶的口令

# passwd jru

Changing local password for jru.

New password:

Retype new password:

passwd: updating the database...

passwd: done

注意:就像chpass一樣,yppasswd只是一個到passwd的鏈接,所以NIS用任何一個命令都能工作。

8.6.5 pw

pw是一個用來創建、刪除、修改、顯示用戶和組的命令行工具,它還有系統用戶和組文件編輯器的功能。pw有一個非常強大的命令行設置選項,但新用戶可能會覺得它比這兒講的其他命令要復雜得多。

8.7受限制的用戶

如果你運行一個多用戶系統,你不信任的用戶對系統所作的修改可能會損壞你的系統。FreeBSD提供了系統管理員限制用戶訪問系統資源的方法。這些限制通常被分成兩種:磁盤配額和其他資源限制。

磁盤配額為系統管理員提供了一個告訴文件系統給用戶使用多少磁盤空間的方法。而且,它還提供了一種快速檢查用戶所使用的磁盤數量而不需要時刻計算的方法。配額將在第12.5節討論。

其他資源限制包括限制CPU、memory的數量和用戶可能會使用的其他資源。這些是通過對登陸進行分類來完成的,下面將作討論。

登陸的類由/etc/login.conf文件來定義。比較精確的表述超出了本章的范圍,但login.conf的聯機手冊會有比較細致的描述。

資源限制與普通的登陸限制是有區別的。首先,對於每一種限制,有軟限制和硬限制之分。一個軟限制可能被用戶或應用程序調整過了,但不會超越硬限制。越往後可能會越低,但不會升高。第二,絕大多數資源限制會分配每個進程給一個特殊的用戶。

下面就是絕大多數資源限制的例子:

coredumpsize

很明顯,由程序產生的核心文件大小的限制在磁盤使用上是從屬於其他限制的(如,文件大小,或磁盤配額)。然而,既然用戶自己無法產生核心文件,而且經常不刪除它們,設置這個可以減少由於一個大型應用程序的崩潰所造成的大量磁盤空間的浪費。

cputime

這是一個用戶程序所能消耗掉的最大的CPU時鐘數量。一些不理想的進程會被內核殺掉。

注意:這是一個有關CPU消耗的時鐘限制問題,不是在使用top和ps命令時屏幕上顯示的CPU消耗的百分比。

filesize

這是用戶可以處理的一個文件的最大值。不像磁盤配額,這個限制是對單個文件強制執行的。

maxproc

這是一個用戶可以運行的最大的進程數。這包括前台和後台進程。很明顯,這不可能比系統指定的限制要大。當然,如果設置得太小可能會削弱用戶的處理能力:可能需要多次登陸或執行多個管道。一些任務,像編譯一些大的程序,也可能會產生很多進程。(像make,cc,和其他一些預處理程序)。

memorylocked

這是一個進程可能會被鎖定到主內存中的最大內存數量。一些比較大型的程序,像amd ,在遇到問題時,他們得到的巨大交換量無法傳遞給系統進行處理。

memoryuse

這是在給定時間內一個進程可能消耗的最大的內存數量。它包括核心內存和交換內存。在限制內存消耗方面,這個不是一個完全的限制,但它是一個好的開始。

openfiles

這是一個進程可以打開的最大的文件數。在FreeBSD中,文件也可以被用來表現套接字和IPC通道。然而,注意不要把這個設置得太小。對這個更深入的限制是由kern.maxfiles sysctl來定義的。

sbsize

這是網絡內存數量的限制。這可以通過創建許多套接字來生成一些針對老式的DoS的攻擊的回應,但它通常被用來限制網絡通信。

stacksize

這是一個進程堆棧可能達到的最大值。這個不能單獨地限制一個程序可能使用的內存數量,而是要和其他的限制一起配合。

在設置資源限制時,有一些其他的事情需要記住。下面是一些通常的技巧,建議和各種注意事項。

系統啟動的進程會被指派給守護程序的登陸類。

雖然來自系統的/etc/login.conf文件是一個對於絕大多數的限制作合理配置的資源文件,但只有你,系統管理員,才知道什麼對你的系統才是最適當的。限制設得太高可能會把你的系統開放得太大而被人濫用,而設得太低可能會處理時效率很低。

X視窗系統的用戶可能要比其他用戶使用更多的資源。X11本身就要使用很多資源,但它也可以讓用戶同時運行更多的程序。

記住許多限制會被應用於單獨的處理進程,不是所有的用戶。例如,設置openfiles為50,意味著用戶運行的每個進程可能最高只能打開50個文件。然而,用戶可以打開的文件的總的大小是根據maxproc值逐步增加的openfiles值。這也會影響內存的消耗。有關資源限制,登陸類的更深入信息可以看看相關的聯機手冊:cap_mkdb,getrlimit,login.conf。

8.8私有化用戶

本地化是由系統管理員或用戶設置的一個環境,它可以用來調整不同的語言,字符設置,時鐘標准等。這將在第13章本地化-I18N/L10N使用與設置作詳細討論。

8.9組

組簡單來講就是許多用戶的列表。組可以通過它們的組名和編號來識別。在FreeBSD(和其他絕大多數的Unix系統)中,這兩個要素通常被內核用來決定一個允許被執行的進程是否是它的用戶ID,還是它所屬的組的列表。不像用戶ID,一個進程有一個與它相關聯的組的列表。你可能聽說過一些有關一個用戶或進程的組ID的事情。在大多數情況下,這只意味著在列表中的第一個組。

與組ID地圖對應的組名在/etc/group中。這是一個用四個冒號來界定的文本文件。第一部分是組名,第二部分是加密的口令,第三部分是組ID,第四部分是以逗號分割的成員列表。它可以用手工的方式進行編輯。對於更完整的語法描述,可以參看group的聯機手冊。如果你不想手工編輯/etc/group,你可以使用pw命令來增加和編輯組。例如,要增加一個叫teamtwo的組,確信它存在:

例如8-7. 使用pw增加一個組:

# pw groupadd teamtwo

# pw groupshow teamtwo

teamtwo:*:1100:

上面的1100數字是組teamtwo的組ID。在這兒,teamtwo沒有成員,那它也就沒有多大用處。

例如8-8.使用pw在組中添加一些成員:

# pw groupmod teamtwo -M jru

# pw groupshow teamtwo

teamtwo:*:1100:jru

使用-M參數是為了用逗號劃分開一個組成員中的用戶列表。你可能知道口令文件也會為每個用戶包含一個組。當使用pw來詢問組成員的時候,在口令文件中的組會自動被添加到組列表中,而不會出現在成員列表中。如果你想知道一個用戶屬於哪個組,可以使用id命令:

例如8-9.使用id來決定組成員

% id jru

uid=1001(jru) gid=1001(jru) groups=1001(jru),1100(teamtwo)

正如你所看到的,jru是組jru和teamtwo的成員。

有關pw的更多信息,可以參看它的聯機手冊,更多有關/etc/group格式的信息,可參考group的聯機手冊。

Copyright © Linux教程網 All Rights Reserved