【轉】Centos 建立一個新用戶 詳細講解

轉自:http://www.centoscn.com/CentOS/help/2013/0725/597.html

建立一個新用戶


  修改用戶的個人設置

文件目錄的權限設置

兩個重要文件:passwd與group

建立一個新用戶

建立一個新的用戶包括兩個步驟,第一步是使用useradd命令完成一個新用戶的初始化設置工作;第二步是用passwd爲這個新用戶設置密碼。例如,我們要給系統添加一個用戶叫floatboat,密碼爲fan2001z,那相關的操作是:

useradd floatboat <回車>

這時候系統沒有任何顯示。接着:

passwd floatboat <回車>

系統顯示:

Changing password for user floatboat

New UNIX password:

你輸入:

fan2001z<回車>

注意,由於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

而網管們還喜歡在裏面加上/usr/bin/passwd,這是爲了不然用戶通過控制檯或telnet登錄系統,卻可以使用修改帳戶密碼(比如在FTP裏用)。以及/bin/false,也就是不讓這個用戶登錄的意思嘍^&^,連FTP也不能用。

你也可以使用usermod命令修改shell信息,如下所示:

usermod -s /bin/bash floatboat

其中/bin/bash和floatboat應取相應的shell路徑文件名及用戶名。

還有一種情況,就是你爲用戶設置了一個空的shell(就是""),也就是說,這個用戶沒有shell。呵呵,絕對沒有在我還未曾見過,因爲這種用戶登錄後,系統還是會給它一個shell用的。不信你試試:

usermod -s "" floatboat

這種用戶根據系統的不同,會有一個sh或bash進行操作,我也沒有看出功能上和其它普通用戶登錄有什麼不同。

修改用戶所屬的默認組

這個功能也可以通過usermod命令來實現,使用-g參數,例如把floatboat的默認組改爲nobody,可以使用如下命令:

usermod -g nobody floatboat

nobody在類UNIX系統中一般都意味着沒有任何權限。

設置帳號有效期

如果使用了影子口令,則可以使用如下命令來修改一個帳號的有效期:

usermod -e MM/DD/YY username

例如把用戶floatboat的有效期定爲2001年12月31日:

usermod -e 12/31/01 floatboat

如果把該用戶的有效期設爲已經過去的時間,就可以暫時禁止該用戶登錄系統。

修改用戶的說明信息

修改用戶的說明信息,最簡單的方法莫過於直接修改/etc/passwd文件,找到對應的用戶記錄行,例如下列行:

floatboat:x:503:503::/home/floatboat:/bin/bash

你可以直接在第四個冒號和第五個冒號之間插入該用戶的說明就可以了。其實,很多用戶設置都可以在這修改,比如該行最後一部分/bin/bash就是用戶登錄shell的設置。關於這個/etc/passwd文件,我們後面將進一步的深入探討。

修改用戶主目錄

修改用戶的主目錄主要使用usermod命令的-d參數,例如:

usermod -d /www floatboat

這一行將floatboat的主目錄改到/www。如果想將現有主目錄的主要內容轉移到新的目錄,應該使用-m開關,如下所示:

usermod -d -m /www floatboat

文件目錄的權限

linux下,每一個文件、每一個目錄都有一個屬主,並針對用戶自己、用戶所在組、其它所有帳號(組)分別設定讀、寫、執行三種權限。例如,我(假定是webusers組的floatboat帳戶的擁有者)使用如下命令建立一個新的文件

touch mytestfile

然後我們使用ls -l mytestfile這一命令來查看這個文件的權限狀態(關於ls命令,可以查閱本站的命令查詢),可以得到如下的屏幕輸出顯示:

-rw-rw-r-- 1 floatboat webusers 0 Feb 6 21:37 mytestfile

輸出由空格分爲9個部分,我們比較關心第一、三、四個字段,分別表示文件權限屬性、文件所有者帳戶、文件所屬組。

◆使用chown命令修改文件的主人

當你新建立一個文件的時候,文件的所有者當然就是你了。這一事實只有超級用戶(比如說root)纔可以通過chown命令改變(例如chown otheruser mytestfile,把mytestfile文件的屬主改爲otheruser)。普通用戶不能把自己的文件“送”給別人,不然你把有特殊目的的程序給 了root怎麼辦?:)

chown命令的用法比較簡單。這裏我先假設你現在擁有超級用戶權限,那麼你就可以使用如下命令將一個文件“送給”floatboat了:

chown floatboat /home/floatboat/thefileisrootcreate.txt(假定該文件是由root創建的)

修改一個目錄的所有者也是類似的:

chown floatboat /home/newboat

當然,如果這個目錄還有子目錄及文件需要同時送給floatboat,chown也是支持-R參數的:

chown -R floatboat /home/newboat

如果你同時想修改文件/目錄所屬的組的話,你可以使用以下命令方便的達到目的:

chown -R floatboat.ftpusers /home/newboat

這樣,不但文件主人得到了修改,文件所屬的組也變成了ftpusers

◆修改文件的組屬性

文件所屬組你倒是可以改變,前提是:

 1、你的超級用戶。

2、你同時屬於兩個或兩個以上的組。

兩個條件你至少具備一個,你才能夠把文件所屬舊組變爲新組。使用如下的命令將當前目錄下所有html文件所屬的組改爲httpd:

