建立一個新的用戶包括兩個步驟,第一步是使用useradd命令完成一個新用戶的初始化設置工作;第二步是用passwd為這個新用戶設置密碼。例如,我們要給系統添加一個用戶叫floatboat ,密碼為lan2010,那相關的操作是:
useradd floatboat -d /u01/Lanlp<回車>
這時候系統沒有任何顯示。接著:
passwd floatboat <回車>
系統顯示:
Changing password for user floatboat
New UNIX password:
你輸入:
lan2010<回車>
注意,由於linux並不采用類似windows的密碼回顯(顯示為*號)——為避免你輸入密碼時被人注意到有多少位——所以,輸入的這些字符你是看不見的。
系統顯示:
Retype new UNIX password:
你再重新輸入一次密碼,然後回車確認,這時系統會顯示:
passwd:all authentication tokens updated successfully
表示你修改密碼成功了。
到這裡,新用戶的創建工作就算完成了。
下面,我們再補充一些有關增加新用戶的常識:
1、useradd所做的初始化操作已經包括在/home目錄下為floatboat帳號建立一個名為floatboat的主目錄。如果你不想使用這個缺省的目錄,而希望把他的主目錄放在/home/goal裡(還放在/home下,只是一種良好的習慣,沒有其他什麼特別的要求),可以使用useradd的參數-d,命令如下:
useradd -d /home/goal floatboat
2、useradd的初始化操作還包括為用戶單獨建立一個與用戶名同名的組(floatboat組)。這叫用戶私有組的機制,與默認組機制相對應。對用戶分組一是方便管理,二是可以明確權限。復雜的我們將在以後的深入內容中探討。我們如果想讓此用戶加入一個已有的組的話,可以使用-g參數。例如我們想讓floatboat加入webusers組,那麼可以使用以下命令:
useradd -g webusers floatboat
同樣的,我們還可以使用-G參數使他同時加入多個組,例如webusers和ftpusers:
useradd -G ftpusers,webusers floatboat
3、passwd命令為一個用戶設置密碼,但它實質上是一個修改密碼的程序。只有超級用戶和用戶自己可以修改密碼,其它的普通用戶沒有給他修改密碼的 權利。用戶密碼的組成要盡量的復雜,最好包括字母、數字和特殊符號,而且最好設成6位以上。太短passwd程序不允許,只是單純的字母或單純的數 字,passwd也會有意見。你都會看見passwd出現的提示的,不要害怕,仔細看看到底它是怎麼說的:)
4、你在增加一個新用戶的時候,也可以設置用戶登錄的shell。缺省的,系統提供了/bin/bash。你如果非要指定的話,可以使用-s參數就可以了。例如
useradd -d /www -s /usr/bin/passwd floatboat
注意,這些參數是可以一塊使用的,如上例所示,它表示增加新用戶,並把其主目錄路徑設置在/www,登錄的shell為/usr/bin/passwd。關於shell的更詳細的說明,請參考下面的修改用戶的個人設置相關內容。
5、刪除一個用戶可以使用userdel命令,直接帶用戶名做參數就可以了。
修改用戶的設置
對現有用戶的修改,比較常用的主要是修改密碼(使用passwd就好了),修改用戶的登錄shell,修改用戶所屬的默認組,設置帳號有效期,修改用戶的說明信息等等,偶爾也會用到修改用戶主目錄。
修改用戶的登錄shell
使用chsh命令可以修改自己的shell,只有超級用戶才能用chsh username為其它用戶修改shell設置。注意,指定的shell必須是列入/etc/shells文件中的shell,否則該用戶將不能登陸。
一般,比較常見的shells文件包括下面這些shell:
/bin/bash2
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
在這個文件裡只有一個普通帳號lanf。其它都是系統或系統服務的進程需要的帳號,包括我們非常熟悉的root這個超級用戶。在passwd的文件裡,每一行被冒號(":")分成7個部分,分別是:
[用戶名]:[密碼]:[UID]:[GID]:[身份描述]:[主目錄]:[登錄shell]
其中:
⒈[用戶名]是passwd文件裡各記錄行唯一的有"唯一性"要求的域。也就是說每一行的第一個區域的內容都不能相同,其它區域就無所謂了。
⒉[密碼]區域在以前,保存著一個經過不可逆的哈希算法進行DES加密的13位字符,但不包括單引號和冒號。這13位字符中,前兩位是密鑰,在加密的 時候隨機生成的。由於這個字符串不包括單引號,所以以前有一種不修改密碼又禁止用戶登錄的方式就是在密碼前面加一個單引號。值得注意的是,現在由於使用了 shadow口令,在密碼區域只有一個x字符。
⒊[UID]雖然是系統用來標志文件歸屬,確定各種權限的標志,但這個區域的內容並不要求唯一的。比較常見而又與安全問題相關的一個例子是有多個 UID和GID均為0的用戶帳號。注意到在該文件最後一行還有一個UID和GID為0的用戶imnotroot,雖然它聲稱自己不是root,但是它卻有 和root完全相同的權限,因為系統並非根據[用戶名],而是根據UID和GID來分用戶的權力的。所以,這種情況無疑為系統埋下了安全的zhadan。但是,當 imnorroot做鎖定屏幕等操作的時候,如果它的密碼和root的不一樣,它將無法解鎖,因為系統只是查到第一個UID為0的用戶(自然是root) 後,就不在往下查找了——它當UID也是唯一的。
⒋[GID]用戶默認的組ID,這個ID可以在文件/etc/group裡查到對應的組名。
⒌[身份描述]:就是用戶的身份說明,默認的是無任何說明,可人工添加。
⒍[主目錄]:用戶的主目錄,可以使用前面介紹的命令修改。
⒎[登錄shell]:用戶登錄時系統提供的shell,請參考前面的有關內容。
<注意>:[UID]和[GID]小於500的一般都是系統自己保留,不做普通用戶和組的標識的,所以新增加的用戶和組一般都是UID和GID大於500的。
◆/etc/group文件說明
下面是RH的一個group文件的例子:
root:x:0:root,hujm,hjm
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
……
hujm:x:503:root,mynoshell,hjm
mysql:x:101:
mynoshell:x:505:
ftpusers:x:506:
它總共分四個部分:
[組名]:[密碼域]:[GID]:[組員列表]
意思非常明顯,需要說明一下的是,由於組一般都不用密碼保護,所以雖然看起來密碼域有個X字符,其實那只表示使用了SHADOW(對應文件為 gshadow)。組員列表用逗號分隔各個帳號。另外,一個組的組員如果默認登錄組就是它的話,那麼在組員列表裡將不顯示這個組員的帳號,例如用如下命令 增加的用戶:
useradd -g ftpusers floatboat
在/etc/group文件裡ftpusers的組員列表將不顯示這個組員(真是失敗),而只是在passwd文件中的GID被設置為506。而使用如下命令:
usermod -G ftpusers,mysql,webusers floatboat
就可以看見相關的組後邊加上了floatboat帳號。當然,你可以直接用vi來直接編輯這個文件。
group文件和passwd文件是通過GID聯系在一起的,這有點象關系數據庫。根據passwd文件中一個帳戶的GID,可以在group文件中 找到對應的組名。如果采用了用戶私有組機制的話,那麼一般新增一個帳號,就會有對應的一個與帳號同名的組增加到group文件中。雖然這時passwd文 件中具有唯一性的[用戶名]字段和group文件中具有唯一性的[組名]字段一樣,並不代表著它們是通過這兩個字段形成一一對應的關系的。千萬別忘記,系 統對數字(UID,GID)更加敏感.