chgrp httpd *.html

和chown命令一樣,chgrp也可以使用-R參數對一個目錄內的所有文件和子目錄進行遞歸的修改組屬性。

<提示>:你可以使用不帶參數的groups命令查看自己屬於哪個組。

文件權限的設定是我們這一小節討論的核心,我們主要介紹chmod命令的兩種用法。

◆使用訪問字符串設置文件目錄權限

正如前面所說的,每一個文件、目錄都針對用戶自己、用戶所在組、其它所有帳號(組)分別有讀、寫、執行三種權限及其組合。當一個普通用戶新建一個文件 的時候,它默認的訪問權限顯示就如我們剛纔所舉例子的第一個字段所示。總共十位字符“-rw-rw-r--”,第一位是目錄區分標誌,如果是d的話,表示 這是一個目錄。第二到四位分別表示文件所有者的讀(r:read)、寫(w:write)、執行(x:execute)屬性,第五到七位是文件所屬組的 讀、寫、執行權限,第八到第十位則是其它用戶的讀、寫、執行權限。如果對應的位是相應的字母,就是有這相應權限,否則爲“-”,表示沒有獲得這個許可。象 剛纔例子中的文件就是自己可讀寫,本組可讀寫,其它用戶可讀,所有的用戶(包括自己)都不能執行它。

我們的用u、g、o分別來指代用戶(user)、組(group)、其它帳戶(other),就可以方便的設置文件和目錄的權限了。當然,我們也可以用a來表示所有的這三項。

例如,我們要對所有perl的腳本文件設定權限,對所有用戶都可以讀和執行,文件所有者還允許寫許可,那麼我們可以使用如下命令:

chmod a+rx,u+w *.pl

注意:如果要使用多個訪問字符串,它們之間要用逗號隔開,各個許可字符串之間不允許有空格。正如上例所示。

如果要修改目錄中所有文件和子目錄的權限屬性,可以使用chmod提供的-R參數來遞歸修改。例如,下列命令將/www/site1目錄及其下面的子目錄的權限屬性設定爲所有者和組可讀、寫、執行,其它用戶不可訪問:

chmod -R a+rwx,o-rwd /www/site1

注意,不要輕易使用-R選項,這可能會帶來安全隱患。

使用字符串方便了理解,單輸入那麼多字母還是有點累,如果你對8進制有些概念的話,可以使用下面介紹的方法來做權限設置。

◆使用八進制數設置文件目錄權限

我們知道,在ls -l的輸出中,文件權限表示爲“-rw-rw-r--”,前一位只和是否爲目錄有關,其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和 “r--”,“-”代表無效“0”,其它字符代表有效“1”,那麼這個文件的權限就是“110”、“110”、“100”,把這個2進制串轉換成對應的8 進制數就是6、6、4,也就是說該文件的權限爲664(三位八進制數)。我們也可以使用類似這種三位八進制數來設定文件授權,如上邊兩個例子,就也可以寫 爲:

chmod 755 *.pl

chmod -R 770 /www/site1

是不是很簡潔?關鍵在於你能根據你需要設定的權限正確的選擇八進制數(利用八進制數的二進制表示可以非常輕易的做到這一點)。

◆讀、寫、執行的權限說明

1、所謂寫的權限,也就是對文件修改和刪除的權限。如果目錄的寫權限也對你開放了,則可以創建、刪除或修改該目錄下的任何文件或自目錄——即使該文件和子目錄並不屬於你。

2、對目錄有隻讀許可的用戶,不能用cd命令進入該目錄;還必須同時有執行許可纔可以進入該目錄。

3、必須同時擁有讀和執行權限纔可以使用ls這樣的程序列出目錄內容清單。

4、只對目錄有執行權限的用戶,想訪問該目錄下的文件有讀權限的文件,必須知道該文件名纔可以訪問。

兩個重要文件:passwd與group

在linux的安全機制裏,/etc/passwd與/etc/group這兩個文件佔着非常重要的地位。它們控制着linux的用戶和組一些重要設置。

◆/etc/passwd文件說明

下面是一個RHlinux裏普通的passwd文件的例子:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:

daemon:x:2:2:daemon:/sbin:

……

operator:x:11:0perator:/root:

games:x:12:100:games:/usr/games:

gopher:x:13:30:gopher:/usr/lib/gopher-data:

ftp:x:14:50:FTP User:/home/ftp:

nobody:x:99:99:Nobody:/:

xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false

named:x:25:25:Named:/var/named:/bin/false

postgres:x:26:26ostgreSQL Server:/var/lib/pgsql:/bin/bash

lanf:x:500:500::/home/hujm:/bin/bash

mysql:x:101:101:MySQL server:/var/lib/mysql:/bin/bash

imnotroot:x:0:0::/home/imnotroot:/bin/bash

在這個文件裏只有一個普通帳號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來分用戶的權力的。所以,這種情況無疑爲系統埋下了安全的炸彈。但是,當 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)更加敏感^_^。

再有一點應該注意,你統計一個組的組成員的時候,千萬別只記得看組成員列表哦,還應該查找默認登錄組也是這個組的用戶——它們可不一定在列表裏。

〈提示〉新組的增加可以使用groupadd newgroupname 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章