?
參考:Ubuntu用戶及用戶組管理命令
1. Linux 的賬號與群組
管理員的工作中,相當重要的一環(huán)就是『管理賬號』啦!因為整個系統(tǒng)都是你在管理的, 并且所有一般用戶的賬號申請,都必須要透過你的協(xié)助才行!所以你就必須要了解一下如何管理好一個服務(wù)器主機的賬號啦! 在管理 Linux 主機的賬號時,我們必須先來了解一下 Linux 到底是如何辨別每一個使用者的!

雖然我們登陸 Linux 主機的時候,輸入的是我們的賬號,但是其實 Linux 主機并不會直接認識你的『賬號名稱』的,他僅認識 ID 啊 (ID 就是一組號碼啦)。 由于計算機僅認識 0 與 1,所以主機對于數(shù)字比較有概念的;至于賬號只是為了讓人們?nèi)菀子洃浂选?而你的 ID 與賬號的對應就在 /etc/passwd 當中哩。
Tips:
如果你曾經(jīng)在網(wǎng)絡(luò)上下載過 tarball 類型的文件, 那么應該不難發(fā)現(xiàn),在解壓縮之后的文件中,文件擁有者的字段竟然顯示『不明的數(shù)字』?奇怪吧?這沒什么好奇怪的,因為 Linux 說實在話,他真的只認識代表你身份的號碼而已! |
![]() |
那么到底有幾種 ID 呢?還記得我們在 第六章 內(nèi)有提到過, 每一個文件都具有『擁有人與擁有群組』的屬性嗎?沒錯啦~每個登陸的使用者至少都會取得兩個 ID ,一個是使用者 ID (User ID ,簡稱 UID)、一個是群組 ID (Group ID ,簡稱 GID)。
?
那么文件如何判別他的擁有者與群組呢?其實就是利用 UID 與 GID 啦!每一個文件都會有所謂的擁有者 ID 與擁有群組 ID ,當我們有要顯示文件屬性的需求時,系統(tǒng)會依據(jù) /etc/passwd 與 /etc/group 的內(nèi)容, 找到 UID / GID 對應的賬號與組名再顯示出來!我們可以作個小實驗,你可以用 root 的身份 vi /etc/passwd ,然后將你的一般身份的使用者的 ID 隨便改一個號碼,然后再到你的一般身份的目錄下看看原先該賬號擁有的文件,你會發(fā)現(xiàn)該文件的擁有人變成了 『數(shù)字了』呵呵!這樣可以理解了嗎?來看看底下的例子:
?
# 1. 先察看一下,系統(tǒng)里面有沒有一個名為 dmtsai 的用戶? [root@www ~]# grep 'dmtsai' /etc/passwd dmtsai:x:503:504::/home/dmtsai:/bin/bash <==是有這個賬號喔! [root@www ~]# ll -d /home/dmtsai drwx------ 4 dmtsai dmtsai 4096 Feb 6 18:25 /home/dmtsai # 瞧一瞧,使用者的字段正是 dmtsai 本身喔! # 2. 修改一下,將剛剛我們的 dmtsai 的 503 UID 改為 2000 看看: [root@www ~]# vi /etc/passwd ....(前面省略).... dmtsai:x:2000:504::/home/dmtsai:/bin/bash <==修改一下特殊字體部分,由 503 改過來 [root@www ~]# ll -d /home/dmtsai drwx------ 4 503 dmtsai 4096 Feb 6 18:25 /home/dmtsai # 很害怕吧!怎么變成 503 了?因為文件只會記錄數(shù)字而已! # 因為我們亂改,所以導致 503 找不到對應的賬號,因此顯示數(shù)字! # 3. 記得將剛剛的 2000 改回來! [root@www ~]# vi /etc/passwd ....(前面省略).... dmtsai:x:503:504::/home/dmtsai:/bin/bash <==趕緊改回來!?
?
你一定要了解的是,上面的例子僅是在說明 UID 與賬號的對應性, 在一部正常運行的 Linux 主機環(huán)境下,上面的動作不可隨便進行 , 這是因為系統(tǒng)上已經(jīng)有很多的數(shù)據(jù)被創(chuàng)建存在了,隨意修改系統(tǒng)上某些賬號的 UID 很可能會導致某些程序無法進行,這將導致系統(tǒng)無法順利運行的結(jié)果。 因為權(quán)限的問題啊!所以,了解了之后,請趕快回到 /etc/passwd 里面,將數(shù)字改回來喔!

Linux 系統(tǒng)上面的用戶如果需要登陸主機以取得 shell 的環(huán)境來工作時,他需要如何進行呢? 首先,他必須要在計算機前面利用 tty1~tty7 的終端機提供的 login 接口,并輸入賬號與口令后才能夠登陸。 如果是透過網(wǎng)絡(luò)的話,那至少使用者就得要學習 ssh 這個功能了 (服務(wù)器篇再來談)。 那么你輸入賬號口令后,系統(tǒng)幫你處理了什么呢?
-
先找尋 /etc/passwd 里面是否有你輸入的賬號?如果沒有則跳出,如果有的話則將該賬號對應的 UID 與 GID (在 /etc/group 中) 讀出來,另外,該賬號的家目錄與 shell 配置也一并讀出;
-
再來則是核對口令表啦!這時 Linux 會進入 /etc/shadow 里面找出對應的賬號與 UID,然后核對一下你剛剛輸入的口令與里頭的口令是否相符?
- 如果一切都 OK 的話,就進入 Shell 控管的階段啰!
大致上的情況就像這樣,所以當你要登陸你的 Linux 主機的時候,那個 /etc/passwd 與 /etc/shadow 就必須要讓系統(tǒng)讀取啦 (這也是很多攻擊者會將特殊賬號寫到 /etc/passwd 里頭去的緣故),所以呢,如果你要備份 Linux 的系統(tǒng)的賬號的話,那么這兩個文件就一定需要備份才行呦!
由上面的流程我們也知道,跟使用者賬號有關(guān)的有兩個非常重要的文件,一個是管理使用者 UID/GID 重要參數(shù)的 /etc/passwd ,一個則是專門管理口令相關(guān)數(shù)據(jù)的 /etc/shadow 啰!那這兩個文件的內(nèi)容就非常值得進行研究啦! 底下我們會簡單的介紹這兩個文件,詳細的說明可以參考 man 5 passwd 及 man 5 shadow (
注1
)。
- /etc/passwd 文件結(jié)構(gòu)
這個文件的構(gòu)造是這樣的: 每一行都代表一個賬號,有幾行就代表有幾個賬號在你的系統(tǒng)中! 不過需要特別留意的是,里頭很多賬號本來就是系統(tǒng)正常運行所必須要的,我們可以簡稱他為系統(tǒng)賬號, 例如 bin, daemon, adm, nobody 等等,這些賬號請不要隨意的殺掉他呢! 這個文件的內(nèi)容有點像這樣:
?
[root@www ~]# head -n 4 /etc/passwd root:x:0:0:root:/root:/bin/bash <==等一下做為底下說明用 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin?
?
我們先來看一下每個 Linux 系統(tǒng)都會有的第一行,就是 root 這個系統(tǒng)管理員那一行好了, 你可以明顯的看出來,每一行使用『:』分隔開,共有七個咚咚,分別是:
-
賬號名稱
:
就是賬號啦!用來對應 UID 的。例如 root 的 UID 對應就是 0 (第三字段);
-
口令
:
早期 Unix 系統(tǒng)的口令就是放在這字段上!但是因為這個文件的特性是 所有的程序都能夠讀取 ,這樣一來很容易造成口令數(shù)據(jù)被竊取, 因此后來就將這個字段的口令數(shù)據(jù)給他改放到 /etc/shadow 中了。所以這里你會看到一個『 x 』,呵呵!
-
UID
:
這個就是使用者標識符啰!通常 Linux 對于 UID 有幾個限制需要說給您了解一下:
id 范圍 該 ID 使用者特性 0
(系統(tǒng)管理員)當 UID 是 0 時,代表這個賬號是『系統(tǒng)管理員』! 所以當你要讓其他的賬號名稱也具有 root 的權(quán)限時,將該賬號的 UID 改為 0 即可。 這也就是說,一部系統(tǒng)上面的系統(tǒng)管理員不見得只有 root 喔! 不過,很不建議有多個賬號的 UID 是 0 啦~ 1~499
(系統(tǒng)賬號)保留給系統(tǒng)使用的 ID,其實 除了 0 之外,其他的 UID 權(quán)限與特性并沒有不一樣 。默認 500 以下的數(shù)字讓給系統(tǒng)作為保留賬號只是一個習慣。
由于系統(tǒng)上面啟動的服務(wù)希望使用較小的權(quán)限去運行,因此不希望使用 root 的身份去運行這些服務(wù), 所以我們就得要提供這些運行中程序的擁有者賬號才行。這些系統(tǒng)賬號通常是不可登陸的, 所以才會有我們在 第十一章 提到的 /sbin/nologin 這個特殊的 shell 存在。
根據(jù)系統(tǒng)賬號的由來,通常系統(tǒng)賬號又約略被區(qū)分為兩種:
1~99:由 distributions 自行創(chuàng)建的系統(tǒng)賬號;
100~499:若用戶有系統(tǒng)賬號需求時,可以使用的賬號 UID。500~65535
(可登陸賬號)給一般使用者用的。事實上,目前的 linux 核心 (2.6.x 版)已經(jīng)可以支持到 4294967295 (2^32-1) 這么大的 UID 號碼喔!
上面這樣說明可以了解了嗎?是的, UID 為 0 的時候,就是 root 呦!所以請?zhí)貏e留意一下你的 /etc/passwd 文件!
-
GID
:
這個與 /etc/group 有關(guān)!其實 /etc/group 的觀念與 /etc/passwd 差不多,只是他是用來規(guī)范組名與 GID 的對應而已!
-
用戶信息說明欄
:
這個字段基本上并沒有什么重要用途,只是用來解釋這個賬號的意義而已!不過,如果您提供使用 finger 的功能時, 這個字段可以提供很多的信息呢!本章后面的 chfn 命令會來解釋這里的說明。
-
家目錄
:
這是用戶的家目錄,以上面為例, root 的家目錄在 /root ,所以當 root 登陸之后,就會立刻跑到 /root 目錄里頭啦!呵呵! 如果你有個賬號的使用空間特別的大,你想要將該賬號的家目錄移動到其他的硬盤去該怎么作? 沒有錯!可以在這個字段進行修改呦!默認的用戶家目錄在 /home/yourIDname
-
Shell
:
我們在 第十一章 BASH 提到很多次,當用戶登陸系統(tǒng)后就會取得一個 Shell 來與系統(tǒng)的核心溝通以進行用戶的操作任務(wù)。那為何默認 shell 會使用 bash 呢?就是在這個字段指定的啰! 這里比較需要注意的是,有一個 shell 可以用來替代成讓賬號無法取得 shell 環(huán)境的登陸動作!那就是 /sbin/nologin 這個東西!這也可以用來制作純 pop 郵件賬號者的數(shù)據(jù)呢!
?
- /etc/shadow 文件結(jié)構(gòu)
我們知道很多程序的運行都與權(quán)限有關(guān),而權(quán)限與 UID/GID 有關(guān)!因此各程序當然需要讀取 /etc/passwd 來了解不同賬號的權(quán)限。 因此 /etc/passwd 的權(quán)限需配置為 -rw-r--r-- 這樣的情況 , 雖然早期的口令也有加密過,但卻放置到 /etc/passwd 的第二個字段上!這樣一來很容易被有心人士所竊取的, 加密過的口令也能夠透過暴力破解法去 try and error (試誤) 找出來!
?
因為這樣的關(guān)系,所以后來發(fā)展出將口令移動到 /etc/shadow 這個文件分隔開來的技術(shù), 而且還加入很多的口令限制參數(shù)在 /etc/shadow 里頭呢!在這里,我們先來了解一下這個文件的構(gòu)造吧! 鳥哥的 /etc/shadow 文件有點像這樣:
?
[root@www ~]# head -n 4 /etc/shadow root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: <==底下說明用 bin:*:14126:0:99999:7::: daemon:*:14126:0:99999:7::: adm:*:14126:0:99999:7:::?
?
基本上, shadow 同樣以『:』作為分隔符,如果數(shù)一數(shù),會發(fā)現(xiàn)共有九個字段啊,這九個字段的用途是這樣的:
-
賬號名稱
:
由于口令也需要與賬號對應啊~因此,這個文件的第一欄就是賬號,必須要與 /etc/passwd 相同才行!
-
口令
:
這個字段內(nèi)的數(shù)據(jù)才是真正的口令,而且是 經(jīng)過編碼的口令 (加密) 啦! 你只會看到有一些特殊符號的字母就是了!需要特別留意的是,雖然這些加密過的口令很難被解出來, 但是『很難』不等于『不會』,所以,這個文件的默認權(quán)限是『-rw-------』或者是『-r--------』,亦即只有 root 才可以讀寫就是了!你得隨時注意,不要不小心更動了這個文件的權(quán)限呢!
另外,由于各種口令編碼的技術(shù)不一樣,因此不同的編碼系統(tǒng)會造成這個字段的長度不相同。 舉例來說,舊式的 DES 編碼系統(tǒng)產(chǎn)生的口令長度就與目前慣用的 MD5 不同( 注2 )!MD5 的口令長度明顯的比較長些。由于固定的編碼系統(tǒng)產(chǎn)生的口令長度必須一致,因此『 當你讓這個字段的長度改變后,該口令就會失效(算不出來) 』。 很多軟件透過這個功能, 在此字段前加上 ! 或 * 改變口令字段長度,就會讓口令『暫時失效』了。
-
最近更動口令的日期
:
這個字段記錄了『更動口令那一天』的日期,不過,很奇怪呀!在我的例子中怎么會是 14126 呢?呵呵,這個是因為計算 Linux 日期的時間是以 1970 年 1 月 1 日作為 1 而累加的日期,1971 年 1 月 1 日則為 366 啦! 得注意一下這個數(shù)據(jù)呦!上述的 14126 指的就是 2008-09-04 那一天啦!了解乎? 而想要了解該日期可以使用本章后面 chage 命令的幫忙!至于想要知道某個日期的累積日數(shù), 可使用如下的程序計算:[root@www ~]# echo $(($(date --date="2008/09/04" +%s)/86400+1)) 14126
?
上述命令中,2008/09/04 為你想要計算的日期,86400 為每一天的秒數(shù), %s 為 1970/01/01 以來的累積總秒數(shù)。 由于 bash 僅支持整數(shù),因此最終需要加上 1 補齊 1970/01/01 當天。
-
口令不可被更動的天數(shù)
:(與第 3 字段相比)
第四個字段記錄了:這個賬號的口令在最近一次被更改后需要經(jīng)過幾天才可以再被變更!如果是 0 的話, 表示口令隨時可以更動的意思。這的限制是為了怕口令被某些人一改再改而設(shè)計的!如果配置為 20 天的話,那么當你配置了口令之后, 20 天之內(nèi)都無法改變這個口令呦!
-
口令需要重新變更的天數(shù)
:(與第 3 字段相比)
經(jīng)常變更口令是個好習慣!為了強制要求用戶變更口令,這個字段可以指定在最近一次更改口令后, 在多少天數(shù)內(nèi)需要再次的變更口令才行。 你必須要在這個天數(shù)內(nèi)重新配置你的口令,否則這個賬號的口令將會『變?yōu)檫^期特性』 。 而如果像上面的 99999 (計算為 273 年) 的話,那就表示,呵呵,口令的變更沒有強制性之意。
-
口令需要變更期限前的警告天數(shù)
:(與第 5 字段相比)
當賬號的口令有效期限快要到的時候 (第 5 字段),系統(tǒng)會依據(jù)這個字段的配置,發(fā)出『警告』言論給這個賬號,提醒他『再過 n 天你的口令就要過期了,請盡快重新配置你的口令呦!』,如上面的例子,則是口令到期之前的 7 天之內(nèi),系統(tǒng)會警告該用戶。
-
口令過期后的賬號寬限時間(口令失效日)
:(與第 5 字段相比)
口令有效日期為『升級日期(第3字段)』+『重新變更日期(第5字段)』,過了該期限后用戶依舊沒有升級口令,那該口令就算過期了。 雖然口令過期但是該賬號還是可以用來進行其他工作的,包括登陸系統(tǒng)取得 bash 。 不過如果口令過期了, 那當你登陸系統(tǒng)時,系統(tǒng)會強制要求你必須要重新配置口令才能登陸繼續(xù)使用喔,這就是口令過期特性 。
那這個字段的功能是什么呢?是在口令過期幾天后,如果使用者還是沒有登陸更改口令,那么這個賬號的口令將會『失效』, 亦即該賬號再也無法使用該口令登陸了。要注意 口令過期與口令失效并不相同 。
-
賬號失效日期
:
這個日期跟第三個字段一樣,都是使用 1970 年以來的總?cè)諗?shù)配置。這個字段表示: 這個賬號在此字段規(guī)定的日期之后,將無法再使用 。 就是所謂的『賬號失效』,此時不論你的口令是否有過期,這個『賬號』都不能再被使用! 這個字段會被使用通常應該是在『收費服務(wù)』的系統(tǒng)中,你可以規(guī)定一個日期讓該賬號不能再使用啦!
-
保留
:
最后一個字段是保留的,看以后有沒有新功能加入。
舉個例子來說好了,假如我的 dmtsai 這個用戶的口令欄如下所示:
?
dmtsai:$1$vyUuj.eX$omt6lKJvMcIZHx4H7RI1V.:14299:5:60:7:5:14419:?
?
這表示什么呢?先要注意的是 14299 是 2009/02/24 。所以 dmtsai 這個用戶的口令相關(guān)意義是:
-
由于口令幾乎僅能單向運算(由明碼計算成為口令,無法由口令反推回明碼),因此由上表的數(shù)據(jù)我們
無法得知 dmstai 的實際口令明文
;
-
此賬號最近一次更動口令的日期是 2009/02/24 (14299);
-
能夠再次修改口令的時間是 5 天以后,也就是
2009/03/01 以前 dmtsai 不能修改自己的口令
;如果用戶還是嘗試要更動自己的口令,系統(tǒng)就會出現(xiàn)這樣的信息:
You must wait longer to change your password passwd: Authentication token manipulation error
?畫面中告訴我們:你必須要等待更久的時間才能夠變更口令之意啦!
-
由于口令過期日期定義為 60 天后,亦即累積日數(shù)為: 14299+60=14359,經(jīng)過計算得到此日數(shù)代表日期為 2009/04/25。 這表示:『
使用者必須要在 2009/03/01 到 2009/04/25 之間的 60 天限制內(nèi)去修改自己的口令,若 2009/04/25 之后還是沒有變更口令時,該口令就宣告為過期
』了!
-
警告日期設(shè)為 7 天,亦即是口令過期日前的 7 天,在本例中則代表 2009/04/19 ~ 2009/04/25 這七天。 如果用戶一直沒有更改口令,那么在這 7 天中,只要 dmtsai 登陸系統(tǒng)就會發(fā)現(xiàn)如下的信息:
Warning: your password will expire in 5 days
? -
如果該賬號一直到 2009/04/25 都沒有更改口令,那么口令就過期了。但是由于有 5 天的寬限天數(shù), 因此
dmtsai 在 2009/04/30 前都還可以使用舊口令登陸主機。 不過登陸時會出現(xiàn)強制更改口令的情況
,畫面有點像底下這樣:
You are required to change your password immediately (password aged) WARNING: Your password has expired. You must change your password now and login again! Changing password for user dmtsai. Changing password for dmtsai (current) UNIX password:
?你必須要輸入一次舊口令以及兩次新口令后,才能夠開始使用系統(tǒng)的各項資源。如果你是在 2009/04/30 以后嘗試以 dmtsai 登陸的話,那么就會出現(xiàn)如下的錯誤信息且無法登陸,因為此時你的口令就失效去啦!
Your account has expired; please contact your system administrator
? -
如果使用者在 2009/04/25 以前變更過口令,那么第 3 個字段的那個 14299 的天數(shù)就會跟著改變,因此, 所有的限制日期也會跟著相對變動喔!^_^
- 無論使用者如何動作,到了 14419 (大約是 2009/07/24 左右) 該賬號就失效了~
透過這樣的說明,您應該會比較容易理解了吧?由于 shadow 有這樣的重要性,因此可不能隨意修改喔! 但在某些情況底下你得要使用各種方法來處理這個文件的!舉例來說,常常聽到人家說:『我的口令忘記了』, 或者是『我的口令不曉得被誰改過,跟原先的不一樣了』,這個時候怎么辦?
-
一般用戶的口令忘記了
:這個最容易解決,請系統(tǒng)管理員幫忙, 他會重新配置好你的口令而不需要知道你的舊口令!利用 root 的身份使用
passwd
命令來處理即可。
- root 口令忘記了 :這就麻煩了!因為你無法使用 root 的身份登陸了嘛! 但我們知道 root 的口令在 /etc/shadow 當中,因此你可以使用各種可行的方法啟動進入 Linux 再去修改。 例如重新啟動進入單人維護模式( 第二十章 )后,系統(tǒng)會主動的給予 root 權(quán)限的 bash 接口, 此時再以 passwd 修改口令即可;或以 Live CD 啟動后掛載根目錄去修改 /etc/shadow,將里面的 root 的口令字段清空, 再重新啟動后 root 將不用口令即可登陸!登陸后再趕快以 passwd 命令去配置 root 口令即可。

認識了賬號相關(guān)的兩個文件 /etc/passwd 與 /etc/shadow 之后,你或許還是會覺得奇怪, 那么群組的配置文件在哪里?還有,在 /etc/passwd 的第四欄不是所謂的 GID 嗎?那又是啥? 呵呵~此時就需要了解 /etc/group 與 /etc/gshadow 啰~
- /etc/group 文件結(jié)構(gòu)
這個文件就是在記錄 GID 與組名的對應了~鳥哥測試機的 /etc/group 內(nèi)容有點像這樣:
?
[root@www ~]# head -n 4 /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm?
?
這個文件每一行代表一個群組,也是以冒號『:』作為字段的分隔符,共分為四欄,每一字段的意義是:
-
組名
:
就是組名啦!
-
群組口令
:
通常不需要配置,這個配置通常是給『群組管理員』使用的,目前很少有這個機會配置群組管理員啦! 同樣的,口令已經(jīng)移動到 /etc/gshadow 去,因此這個字段只會存在一個『x』而已;
-
GID
:
就是群組的 ID 啊。我們 /etc/passwd 第四個字段使用的 GID 對應的群組名,就是由這里對應出來的!
-
此群組支持的賬號名稱
:
我們知道一個賬號可以加入多個群組,那某個賬號想要加入此群組時,將該賬號填入這個字段即可。 舉例來說,如果我想要讓 dmtsai 也加入 root 這個群組,那么在第一行的最后面加上『,dmtsai』,注意不要有空格, 使成為『 root:x:0:root,dmtsai 』就可以啰~
談完了 /etc/passwd, /etc/shadow, /etc/group 之后,我們可以使用一個簡單的圖示來了解一下 UID / GID 與口令之間的關(guān)系, 圖示如下。其實重點是 /etc/passwd 啦,其他相關(guān)的數(shù)據(jù)都是根據(jù)這個文件的字段去找尋出來的。 下圖中, root 的 UID 是 0 ,而 GID 也是 0 ,去找 /etc/group 可以知道 GID 為 0 時的組名就是 root 哩。 至于口令的尋找中,會找到 /etc/shadow 與 /etc/passwd 內(nèi)同賬號名稱的那一行,就是口令相關(guān)數(shù)據(jù)啰。
?

圖 1.3.1 、賬號相關(guān)文件之間的 UID/GID 與口令相關(guān)性示意圖
?
至于在 /etc/group 比較重要的特色在于第四欄啦,因為每個使用者都可以擁有多個支持的群組,這就好比在學校念書的時候, 我們可以加入多個社團一樣! ^_^。不過這里你或許會覺得奇怪的,那就是:『
假如我同時加入多個群組,那么我在作業(yè)的時候,到底是以那個群組為準?
』 底下我們就來談一談這個『有效群組』的概念。
- 有效群組(effective group)與初始群組(initial group)
還記得每個使用者在他的 /etc/passwd 里面的第四欄有所謂的 GID 吧?那個 GID 就是所謂的『初始群組 (initial group) 』!也就是說,當用戶一登陸系統(tǒng),立刻就擁有這個群組的相關(guān)權(quán)限的意思。 舉例來說,我們上面提到 dmtsai 這個使用者的 /etc/passwd 與 /etc/group 還有 /etc/gshadow 相關(guān)的內(nèi)容如下:
?
[root@www ~]# usermod -G users dmtsai <==先配置好次要群組 [root@www ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow /etc/passwd:dmtsai:x:503:504::/home/dmtsai:/bin/bash /etc/group:users:x:100:dmtsai <==次要群組的配置 /etc/group:dmtsai:x:504: <==因為是初始群組,所以第四字段不需要填入賬號 /etc/gshadow:users:::dmtsai <==次要群組的配置 /etc/gshadow:dmtsai:!::?
?
仔細看到上面這個表格,在 /etc/passwd 里面,dmtsai 這個使用者所屬的群組為 GID=504 ,搜尋一下 /etc/group 得到 504 是那個名為 dmtsai 的群組啦!這就是 initial group。因為是初始群組, 使用者一登陸就會主動取得,不需要在 /etc/group 的第四個字段寫入該賬號的!
?
但是非 initial group 的其他群組可就不同了。舉上面這個例子來說,我將 dmtsai 加入 users 這個群組當中,由于 users 這個群組并非是 dmtsai 的初始群組,因此, 我必須要在 /etc/group 這個文件中,找到 users 那一行,并且將 dmtsai 這個賬號加入第四欄, 這樣 dmtsai 才能夠加入 users 這個群組啊。
?
那么在這個例子當中,因為我的 dmtsai 賬號同時支持 dmtsai 與 users 這兩個群組, 因此,在讀取/寫入/運行文件時,針對群組部分,只要是 users 與 dmtsai 這兩個群組擁有的功能, 我 dmtsai 這個使用者都能夠擁有喔!這樣瞭呼?不過,這是針對已經(jīng)存在的文件而言, 如果今天我要創(chuàng)建一個新的文件或者是新的目錄,請問一下,
新文件的群組是 dmtsai 還是 users
?呵呵!這就得要檢查一下當時的有效群組了 (effective group)。
- groups: 有效與支持群組的觀察
如果我以 dmtsai 這個使用者的身份登陸后,該如何知道我所有支持的群組呢? 很簡單啊,直接輸入 groups 就可以了!注意喔,是 groups 有加 s 呢!結(jié)果像這樣:
?
[dmtsai@www ~]$ groups dmtsai users?
?
在這個輸出的信息中,可知道 dmtsai 這個用戶同時屬于 dmtsai 及 users 這個兩個群組,而且, 第一個輸出的群組即為有效群組 (effective group) 了 。 也就是說,我的有效群組為 dmtsai 啦~此時,如果我以 touch 去創(chuàng)建一個新檔,例如: 『 touch test 』,那么這個文件的擁有者為 dmtsai ,而且群組也是 dmtsai 的啦。
?
[dmtsai@www ~]$ touch test [dmtsai@www ~]$ ll -rw-rw-r-- 1 dmtsai dmtsai 0 Feb 24 17:26 test?
?
這樣是否可以了解什么是有效群組了?通常有效群組的作用是在新建文件啦!那么有效群組是否能夠變換?
- newgrp: 有效群組的切換
那么如何變更有效群組呢?就使用 newgrp 啊!不過使用 newgrp 是有限制的,那就是 你想要切換的群組必須是你已經(jīng)有支持的群組。 舉例來說, dmtsai 可以在 dmtsai/users 這兩個群組間切換有效群組,但是 dmtsai 無法切換有效群組成為 sshd 啦!使用的方式如下:
?
[dmtsai@www ~]$ newgrp users [dmtsai@www ~]$ groups users dmtsai [dmtsai@www ~]$ touch test2 [dmtsai@www ~]$ ll -rw-rw-r-- 1 dmtsai dmtsai 0 Feb 24 17:26 test -rw-r--r-- 1 dmtsai users 0 Feb 24 17:33 test2?
?
此時,dmtsai 的有效群組就成為 users 了。 我們額外的來討論一下 newgrp 這個命令,這個命令可以變更目前用戶的有效群組, 而且是 另外以一個 shell 來提供這個功能 的喔,所以,以上面的例子來說, dmtsai 這個使用者目前是以另一個 shell 登陸的,而且新的 shell 給予 dmtsai 有效 GID 為 users 就是了。如果以圖示來看就是如下所示:
?

圖 1.3.2 、newgrp 的運行示意圖
?
雖然用戶的環(huán)境配置(例如環(huán)境變量等等其他數(shù)據(jù))不會有影響,但是使用者的『群組權(quán)限』將會重新被計算。 但是需要注意,由于是新取得一個 shell ,因此如果你想要回到原本的環(huán)境中,請輸入 exit 回到原本的 shell 喔!
既然如此,也就是說,只要我的用戶有支持的群組就是能夠切換成為有效群組!好了, 那么如何讓一個賬號加入不同的群組就是問題的所在啰。你要加入一個群組有兩個方式,一個是透過系統(tǒng)管理員 (root) 利用
usermod
幫你加入,如果 root 太忙了而且你的系統(tǒng)有配置群組管理員,那么你可以透過群組管理員以
gpasswd
幫你加入他所管理的群組中!詳細的作法留待下一小節(jié)再來介紹啰!
- /etc/gshadow
剛剛講了很多關(guān)于『有效群組』的概念,另外,也提到 newgrp 這個命令的用法, 但是,如果 /etc/gshadow 這個配置沒有搞懂得話,那么 newgrp 是無法動作的呢! 鳥哥測試機的 /etc/gshadow 的內(nèi)容有點像這樣:
?
[root@www ~]# head -n 4 /etc/gshadow root:::root bin:::root,bin,daemon daemon:::root,bin,daemon sys:::root,bin,adm?
?
這個文件內(nèi)同樣還是使用冒號『:』來作為字段的分隔字符,而且你會發(fā)現(xiàn),這個文件幾乎與 /etc/group 一模一樣啊!是這樣沒錯~不過,要注意的大概就是第二個字段吧~第二個字段是口令欄, 如果口令欄上面是『!』時,表示該群組不具有群組管理員!至于第四個字段也就是支持的賬號名稱啰~ 這四個字段的意義為:
- 組名
- 口令欄,同樣的,開頭為 ! 表示無合法口令,所以無群組管理員
- 群組管理員的賬號 (相關(guān)信息在 gpasswd 中介紹)
- 該群組的所屬賬號 (與 /etc/group 內(nèi)容相同!)
以系統(tǒng)管理員的角度來說,這個 gshadow 最大的功能就是 創(chuàng)建群組管理員 啦! 那么什么是群組管理員呢?由于系統(tǒng)上面的賬號可能會很多,但是我們 root 可能平時太忙碌,所以當有使用者想要加入某些群組時, root 或許會沒有空管理。此時如果能夠創(chuàng)建群組管理員的話,那么 該群組管理員就能夠?qū)⒛莻€賬號加入自己管理的群組中 ! 可以免去 root 的忙碌啦!不過,由于目前有類似 sudo 之類的工具, 所以這個群組管理員的功能已經(jīng)很少使用了。我們會在后續(xù)的 gpasswd 中介紹這個實作。
?
2. 賬號管理
好啦!既然要管理賬號,當然是由新增與移除使用者開始的啰~底下我們就分別來談一談如何新增、 移除與更改用戶的相關(guān)信息吧~
?

要如何在 Linux 的系統(tǒng)新增一個用戶啊?呵呵~真是太簡單了~我們登陸系統(tǒng)時會輸入 (1)賬號與 (2)口令, 所以創(chuàng)建一個可用的賬號同樣的也需要這兩個數(shù)據(jù)。那賬號可以使用 useradd 來新建用戶,口令的給予則使用 passwd 這個命令!這兩個命令下達方法如下:
- useradd
?
[root@www ~]# useradd [-u UID] [-g 初始群組] [-G 次要群組] [-mM]\ > [-c 說明欄] [-d 家目錄絕對路徑] [-s shell] 使用者賬號名 選項與參數(shù): -u :后面接的是 UID ,是一組數(shù)字。直接指定一個特定的 UID 給這個賬號; -g :后面接的那個組名就是我們上面提到的 initial group 啦~ 該群組的 GID 會被放置到 /etc/passwd 的第四個字段內(nèi)。 -G :后面接的組名則是這個賬號還可以加入的群組。 這個選項與參數(shù)會修改 /etc/group 內(nèi)的相關(guān)數(shù)據(jù)喔! -M :強制!不要創(chuàng)建用戶家目錄!(系統(tǒng)賬號默認值) -m :強制!要創(chuàng)建用戶家目錄!(一般賬號默認值) -c :這個就是 /etc/passwd 的第五欄的說明內(nèi)容啦~可以隨便我們配置的啦~ -d :指定某個目錄成為家目錄,而不要使用默認值。務(wù)必使用絕對路徑! -r :創(chuàng)建一個系統(tǒng)的賬號,這個賬號的 UID 會有限制 (參考 /etc/login.defs) -s :后面接一個 shell ,若沒有指定則默認是 /bin/bash 的啦~ -e :后面接一個日期,格式為『YYYY-MM-DD』此項目可寫入 shadow 第八字段, 亦即賬號失效日的配置項目啰; -f :后面接 shadow 的第七字段項目,指定口令是否會失效。0為立刻失效, -1 為永遠不失效(口令只會過期而強制于登陸時重新配置而已。) 范例一:完全參考默認值創(chuàng)建一個用戶,名稱為 vbird1 [root@www ~]# useradd vbird1 [root@www ~]# ll -d /home/vbird1 drwx------ 4 vbird1 vbird1 4096 Feb 25 09:38 /home/vbird1 # 默認會創(chuàng)建用戶家目錄,且權(quán)限為 700 !這是重點! [root@www ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group /etc/passwd:vbird1:x:504:505::/home/vbird1:/bin/bash /etc/shadow:vbird1:!!:14300:0:99999:7::: /etc/group:vbird1:x:505: <==默認會創(chuàng)建一個與賬號一模一樣的群組名?
?
其實系統(tǒng)已經(jīng)幫我們規(guī)定好非常多的默認值了,所以我們可以簡單的使用『 useradd 賬號 』來創(chuàng)建使用者即可。 CentOS 這些默認值主要會幫我們處理幾個項目:
- 在 /etc/passwd 里面創(chuàng)建一行與賬號相關(guān)的數(shù)據(jù),包括創(chuàng)建 UID/GID/家目錄等;
- 在 /etc/shadow 里面將此賬號的口令相關(guān)參數(shù)填入,但是尚未有口令;
- 在 /etc/group 里面加入一個與賬號名稱一模一樣的組名;
- 在 /home 底下創(chuàng)建一個與賬號同名的目錄作為用戶家目錄,且權(quán)限為 700
由于在 /etc/shadow 內(nèi)僅會有口令參數(shù)而不會有加密過的口令數(shù)據(jù),因此我們在創(chuàng)建使用者賬號時, 還需要使用『 passwd 賬號 』來給予口令才算是完成了用戶創(chuàng)建的流程。如果由于特殊需求而需要改變使用者相關(guān)參數(shù)時, 就得要透過上述表格中的選項來進行創(chuàng)建了,參考底下的案例:
?
范例二:假設(shè)我已知道我的系統(tǒng)當中有個組名為 users ,且 UID 700 并不存在, 請用 users 為初始群組,以及 uid 為 700 來創(chuàng)建一個名為 vbird2 的賬號 [root@www ~]# useradd -u 700 -g users vbird2 [root@www ~]# ll -d /home/vbird2 drwx------ 4 vbird2 users 4096 Feb 25 09:59 /home/vbird2 [root@www ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group /etc/passwd:vbird2:x:700:100::/home/vbird2:/bin/bash /etc/shadow:vbird2:!!:14300:0:99999:7::: # 看一下,UID 與 initial group 確實改變成我們需要的了!?
?
在這個范例中,我們創(chuàng)建的是指定一個已經(jīng)存在的群組作為使用者的初始群組,因為群組已經(jīng)存在, 所以在 /etc/group 里面就不會主動的創(chuàng)建與賬號同名的群組了! 此外,我們也指定了特殊的 UID 來作為使用者的專屬 UID 喔!了解了一般賬號后,我們來瞧瞧那啥是系統(tǒng)賬號 (system account) 吧!
?
范例三:創(chuàng)建一個系統(tǒng)賬號,名稱為 vbird3 [root@www ~]# useradd -r vbird3 [root@www ~]# ll -d /home/vbird3 ls: /home/vbird3: No such file or directory <==不會主動創(chuàng)建家目錄 [root@www ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group /etc/passwd:vbird3:x:100:103::/home/vbird3:/bin/bash /etc/shadow:vbird3:!!:14300:::::: /etc/group:vbird3:x:103:?
?
我們在談到 UID 的時候曾經(jīng)說過一般賬號應該是 500 號以后,那用戶自己創(chuàng)建的系統(tǒng)賬號則一般是由 100 號以后起算的。 所以在這里我們加上 -r 這個選項以后,系統(tǒng)就會主動將賬號與賬號同名群組的 UID/GID 都指定小于 500 以下, 在本案例中則是使用 100(UID) 與 103(GID) 啰!此外,由于系統(tǒng)賬號主要是用來進行運行系統(tǒng)所需服務(wù)的權(quán)限配置, 所以 系統(tǒng)賬號默認都不會主動創(chuàng)建家目錄的 !
?
由這幾個范例我們也會知道,使用 useradd 創(chuàng)建使用者賬號時,其實會更改不少地方,至少我們就知道底下幾個文件:
- 用戶賬號與口令參數(shù)方面的文件:/etc/passwd, /etc/shadow
- 使用者群組相關(guān)方面的文件:/etc/group, /etc/gshadow
- 用戶的家目錄:/home/賬號名稱
那請教一下,你有沒有想過,為何『 useradd vbird1 』會主動在 /home/vbird1 創(chuàng)建起用戶的家目錄?家目錄內(nèi)有什么數(shù)據(jù)且來自哪里?為何默認使用的是 /bin/bash 這個 shell ?為何口令字段已經(jīng)都規(guī)范好了 (0:99999:7 那一串)?呵呵!這就得要說明一下 useradd 所使用的參考文件啰!
- useradd 參考檔
其實 useradd 的默認值可以使用底下的方法呼叫出來:
?
[root@www ~]# useradd -D GROUP=100 <==默認的群組 HOME=/home <==默認的家目錄所在目錄 INACTIVE=-1 <==口令失效日,在 shadow 內(nèi)的第 7 欄 EXPIRE= <==賬號失效日,在 shadow 內(nèi)的第 8 欄 SHELL=/bin/bash <==默認的 shell SKEL=/etc/skel <==用戶家目錄的內(nèi)容數(shù)據(jù)參考目錄 CREATE_MAIL_SPOOL=yes <==是否主動幫使用者創(chuàng)建郵件信箱(mailbox)?
?
這個 數(shù)據(jù)其實是由 /etc/default/useradd 呼叫出來的!你可以自行用 vim 去觀察該文件的內(nèi)容。搭配上頭剛剛談過的范例一的運行結(jié)果,上面這些配置項目所造成的行為分別是:
-
GROUP=100:新建賬號的初始群組使用 GID 為 100 者
系統(tǒng)上面 GID 為 100 者即是 users 這個群組,此配置項目指的就是讓新設(shè)使用者賬號的初始群組為 users 這一個的意思。 但是我們知道 CentOS 上面并不是這樣的,在 CentOS 上面 默認的群組為與賬號名相同的群組 。 舉例來說, vbird1 的初始群組為 vbird1 。怎么會這樣啊?這是因為針對群組的角度有兩種不同的機制所致, 這兩種機制分別是:
-
私有群組機制
:系統(tǒng)會創(chuàng)建一個與賬號一樣的群組給使用者作為初始群組。 這種群組的配置機制會比較有保密性,這是因為使用者都有自己的群組,而且家目錄權(quán)限將會配置為 700 (僅有自己可進入自己的家目錄) 之故。使用這種機制將不會參考 GROUP=100 這個配置值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;
- 公共群組機制 :就是以 GROUP=100 這個配置值作為新建賬號的初始群組,因此每個賬號都屬于 users 這個群組, 且默認家目錄通常的權(quán)限會是『 drwxr-xr-x ... username users ... 』,由于每個賬號都屬于 users 群組,因此大家都可以互相分享家目錄內(nèi)的數(shù)據(jù)之故。代表 distributions 如 SuSE等。
由于我們的 CentOS 使用私有群組機制,因此這個配置項目是不會生效的!不要太緊張啊!
-
私有群組機制
:系統(tǒng)會創(chuàng)建一個與賬號一樣的群組給使用者作為初始群組。 這種群組的配置機制會比較有保密性,這是因為使用者都有自己的群組,而且家目錄權(quán)限將會配置為 700 (僅有自己可進入自己的家目錄) 之故。使用這種機制將不會參考 GROUP=100 這個配置值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;
-
HOME=/home:用戶家目錄的基準目錄(basedir)
用戶的家目錄通常是與賬號同名的目錄,這個目錄將會擺放在此配置值的目錄后。所以 vbird1 的家目錄就會在 /home/vbird1/ 了!很容易理解吧!
-
INACTIVE=-1:口令過期后是否會失效的配置值
我們在 shadow 文件結(jié)構(gòu)當中談過,第七個字段的配置值將會影響到口令過期后, 在多久時間內(nèi)還可使用舊口令登陸。這個項目就是在指定該日數(shù)啦!如果是 0 代表口令過期立刻失效, 如果是 -1 則是代表口令永遠不會失效,如果是數(shù)字,如 30 ,則代表過期 30 天后才失效。
-
EXPIRE=:賬號失效的日期
就是 shadow 內(nèi)的第八字段,你可以直接配置賬號在哪個日期后就直接失效,而不理會口令的問題。 通常不會配置此項目,但如果是付費的會員制系統(tǒng),或許這個字段可以配置喔!
-
SHELL=/bin/bash:默認使用的 shell 程序文件名
系統(tǒng)默認的 shell 就寫在這里。假如你的系統(tǒng)為 mail server ,你希望每個賬號都只能使用 email 的收發(fā)信件功能, 而不許用戶登陸系統(tǒng)取得 shell ,那么可以將這里配置為 /sbin/nologin ,如此一來,新建的使用者默認就無法登陸! 也免去后續(xù)使用 usermod 進行修改的手續(xù)!
-
SKEL=/etc/skel:用戶家目錄參考基準目錄
這個咚咚就是指定用戶家目錄的參考基準目錄啰~舉我們的范例一為例, vbird1 家目錄 /home/vbird1 內(nèi)的各項數(shù)據(jù),都是由 /etc/skel 所復制過去的~所以呢,未來如果我想要讓新增使用者時,該用戶的環(huán)境變量 ~/.bashrc 就配置妥當?shù)脑挘梢缘?/etc/skel/.bashrc 去編輯一下,也可以創(chuàng)建 /etc/skel/www 這個目錄,那么未來新增使用者后,在他的家目錄下就會有 www 那個目錄了!這樣瞭呼?
-
CREATE_MAIL_SPOOL=yes:創(chuàng)建使用者的 mailbox
你可以使用『 ll /var/spool/mail/vbird1 』看一下,會發(fā)現(xiàn)有這個文件的存在喔!這就是使用者的郵件信箱!
除了這些基本的賬號配置值之外, UID/GID 還有口令參數(shù)又是在哪里參考的呢?那就得要看一下 /etc/login.defs 啦! 這個文件的內(nèi)容有點像底下這樣:
?
MAIL_DIR /var/spool/mail <==用戶默認郵件信箱放置目錄 PASS_MAX_DAYS 99999 <==/etc/shadow 內(nèi)的第 5 欄,多久需變更口令日數(shù) PASS_MIN_DAYS 0 <==/etc/shadow 內(nèi)的第 4 欄,多久不可重新配置口令日數(shù) PASS_MIN_LEN 5 <==口令最短的字符長度,已被 pam 模塊取代,失去效用! PASS_WARN_AGE 7 <==/etc/shadow 內(nèi)的第 6 欄,過期前會警告的日數(shù) UID_MIN 500 <==使用者最小的 UID,意即小于 500 的 UID 為系統(tǒng)保留 UID_MAX 60000 <==使用者能夠用的最大 UID GID_MIN 500 <==使用者自定義組的最小 GID,小于 500 為系統(tǒng)保留 GID_MAX 60000 <==使用者自定義組的最大 GID CREATE_HOME yes <==在不加 -M 及 -m 時,是否主動創(chuàng)建用戶家目錄? UMASK 077 <==用戶家目錄創(chuàng)建的 umask ,因此權(quán)限會是 700 USERGROUPS_ENAB yes <==使用 userdel 刪除時,是否會刪除初始群組 MD5_CRYPT_ENAB yes <==口令是否經(jīng)過 MD5 的加密機制處理?
?
這個文件規(guī)范的數(shù)據(jù)則是如下所示:
-
mailbox 所在目錄
:
用戶的默認 mailbox 文件放置的目錄在 /var/spool/mail,所以 vbird1 的 mailbox 就是在 /var/spool/mail/vbird1 啰!
-
shadow 口令第 4, 5, 6 字段內(nèi)容
:
透過 PASS_MAX_DAYS 等等配置值來指定的!所以你知道為何默認的 /etc/shadow 內(nèi)每一行都會有『 0:99999:7 』的存在了嗎?^_^!不過要注意的是,由于目前我們登陸時改用 PAM 模塊來進行口令檢驗,所以那個 PASS_MIN_LEN 是失效的!
-
UID/GID 指定數(shù)值
:
雖然 Linux 核心支持的賬號可高達 2 32 這么多個,不過一部主機要作出這么多賬號在管理上也是很麻煩的! 所以在這里就針對 UID/GID 的范圍進行規(guī)范就是了。上表中的 UID_MIN 指的就是可登陸系統(tǒng)的一般賬號的最小 UID ,至于 UID_MAX 則是最大 UID 之意。
要注意的是,系統(tǒng)給予一個賬號 UID 時,他是 (1)先參考 UID_MIN 配置值取得最小數(shù)值; (2)由 /etc/passwd 搜尋最大的 UID 數(shù)值, 將 (1) 與 (2) 相比,找出最大的那個再加一就是新賬號的 UID 了。我們上面已經(jīng)作出 UID 為 700 的 vbird2 , 如果再使用『 useradd vbird4 』時,你猜 vbird4 的 UID 會是多少?答案是: 701 。 所以中間的 505~699 的號碼就空下來啦!
而如果我是想要創(chuàng)建系統(tǒng)用的賬號,所以使用 useradd -r sysaccount 這個 -r 的選項時,就會找『比 500 小的最大的那個 UID + 1 』就是了。 ^_^
-
用戶家目錄配置值
:
為何我們系統(tǒng)默認會幫用戶創(chuàng)建家目錄?就是這個『CREATE_HOME = yes』的配置值啦!這個配置值會讓你在使用 useradd 時, 主動加入『 -m 』這個產(chǎn)生家目錄的選項啊!如果不想要創(chuàng)建用戶家目錄,就只能強制加上『 -M 』的選項在 useradd 命令運行時啦!至于創(chuàng)建家目錄的權(quán)限配置呢?就透過 umask 這個配置值啊!因為是 077 的默認配置,因此用戶家目錄默認權(quán)限才會是『 drwx------ 』哩!
-
用戶刪除與口令配置值
:
使用『USERGROUPS_ENAB yes』這個配置值的功能是: 如果使用 userdel 去刪除一個賬號時,且該賬號所屬的初始群組已經(jīng)沒有人隸屬于該群組了, 那么就刪除掉該群組 ,舉例來說,我們剛剛有創(chuàng)建 vbird4 這個賬號,他會主動創(chuàng)建 vbird4 這個群組。 若 vbird4 這個群組并沒有其他賬號將他加入支持的情況下,若使用 userdel vbird4 時,該群組也會被刪除的意思。 至于『MD5_CRYPT_ENAB yes』則表示使用 MD5 來加密口令明文,而不使用舊式的 DES( 注2 ) 。
現(xiàn)在你知道啦,使用 useradd 這支程序在創(chuàng)建 Linux 上的賬號時,至少會參考:
- /etc/default/useradd
- /etc/login.defs
- /etc/skel/*
這些文件,不過,最重要的其實是創(chuàng)建 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 還有用戶家目錄就是了~所以,如果你了解整個系統(tǒng)運行的狀態(tài),也是可以手動直接修改這幾個文件就是了。 OK!賬號創(chuàng)建了,接下來處理一下用戶的口令吧!
- passwd
剛剛我們講到了,使用 useradd 創(chuàng)建了賬號之后,在默認的情況下,該賬號是暫時被封鎖的, 也就是說,該賬號是無法登陸的,你可以去瞧一瞧 /etc/shadow 內(nèi)的第二個字段就曉得啰~ 那該如何是好?怕什么?直接給他配置新口令就好了嘛!對吧~配置口令就使用 passwd 啰!
?
[root@www ~]# passwd [--stdin] <==所有人均可使用來改自己的口令 [root@www ~]# passwd [-l] [-u] [--stdin] [-S] \ > [-n 日數(shù)] [-x 日數(shù)] [-w 日數(shù)] [-i 日期] 賬號 <==root 功能 選項與參數(shù): --stdin :可以透過來自前一個管線的數(shù)據(jù),作為口令輸入,對 shell script 有幫助! -l :是 Lock 的意思,會將 /etc/shadow 第二欄最前面加上 ! 使口令失效; -u :與 -l 相對,是 Unlock 的意思! -S :列出口令相關(guān)參數(shù),亦即 shadow 文件內(nèi)的大部分信息。 -n :后面接天數(shù),shadow 的第 4 字段,多久不可修改口令天數(shù) -x :后面接天數(shù),shadow 的第 5 字段,多久內(nèi)必須要更動口令 -w :后面接天數(shù),shadow 的第 6 字段,口令過期前的警告天數(shù) -i :后面接『日期』,shadow 的第 7 字段,口令失效日期 范例一:請 root 給予 vbird2 口令 [root@www ~]# passwd vbird2 Changing password for user vbird2. New UNIX password: <==這里直接輸入新的口令,屏幕不會有任何反應 BAD PASSWORD: it is WAY too short <==口令太簡單或過短的錯誤! Retype new UNIX password: <==再輸入一次同樣的口令 passwd: all authentication tokens updated successfully. <==竟然還是成功修改了!?
?
root 果然是最偉大的人物!當我們要給予用戶口令時,透過 root 來配置即可。 root 可以配置各式各樣的口令,系統(tǒng)幾乎一定會接受!所以您瞧瞧,如同上面的范例一,明明鳥哥輸入的口令太短了, 但是系統(tǒng)依舊可接受 vbird2 這樣的口令配置。這個是 root 幫忙配置的結(jié)果,那如果是用戶自己要改口令呢? 包括 root 也是這樣修改的喔!
?
范例二:用 vbird2 登陸后,修改 vbird2 自己的口令 [vbird2@www ~]$ passwd <==后面沒有加賬號,就是改自己的口令! Changing password for user vbird2. Changing password for vbird2 (current) UNIX password: <==這里輸入『原有的舊口令』 New UNIX password: <==這里輸入新口令 BAD PASSWORD: it is based on a dictionary word <==口令檢驗不通過,請再想個新口令 New UNIX password: <==這里再想個來輸入吧 Retype new UNIX password: <==通過口令驗證!所以重復這個口令的輸入 passwd: all authentication tokens updated successfully. <==有無成功看關(guān)鍵詞?
?
passwd 的使用真的要很注意,尤其是 root 先生啊!鳥哥在課堂上每次講到這里,說是要幫自己的一般賬號創(chuàng)建口令時, 有一小部分的學生就是會忘記加上賬號,結(jié)果就變成改變 root 自己的口令,最后.... root 口令就這樣不見去!唉~ 要幫一般賬號創(chuàng)建口令需要使用『 passwd 賬號 』的格式,使用『 passwd 』表示修改自己的口令 !拜托!千萬不要改錯!
?
與 root 不同的是,一般賬號在更改口令時需要先輸入自己的舊口令 (亦即 current 那一行),然后再輸入新口令 (New 那一行)。 要注意的是,口令的規(guī)范是非常嚴格的,尤其新的 distributions 大多使用 PAM 模塊來進行口令的檢驗,包括太短、 口令與賬號相同、口令為字典常見字符串等,都會被 PAM 模塊檢查出來而拒絕修改口令,此時會再重復出現(xiàn)『 New 』這個關(guān)鍵詞! 那時請再想個新口令!若出現(xiàn)『 Retype 』才是你的口令被接受了!重復輸入新口令并且看到『 successfully 』這個關(guān)鍵詞時才是修改口令成功喔!
Tips:
與一般使用者不同的是, root 并不需要知道舊口令就能夠幫用戶或 root 自己創(chuàng)建新口令! 但如此一來有困擾~就是如果你的親密愛人老是告訴你『我的口令真難記,幫我配置簡單一點的!』時, 千萬不要妥協(xié)啊!這是為了系統(tǒng)安全... |
![]() |
為何用戶要設(shè)訂自己的口令會這么麻煩啊?這是因為口令的安全性啦!如果口令配置太簡單, 一些有心人士就能夠很簡單的猜到你的口令,如此一來人家就可能使用你的一般賬號登陸你的主機或使用其他主機資源, 對主機的維護會造成困擾的!所以新的 distributions 是使用較嚴格的 PAM 模塊來管理口令,這個管理的機制寫在 /etc/pam.d/passwd 當中。而 該文件與口令有關(guān)的測試模塊就是使用:pam_cracklib.so,這個模塊會檢驗口令相關(guān)的信息, 并且取代 /etc/login.defs 內(nèi)的 PASS_MIN_LEN 的配置 啦!關(guān)于 PAM 我們在本章后面繼續(xù)介紹,這里先談一下, 理論上,你的口令最好符合如下要求:
- 口令不能與賬號相同;
- 口令盡量不要選用字典里面會出現(xiàn)的字符串;
- 口令需要超過 8 個字符;
- 口令不要使用個人信息,如身份證、手機號碼、其他電話號碼等;
- 口令不要使用簡單的關(guān)系式,如 1+1=2, Iamvbird 等;
- 口令盡量使用大小寫字符、數(shù)字、特殊字符($,_,-等)的組合。
為了方便系統(tǒng)管理,新版的 passwd 還加入了很多創(chuàng)意選項喔!鳥哥個人認為最好用的大概就是這個『 --stdin 』了! 舉例來說,你想要幫 vbird2 變更口令成為 abc543CC ,可以這樣下達命令呢!
?
范例三:使用 standard input 創(chuàng)建用戶的口令 [root@www ~]# echo "abc543CC" | passwd --stdin vbird2 Changing password for user vbird2. passwd: all authentication tokens updated successfully.?
?
這個動作會直接升級用戶的口令而不用再次的手動輸入!好處是方便處理,缺點是這個口令會保留在命令中, 未來若系統(tǒng)被攻破,人家可以在 /root/.bash_history 找到這個口令呢!所以這個動作通常僅用在 shell script 的大量創(chuàng)建使用者賬號當中!要注意的是,這個選項并不存在所有 distributions 版本中, 請使用 man passwd 確認你的 distribution 是否有支持此選項喔!
?
如果你想要讓 vbird2 的口令具有相當?shù)氖貏t,舉例來說你要讓 vbird2 每 60 天需要變更口令, 口令過期后 10 天未使用就宣告口令失效,那該如何處理?
?
范例四:管理 vbird2 的口令使具有 60 天變更、10 天口令失效的配置 [root@www ~]# passwd -S vbird2 vbird2 PS 2009-02-26 0 99999 7 -1 (Password set, MD5 crypt.) # 上面說明口令創(chuàng)建時間 (2009-02-26)、0 最小天數(shù)、99999 變更天數(shù)、7 警告日數(shù) # 與口令不會失效 (-1) 。 [root@www ~]# passwd -x 60 -i 10 vbird2 [root@www ~]# passwd -S vbird2 vbird2 PS 2009-02-26 0 60 7 10 (Password set, MD5 crypt.)?
?
那如果我想要讓某個賬號暫時無法使用口令登陸主機呢?舉例來說, vbird2 這家伙最近老是胡亂在主機亂來, 所以我想要暫時讓她無法登陸的話,最簡單的方法就是讓她的口令變成不合法 (shadow 第 2 字段長度變掉)! 處理的方法就更簡單的!
?
范例五:讓 vbird2 的賬號失效,觀察完畢后再讓她失效 [root@www ~]# passwd -l vbird2 [root@www ~]# passwd -S vbird2 vbird2 LK 2009-02-26 0 60 7 10 (Password locked.) # 嘿嘿!狀態(tài)變成『 LK, Lock 』了啦!無法登陸喔! [root@www ~]# grep vbird2 /etc/shadow vbird2:!!$1$50MnwNFq$oChX.0TPanCq7ecE4HYEi.:14301:0:60:7:10:: # 其實只是在這里加上 !! 而已! [root@www ~]# passwd -u vbird2 [root@www ~]# grep vbird2 /etc/shadow vbird2:$1$50MnwNFq$oChX.0TPanCq7ecE4HYEi.:14301:0:60:7:10:: # 口令字段恢復正常!?
?
是否很有趣啊!您可以自行管理一下你的賬號的口令相關(guān)參數(shù)喔!接下來讓我們用更簡單的方法來查閱口令參數(shù)喔!
- chage
除了使用 passwd -S 之外,有沒有更詳細的口令參數(shù)顯示功能呢?有的!那就是 chage 了! 他的用法如下:
?
[root@www ~]# chage [-ldEImMW] 賬號名 選項與參數(shù): -l :列出該賬號的詳細口令參數(shù); -d :后面接日期,修改 shadow 第三字段(最近一次更改口令的日期),格式 YYYY-MM-DD -E :后面接日期,修改 shadow 第八字段(賬號失效日),格式 YYYY-MM-DD -I :后面接天數(shù),修改 shadow 第七字段(口令失效日期) -m :后面接天數(shù),修改 shadow 第四字段(口令最短保留天數(shù)) -M :后面接天數(shù),修改 shadow 第五字段(口令多久需要進行變更) -W :后面接天數(shù),修改 shadow 第六字段(口令過期前警告日期) 范例一:列出 vbird2 的詳細口令參數(shù) [root@www ~]# chage -l vbird2 Last password change : Feb 26, 2009 Password expires : Apr 27, 2009 Password inactive : May 07, 2009 Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 60 Number of days of warning before password expires : 7?
?
我們在 passwd 的介紹中談到了處理 vbird2 這個賬號的口令屬性流程,使用 passwd -S 卻無法看到很清楚的說明。如果使用 chage 那可就明白多了!如上表所示,我們可以清楚的知道 vbird2 的詳細參數(shù)呢! 如果想要修改其他的配置值,就自己參考上面的選項,或者自行 man chage 一下吧!^_^
?
chage 有一個功能很不錯喔!如果你想要讓『 使用者在第一次登陸時, 強制她們一定要更改口令后才能夠使用系統(tǒng)資源 』,可以利用如下的方法來處理的!
?
范例二:創(chuàng)建一個名為 agetest 的賬號,該賬號第一次登陸后使用默認口令, 但必須要更改過口令后,使用新口令才能夠登陸系統(tǒng)使用 bash 環(huán)境 [root@www ~]# useradd agetest [root@www ~]# echo "agetest" | passwd --stdin agetest [root@www ~]# chage -d 0 agetest # 此時此賬號的口令創(chuàng)建時間會被改為 1970/1/1 ,所以會有問題! 范例三:嘗試以 agetest 登陸的情況 You are required to change your password immediately (root enforced) WARNING: Your password has expired. You must change your password now and login again! Changing password for user agetest. Changing password for agetest (current) UNIX password: <==這個賬號被強制要求必須要改口令!?
?
非常有趣吧!你會發(fā)現(xiàn) agetest 這個賬號在第一次登陸時可以使用與賬號同名的口令登陸, 但登陸時就會被要求立刻更改口令,更改口令完成后就會被踢出系統(tǒng)。再次登陸時就能夠使用新口令登陸了! 這個功能對學校老師非常有幫助!因為我們不想要知道學生的口令,那么在初次上課時就使用與學號相同的賬號/口令給學生, 讓她們登陸時自行配置她們的口令,如此一來就能夠避免其他同學隨意使用別人的賬號,也能夠保證學生知道如何更改自己的口令!
- usermod
所謂這『人有失手,馬有亂蹄』,您說是吧?所以啰,當然有的時候會『不小心』在 useradd 的時候加入了錯誤的配置數(shù)據(jù)。或者是,在使用 useradd 后,發(fā)現(xiàn)某些地方還可以進行細部修改。 此時,當然我們可以直接到 /etc/passwd 或 /etc/shadow 去修改相對應字段的數(shù)據(jù), 不過,Linux 也有提供相關(guān)的命令讓大家來進行賬號相關(guān)數(shù)據(jù)的微調(diào)呢~那就是 usermod 啰~
?
[root@www ~]# usermod [-cdegGlsuLU] username 選項與參數(shù): -c :后面接賬號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些賬號的說明。 -d :后面接賬號的家目錄,即修改 /etc/passwd 的第六欄; -e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內(nèi)的第八個字段數(shù)據(jù)啦! -f :后面接天數(shù),為 shadow 的第七字段。 -g :后面接初始群組,修改 /etc/passwd 的第四個字段,亦即是 GID 的字段! -G :后面接次要群組,修改這個使用者能夠支持的群組,修改的是 /etc/group 啰~ -a :與 -G 合用,可『添加次要群組的支持』而非『配置』喔! -l :后面接賬號名稱。亦即是修改賬號名稱, /etc/passwd 的第一欄! -s :后面接 Shell 的實際文件,例如 /bin/bash 或 /bin/csh 等等。 -u :后面接 UID 數(shù)字啦!即 /etc/passwd 第三欄的數(shù)據(jù); -L :暫時將用戶的口令凍結(jié),讓他無法登陸。其實僅改 /etc/shadow 的口令欄。 -U :將 /etc/shadow 口令欄的 ! 拿掉,解凍啦!?
?
如果你仔細的比對,會發(fā)現(xiàn) usermod 的選項與 useradd 非常類似! 這是因為 usermod 也是用來微調(diào) useradd 添加的使用者參數(shù)嘛!不過 usermod 還是有新增的選項, 那就是 -L 與 -U ,不過這兩個選項其實與 passwd 的 -l, -u 是相同的!而且也不見得會存在所有的 distribution 當中!接下來,讓我們談?wù)勔恍┳兏鼌?shù)的實例吧!
范例一:修改使用者 vbird2 的說明欄,加上『VBird's test』的說明。 [root@www ~]# usermod -c "VBird's test" vbird2 [root@www ~]# grep vbird2 /etc/passwd vbird2:x:700:100:VBird's test:/home/vbird2:/bin/bash 范例二:用戶 vbird2 口令在 2009/12/31 失效。 [root@www ~]# usermod -e "2009-12-31" vbird2 [root@www ~]# grep vbird2 /etc/shadow vbird2:$1$50MnwNFq$oChX.0TPanCq7ecE4HYEi.:14301:0:60:7:10:14609: 范例三:我們創(chuàng)建 vbird3 這個系統(tǒng)賬號時并沒有給予家目錄,請創(chuàng)建他的家目錄 [root@www ~]# ll -d ~vbird3 ls: /home/vbird3: No such file or directory <==確認一下,確實沒有家目錄的存在! [root@www ~]# cp -a /etc/skel /home/vbird3 [root@www ~]# chown -R vbird3:vbird3 /home/vbird3 [root@www ~]# chmod 700 /home/vbird3 [root@www ~]# ll -a ~vbird3 drwx------ 4 vbird3 vbird3 4096 Sep 4 18:15 . <==用戶家目錄權(quán)限 drwxr-xr-x 11 root root 4096 Feb 26 11:45 .. -rw-r--r-- 1 vbird3 vbird3 33 May 25 2008 .bash_logout -rw-r--r-- 1 vbird3 vbird3 176 May 25 2008 .bash_profile -rw-r--r-- 1 vbird3 vbird3 124 May 25 2008 .bashrc drwxr-xr-x 3 vbird3 vbird3 4096 Sep 4 18:11 .kde drwxr-xr-x 4 vbird3 vbird3 4096 Sep 4 18:15 .mozilla # 使用 chown -R 是為了連同家目錄底下的用戶/群組屬性都一起變更的意思; # 使用 chmod 沒有 -R ,是因為我們僅要修改目錄的權(quán)限而非內(nèi)部文件的權(quán)限!?
- userdel
這個功能就太簡單了,目的在刪除用戶的相關(guān)數(shù)據(jù),而用戶的數(shù)據(jù)有:
- 用戶賬號/口令相關(guān)參數(shù):/etc/passwd, /etc/shadow
- 使用者群組相關(guān)參數(shù):/etc/group, /etc/gshadow
- 用戶個人文件數(shù)據(jù): /home/username, /var/spool/mail/username..
整個命令的語法非常簡單:
?
[root@www ~]# userdel [-r] username 選項與參數(shù): -r :連同用戶的家目錄也一起刪除 范例一:刪除 vbird2 ,連同家目錄一起刪除 [root@www ~]# userdel -r vbird2?
?
這個命令下達的時候要小心了!通常我們要移除一個賬號的時候,你可以手動的將 /etc/passwd 與 /etc/shadow 里頭的該賬號取消即可!一般而言,如果該賬號只是『 暫時不激活 』的話,那么將 /etc/shadow 里頭賬號失效日期 (第八字段) 配置為 0 就可以讓該賬號無法使用,但是所有跟該賬號相關(guān)的數(shù)據(jù)都會留下來! 使用 userdel 的時機通常是『 你真的確定不要讓該用戶在主機上面使用任何數(shù)據(jù)了 !』
?
另外,其實用戶如果在系統(tǒng)上面操作過一陣子了,那么該用戶其實在系統(tǒng)內(nèi)可能會含有其他文件的。 舉例來說,他的郵件信箱 (mailbox) 或者是 例行性工作排程 (crontab, 十六章) 之類的文件。 所以,如果想要完整的將某個賬號完整的移除,最好可以在下達 userdel -r username 之前, 先以『 find / -user username 』查出整個系統(tǒng)內(nèi)屬于 username 的文件,然后再加以刪除吧!

不論是 useradd/usermod/userdel ,那都是系統(tǒng)管理員所能夠使用的命令, 如果我是一般身份使用者,那么我是否除了口令之外,就無法更改其他的數(shù)據(jù)呢? 當然不是啦!這里我們介紹幾個一般身份用戶常用的賬號數(shù)據(jù)變更與查詢命令啰!
- finger
finger 的中文字面意義是:『手指』或者是『指紋』的意思。這個 finger 可以查閱很多用戶相關(guān)的信息喔! 大部分都是在 /etc/passwd 這個文件里面的信息啦!我們就先來檢查檢查用戶信息吧!
?
[root@www ~]# finger [-s] username 選項與參數(shù): -s :僅列出用戶的賬號、全名、終端機代號與登陸時間等等; -m :列出與后面接的賬號相同者,而不是利用部分比對 (包括全名部分) 范例一:觀察 vbird1 的用戶相關(guān)賬號屬性 [root@www ~]# finger vbird1 Login: vbird1 Name: (null) Directory: /home/vbird1 Shell: /bin/bash Never logged in. No mail. No Plan.?
?
由于 finger 類似指紋的功能,他會將用戶的相關(guān)屬性列出來!如上表所示,其實他列出來的幾乎都是 /etc/passwd 文件里面的東西。列出的信息說明如下:
- Login:為使用者賬號,亦即 /etc/passwd 內(nèi)的第一字段;
- Name:為全名,亦即 /etc/passwd 內(nèi)的第五字段(或稱為批注);
- Directory:就是家目錄了;
- Shell:就是使用的 Shell 文件所在;
- Never logged in.:figner 還會調(diào)查用戶登陸主機的情況喔!
- No mail.:調(diào)查 /var/spool/mail 當中的信箱數(shù)據(jù);
- No Plan.:調(diào)查 ~vbird1/.plan 文件,并將該文件取出來說明!
不過是否能夠查閱到 Mail 與 Plan 則與權(quán)限有關(guān)了!因為 Mail / Plan 都是與使用者自己的權(quán)限配置有關(guān), root 當然可以查閱到用戶的這些信息,但是 vbird1 就不見得能夠查到 vbird3 的信息, 因為 /var/spool/mail/vbird3 與 /home/vbird3/ 的權(quán)限分別是 660, 700 ,那 vbird1 當然就無法查閱的到! 這樣解釋可以理解吧?此外,我們可以創(chuàng)建自己想要運行的預定計劃,當然,最多是給自己看的!可以這樣做:
?
范例二:利用 vbird1 創(chuàng)建自己的計劃檔 [vbird1@www ~]$ echo "I will study Linux during this year." > ~/.plan [vbird1@www ~]$ finger vbird1 Login: vbird1 Name: (null) Directory: /home/vbird1 Shell: /bin/bash Never logged in. No mail. Plan: I will study Linux during this year. 范例三:找出目前在系統(tǒng)上面登陸的用戶與登陸時間 [vbird1@www ~]$ finger Login Name Tty Idle Login Time Office Office Phone root root tty1 Feb 26 09:53 vbird1 tty2 Feb 26 15:21?
?
在范例三當中,我們發(fā)現(xiàn)輸出的信息還會有 Office, Office Phone 等信息,那這些信息要如何記錄呢? 底下我們會介紹 chfn 這個命令!來看看如何修改用戶的 finger 數(shù)據(jù)吧!
- chfn
chfn 有點像是: change finger 的意思!這玩意的使用方法如下:
?
[root@www ~]# chfn [-foph] [賬號名] 選項與參數(shù): -f :后面接完整的大名; -o :您辦公室的房間號碼; -p :辦公室的電話號碼; -h :家里的電話號碼! 范例一:vbird1 自己更改一下自己的相關(guān)信息! [vbird1@www ~]$ chfn Changing finger information for vbird1. Password: <==確認身份,所以輸入自己的口令 Name []: VBird Tsai test <==輸入你想要呈現(xiàn)的全名 Office []: Dic in Ksu. Tainan <==辦公室號碼 Office Phone []: 06-2727175#356 <==辦公室電話 Home Phone []: 06-1234567 <==家里電話號碼 Finger information changed. [vbird1@www ~]$ grep vbird1 /etc/passwd vbird1:x:504:505:VBird Tsai test,Dic in Ksu. Tainan,06-2727175#356,06-1234567: /home/vbird1:/bin/bash # 其實就是改到第五個字段,該字段里面用多個『 , 』分隔就是了! [vbird1@www ~]$ finger vbird1 Login: vbird1 Name: VBird Tsai test Directory: /home/vbird1 Shell: /bin/bash Office: Dic in Ksu. Tainan Office Phone: 06-2727175#356 Home Phone: 06-1234567 On since Thu Feb 26 15:21 (CST) on tty2 No mail. Plan: I will study Linux during this year. # 就是上面特殊字體呈現(xiàn)的那些地方是由 chfn 所修改出來的!?
?
這個命令說實在的,除非是你的主機有很多的用戶,否則倒真是用不著這個程序!這就有點像是 bbs 里頭更改你『個人屬性』的那一個數(shù)據(jù)啦!不過還是可以自己玩一玩!尤其是用來提醒自己相關(guān)數(shù)據(jù)啦! ^_^
- chsh
這就是 change shell 的簡寫!使用方法就更簡單了!
?
[vbird1@www ~]$ chsh [-ls] 選項與參數(shù): -l :列出目前系統(tǒng)上面可用的 shell ,其實就是 /etc/shells 的內(nèi)容! -s :配置修改自己的 Shell 啰 范例一:用 vbird1 的身份列出系統(tǒng)上所有合法的 shell,并且指定 csh 為自己的 shell [vbird1@www ~]$ chsh -l /bin/sh /bin/bash /sbin/nologin <==所謂:合法不可登陸的 Shell 就是這玩意! /bin/tcsh /bin/csh <==這就是 C shell 啦! /bin/ksh # 其實上面的信息就是我們在 bash 中談到的 /etc/shells 啦! [vbird1@www ~]$ chsh -s /bin/csh; grep vbird1 /etc/passwd Changing shell for vbird1. Password: <==確認身份,請輸入 vbird1 的口令 Shell changed. vbird1:x:504:505:VBird Tsai test,Dic in Ksu. Tainan,06-2727175#356,06-1234567: /home/vbird1:/bin/csh [vbird1@www ~]$ chsh -s /bin/bash # 測試完畢后,立刻改回來! [vbird1@www ~]$ ll $(which chsh) -rws--x--x 1 root root 19128 May 25 2008 /usr/bin/chsh?
?
不論是 chfn 與 chsh ,都是能夠讓一般用戶修改 /etc/passwd 這個系統(tǒng)文件的!所以你猜猜,這兩個文件的權(quán)限是什么? 一定是
SUID
的功能啦!看到這里,想到前面! 這就是 Linux 的學習方法~ ^_^
- id
id 這個命令則可以查詢某人或自己的相關(guān) UID/GID 等等的信息,他的參數(shù)也不少,不過, 都不需要記~反正使用 id 就全部都列出啰~ ^_^
?
[root@www ~]# id [username] 范例一:查閱 root 自己的相關(guān) ID 信息! [root@www ~]# id uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk), 10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh # 上面信息其實是同一行的數(shù)據(jù)!包括會顯示 UID/GID 以及支持的所有群組! # 至于后面那個 context=... 則是 SELinux 的內(nèi)容,先不要理會他! 范例二:查閱一下 vbird1 吧~ [root@www ~]# id vbird1 uid=504(vbird1) gid=505(vbird1) groups=505(vbird1) context=root:system_r: unconfined_t:SystemLow-SystemHigh [root@www ~]# id vbird100 id: vbird100: No such user <== id 這個命令也可以用來判斷系統(tǒng)上面有無某賬號!?
?

OK!了解了賬號的新增、刪除、更動與查詢后,再來我們可以聊一聊群組的相關(guān)內(nèi)容了。 基本上,群組的內(nèi)容都與這兩個文件有關(guān):
/etc/group, /etc/gshadow
。 群組的內(nèi)容其實很簡單,都是上面兩個文件的新增、修改與移除而已, 不過,如果再加上有效群組的概念,那么 newgrp 與 gpasswd 則不可不知呢!
- groupadd
[root@www ~]# groupadd [-g gid] [-r] 組名 選項與參數(shù): -g :后面接某個特定的 GID ,用來直接給予某個 GID ~ -r :創(chuàng)建系統(tǒng)群組啦!與 /etc/login.defs 內(nèi)的 GID_MIN 有關(guān)。 范例一:新建一個群組,名稱為 group1 [root@www ~]# groupadd group1 [root@www ~]# grep group1 /etc/group /etc/gshadow /etc/group:group1:x:702: /etc/gshadow:group1:!:: # 群組的 GID 也是會由 500 以上最大 GID+1 來決定!?
曾經(jīng)有某些版本的教育訓練手冊談到,為了讓使用者的 UID/GID 成對,她們建議
新建的與使用者私有群組無關(guān)的其他群組時,使用小于 500 以下的 GID 為宜
。 也就是說,如果要創(chuàng)建群組的話,最好能夠使用『 groupadd -r 群組名』的方式來創(chuàng)建啦! 不過,這見仁見智啦!看你自己的抉擇啰!
- groupmod
跟 usermod 類似的,這個命令僅是在進行 group 相關(guān)參數(shù)的修改而已。
?
[root@www ~]# groupmod [-g gid] [-n group_name] 群組名 選項與參數(shù): -g :修改既有的 GID 數(shù)字; -n :修改既有的組名 范例一:將剛剛上個命令創(chuàng)建的 group1 名稱改為 mygroup , GID 為 201 [root@www ~]# groupmod -g 201 -n mygroup group1 [root@www ~]# grep mygroup /etc/group /etc/gshadow /etc/group:mygroup:x:201: /etc/gshadow:mygroup:!::?
?
不過,還是那句老話,不要隨意的更動 GID ,容易造成系統(tǒng)資源的錯亂喔!
- groupdel
呼呼! groupdel 自然就是在刪除群組的啰~用法很簡單:
?
[root@www ~]# groupdel [groupname] 范例一:將剛剛的 mygroup 刪除! [root@www ~]# groupdel mygroup 范例二:若要刪除 vbird1 這個群組的話? [root@www ~]# groupdel vbird1 groupdel: cannot remove user's primary group.?
?
為什么 mygroup 可以刪除,但是 vbird1 就不能刪除呢?原因很簡單,『 有某個賬號 (/etc/passwd) 的 initial group 使用該群組! 』 如果查閱一下,你會發(fā)現(xiàn)在 /etc/passwd 內(nèi)的 vbird1 第四欄的 GID 就是 /etc/group 內(nèi)的 vbird1 那個群組的 GID ,所以啰,當然無法刪除~否則 vbird1 這個用戶登陸系統(tǒng)后, 就會找不到 GID ,那可是會造成很大的困擾的!那么如果硬要刪除 vbird1 這個群組呢? 你『 必須要確認 /etc/passwd 內(nèi)的賬號沒有任何人使用該群組作為 initial group 』才行喔!所以,你可以:
- 修改 vbird1 的 GID ,或者是:
- 刪除 vbird1 這個使用者。
- gpasswd:群組管理員功能
如果系統(tǒng)管理員太忙碌了,導致某些賬號想要加入某個項目時找不到人幫忙!這個時候可以創(chuàng)建『群組管理員』喔! 什么是群組管理員呢?就是讓某個群組具有一個管理員,這個群組管理員可以管理哪些賬號可以加入/移出該群組! 那要如何『創(chuàng)建一個群組管理員』呢?就得要透過 gpasswd 啰!
?
# 關(guān)于系統(tǒng)管理員(root)做的動作: [root@www ~]# gpasswd groupname [root@www ~]# gpasswd [-A user1,...] [-M user3,...] groupname [root@www ~]# gpasswd [-rR] groupname 選項與參數(shù): :若沒有任何參數(shù)時,表示給予 groupname 一個口令(/etc/gshadow) -A :將 groupname 的主控權(quán)交由后面的使用者管理(該群組的管理員) -M :將某些賬號加入這個群組當中! -r :將 groupname 的口令移除 -R :讓 groupname 的口令欄失效 # 關(guān)于群組管理員(Group administrator)做的動作: [someone@www ~]$ gpasswd [-ad] user groupname 選項與參數(shù): -a :將某位使用者加入到 groupname 這個群組當中! -d :將某位使用者移除出 groupname 這個群組當中。 范例一:創(chuàng)建一個新群組,名稱為 testgroup 且群組交由 vbird1 管理: [root@www ~]# groupadd testgroup <==先創(chuàng)建群組 [root@www ~]# gpasswd testgroup <==給這個群組一個口令吧! Changing the password for group testgroup New Password: Re-enter new password: # 輸入兩次口令就對了! [root@www ~]# gpasswd -A vbird1 testgroup <==加入群組管理員為 vbird1 [root@www ~]# grep testgroup /etc/group /etc/gshadow /etc/group:testgroup:x:702: /etc/gshadow:testgroup:$1$I5ukIY1.$o5fmW.cOsc8.K.FHAFLWg0:vbird1: # 很有趣吧!此時 vbird1 則擁有 testgroup 的主控權(quán)喔!身份有點像板主啦! 范例二:以 vbird1 登陸系統(tǒng),并且讓他加入 vbird1, vbird3 成為 testgroup 成員 [vbird1@www ~]$ id uid=504(vbird1) gid=505(vbird1) groups=505(vbird1) .... # 看得出來,vbird1 尚未加入 testgroup 群組喔! [vbird1@www ~]$ gpasswd -a vbird1 testgroup [vbird1@www ~]$ gpasswd -a vbird3 testgroup [vbird1@www ~]$ grep testgroup /etc/group testgroup:x:702:vbird1,vbird3?
?
很有趣的一個小實驗吧!我們可以讓 testgroup 成為一個可以公開的群組,然后創(chuàng)建起群組管理員, 群組管理員可以有多個。在這個案例中,我將 vbird1 配置為 testgroup 的群組管理員,所以 vbird1 就可以自行添加群組成員啰~呼呼!然后,該群組成員就能夠使用 newgrp 啰~

賬號管理不是隨意建置幾個賬號就算了!有時候我們需要考慮到一部主機上面可能有多個賬號在協(xié)同工作! 舉例來說,在大學任教時,我們學校的專題生是需要分組的,這些同一組的同學間必須要能夠互相修改對方的數(shù)據(jù)文件, 但是同時這些同學又需要保留自己的私密數(shù)據(jù),因此直接公開家目錄是不適宜的。那該如何是好? 為此,我們底下提供幾個例子來讓大家思考看看啰:
任務(wù)一:單純的完成上頭交代的任務(wù),假設(shè)我們需要的賬號數(shù)據(jù)如下,你該如何實作?
賬號名稱 | 賬號全名 | 支持次要群組 | 是否可登陸主機 | 口令 |
myuser1 | 1st user | mygroup1 | 可以 | password |
myuser2 | 2nd user | mygroup1 | 可以 | password |
myuser3 | 3rd user | 無額外支持 | 不可以 | password |
?
處理的方法如下所示:
?
# 先處理賬號相關(guān)屬性的數(shù)據(jù): [root@www ~]# groupadd mygroup1 [root@www ~]# useradd -G mygroup1 -c "1st user" myuser1 [root@www ~]# useradd -G mygroup1 -c "2nd user" myuser2 [root@www ~]# useradd -c "3rd user" -s /sbin/nologin myuser3 # 再處理賬號的口令相關(guān)屬性的數(shù)據(jù): [root@www ~]# echo "password" | passwd --stdin myuser1 [root@www ~]# echo "password" | passwd --stdin myuser2 [root@www ~]# echo "password" | passwd --stdin myuser3?
?
要注意的地方主要有:myuser1 與 myuser2 都有支持次要群組,但該群組不見得會存在,因此需要先手動創(chuàng)建他! 然后 myuser3 是『不可登陸系統(tǒng)』的賬號,因此需要使用 /sbin/nologin 這個 shell 來給予,這樣該賬號就無法登陸啰! 這樣是否理解啊!接下來再來討論比較難一些的環(huán)境!如果是專題環(huán)境該如何制作?
?
任務(wù)二:我的使用者 pro1, pro2, pro3 是同一個項目計劃的開發(fā)人員,我想要讓這三個用戶在同一個目錄底下工作, 但這三個用戶還是擁有自己的家目錄與基本的私有群組。假設(shè)我要讓這個項目計劃在 /srv/projecta 目錄下開發(fā), 可以如何進行?
?
# 1. 假設(shè)這三個賬號都尚未創(chuàng)建,可先創(chuàng)建一個名為 projecta 的群組, # 再讓這三個用戶加入其次要群組的支持即可: [root@www ~]# groupadd projecta [root@www ~]# useradd -G projecta -c "projecta user" pro1 [root@www ~]# useradd -G projecta -c "projecta user" pro2 [root@www ~]# useradd -G projecta -c "projecta user" pro3 [root@www ~]# echo "password" | passwd --stdin pro1 [root@www ~]# echo "password" | passwd --stdin pro2 [root@www ~]# echo "password" | passwd --stdin pro3 # 2. 開始創(chuàng)建此項目的開發(fā)目錄: [root@www ~]# mkdir /srv/projecta [root@www ~]# chgrp projecta /srv/projecta [root@www ~]# chmod 2770 /srv/projecta [root@www ~]# ll -d /srv/projecta drwxrws--- 2 root projecta 4096 Feb 27 11:29 /srv/projecta?
?
由于此項目計劃只能夠給 pro1, pro2, pro3 三個人使用,所以 /srv/projecta 的權(quán)限配置一定要正確才行! 所以該目錄群組一定是 projecta ,但是權(quán)限怎么會是 2770 呢還記得 第七章談到的 SGID 吧?為了讓三個使用者能夠互相修改對方的文件, 這個 SGID 是必須要存在的喔!如果連這里都能夠理解,嘿嘿!您的賬號管理已經(jīng)有一定程度的概念啰! ^_^
?
但接下來有個困擾的問題發(fā)生了!假如任務(wù)一的 myuser1 是 projecta 這個項目的助理,他需要這個項目的內(nèi)容, 但是他『不可以修改』項目目錄內(nèi)的任何數(shù)據(jù)!那該如何是好?你或許可以這樣做:
- 將 myuser1 加入 projecta 這個群組的支持,但是這樣會讓 myuser1 具有完整的 /srv/projecta 的權(quán)限, myuser1 是可以刪除該目錄下的任何數(shù)據(jù)的!這樣是有問題的;
- 將 /srv/projecta 的權(quán)限改為 2775 ,讓 myuser1 可以進入查閱數(shù)據(jù)。但此時會發(fā)生所有其他人均可進入該目錄查閱的困擾! 這也不是我們要的環(huán)境。
真要命!傳統(tǒng)的 Linux 權(quán)限無法針對某個個人配置專屬的權(quán)限嗎?其實是可以啦!接下來我們就來談?wù)勥@個功能吧!
?
3. 主機的細部權(quán)限規(guī)劃:ACL 的使用
從
第六章
開始,我們就一直強調(diào) Linux 的權(quán)限概念是非常重要的! 但是傳統(tǒng)的權(quán)限僅有三種身份 (owner, group, others) 搭配三種權(quán)限 (r,w,x) 而已,并沒有辦法單純的針對某一個使用者或某一個群組來配置特定的權(quán)限需求,例如前一小節(jié)最后的那個任務(wù)! 此時就得要使用 ACL 這個機制啦!這玩意挺有趣的,底下我們就來談一談:

ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統(tǒng)的 owner,group,others 的 read,write,execute 權(quán)限之外的細部權(quán)限配置。ACL 可以針對單一使用者,單一文件或目錄來進行 r,w,x 的權(quán)限規(guī)范,對于需要特殊權(quán)限的使用狀況非常有幫助。
那 ACL 主要可以針對哪些方面來控制權(quán)限呢?他主要可以針對幾個項目:
- 使用者 (user):可以針對使用者來配置權(quán)限;
- 群組 (group):針對群組為對象來配置其權(quán)限;
- 默認屬性 (mask):還可以針對在該目錄下在創(chuàng)建新文件/目錄時,規(guī)范新數(shù)據(jù)的默認權(quán)限;
好了,再來看看如何讓你的文件系統(tǒng)可以支持 ACL 吧!

由于 ACL 是傳統(tǒng)的 Unix-like 操作系統(tǒng)權(quán)限的額外支持項目,因此要使用 ACL 必須要有文件系統(tǒng)的支持才行。目前絕大部分的文件系統(tǒng)都有支持 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。在我們的 CentOS 5.x 當中,默認使用 Ext3 是啟動 ACL 支持的!至于察看你的文件系統(tǒng)是否支持 ACL 可以這樣看:
?
[root@www ~]# mount <==直接查閱掛載參數(shù)的功能 /dev/hda2 on / type ext3 (rw) /dev/hda3 on /home type ext3 (rw) # 其他項目鳥哥都將他省略了!假設(shè)我們只要看這兩個裝置。但沒有看到 acl 喔! [root@www ~]# dumpe2fs -h /dev/hda2 <==由 superblock 內(nèi)容去查詢 ....(前面省略).... Default mount options: user_xattr acl ....(后面省略)....?
?
由 mount 單純?nèi)ゲ殚啿灰姷每梢钥吹綄嶋H的項目,由于目前新的 distributions 常常會主動加入某些默認功能, 如上表所示,其實 CentOS 5.x 在默認的情況下 (Default mount options:) 就幫你加入 acl 的支持了! 那如果你的系統(tǒng)默認不會幫你加上 acl 的支持呢?那你可以這樣做:
?
[root@www ~]# mount -o remount,acl / [root@www ~]# mount /dev/hda2 on / type ext3 (rw,acl) # 這樣就加入了!但是如果想要每次啟動都生效,那就這樣做: [root@www ~]# vi /etc/fstab LABEL=/1 / ext3 defaults,acl 1 1?
?
如果你不確定或者是不會使用 dumpe2fs 觀察你的文件系統(tǒng),那么建議直接將上述的 /etc/fstab 里面的內(nèi)容修改一下即可!

好了,讓你的 filesystem 啟動 ACL 支持后,接下來該如何配置與觀察 ACL 呢? 很簡單,利用這兩個命令就可以了:
- getfacl:取得某個文件/目錄的 ACL 配置項目;
- setfacl:配置某個目錄/文件的 ACL 規(guī)范。
先讓我們來瞧一瞧 setfacl 如何使用吧!
- setfacl 命令用法
[root@www ~]# setfacl [-bkRd] [{-m|-x} acl參數(shù)] 目標文件名 選項與參數(shù): -m :配置后續(xù)的 acl 參數(shù)給文件使用,不可與 -x 合用; -x :刪除后續(xù)的 acl 參數(shù),不可與 -m 合用; -b :移除所有的 ACL 配置參數(shù); -k :移除默認的 ACL 參數(shù),關(guān)于所謂的『默認』參數(shù)于后續(xù)范例中介紹; -R :遞歸配置 acl ,亦即包括次目錄都會被配置起來; -d :配置『默認 acl 參數(shù)』的意思!只對目錄有效,在該目錄新建的數(shù)據(jù)會引用此默認值?
上面談到的是 acl 的選項功能,那么如何配置 ACL 的特殊權(quán)限呢?特殊權(quán)限的配置方法有很多, 我們先來談?wù)勛畛R姷模褪轻槍我皇褂谜叩呐渲梅绞剑?
?
# 1. 針對特定使用者的方式: # 配置規(guī)范:『 u:[使用者賬號列表]:[rwx] 』,例如針對 vbird1 的權(quán)限規(guī)范 rx : [root@www ~]# touch acl_test1 [root@www ~]# ll acl_test1 -rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1 [root@www ~]# setfacl -m u:vbird1:rx acl_test1 [root@www ~]# ll acl_test1 -rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1 # 權(quán)限部分多了個 + ,且與原本的權(quán)限 (644) 看起來差異很大!但要如何查閱呢? [root@www ~]# setfacl -m u::rwx acl_test1 [root@www ~]# ll acl_test1 -rwxr-xr--+ 1 root root 0 Feb 27 13:28 acl_test1 # 無使用者列表,代表配置該文件擁有者,所以上面顯示 root 的權(quán)限成為 rwx 了!?
?
上述動作為最簡單的 ACL 配置,利用『 u:使用者:權(quán)限 』的方式來配置的啦!配置前請加上 -m 這個選項。 如果一個文件配置了 ACL 參數(shù)后,他的權(quán)限部分就會多出一個 + 號了!但是此時你看到的權(quán)限與實際權(quán)限可能就會有點誤差! 那要如何觀察呢?就透過 getfacl 吧!
- getfacl 命令用法
[root@www ~]# getfacl filename 選項與參數(shù): getfacl 的選項幾乎與 setfacl 相同!所以鳥哥這里就免去了選項的說明啊! # 請列出剛剛我們配置的 acl_test1 的權(quán)限內(nèi)容: [root@www ~]# getfacl acl_test1 # file: acl_test1 <==說明檔名而已! # owner: root <==說明此文件的擁有者,亦即 ll 看到的第三使用者字段 # group: root <==此文件的所屬群組,亦即 ll 看到的第四群組字段 user::rwx <==使用者列表欄是空的,代表文件擁有者的權(quán)限 user:vbird1:r-x <==針對 vbird1 的權(quán)限配置為 rx ,與擁有者并不同! group::r-- <==針對文件群組的權(quán)限配置僅有 r mask::r-x <==此文件默認的有效權(quán)限 (mask) other::r-- <==其他人擁有的權(quán)限啰!?
上面的數(shù)據(jù)非常容易查閱吧?顯示的數(shù)據(jù)前面加上 # 的,代表這個文件的默認屬性,包括文件名、文件擁有者與文件所屬群組。 底下出現(xiàn)的 user, group, mask, other 則是屬于不同使用者、群組與有效權(quán)限(mask)的配置值。 以上面的結(jié)果來看,我們剛剛配置的 vbird1 對于這個文件具有 r 與 x 的權(quán)限啦!這樣看的懂嗎? 如果看的懂的話,接下來讓我們在測試其他類型的 setfacl 配置吧!
?
# 2. 針對特定群組的方式: # 配置規(guī)范:『 g:[群組列表]:[rwx] 』,例如針對 mygroup1 的權(quán)限規(guī)范 rx : [root@www ~]# setfacl -m g:mygroup1:rx acl_test1 [root@www ~]# getfacl acl_test1 # file: acl_test1 # owner: root # group: root user::rwx user:vbird1:r-x group::r-- group:mygroup1:r-x <==這里就是新增的部分!多了這個群組的權(quán)限配置! mask::r-x other::r--?
?
基本上,群組與使用者的配置并沒有什么太大的差異啦!如上表所示,非常容易了解意義。不過,你應該會覺得奇怪的是, 那個 mask 是什么東西啊?其實他有點像是『有效權(quán)限』的意思!他的意義是: 使用者或群組所配置的權(quán)限必須要存在于 mask 的權(quán)限配置范圍內(nèi)才會生效,此即『有效權(quán)限 (effective permission)』 我們舉個例子來看,如下所示:
?
# 3. 針對有效權(quán)限 mask 的配置方式: # 配置規(guī)范:『 m:[rwx] 』,例如針對剛剛的文件規(guī)范為僅有 r : [root@www ~]# setfacl -m m:r acl_test1 [root@www ~]# getfacl acl_test1 # file: acl_test1 # owner: root # group: root user::rwx user:vbird1:r-x #effective:r-- <==vbird1+mask均存在者,僅有 r 而已! group::r-- group:mygroup1:r-x #effective:r-- mask::r-- other::r--?
?
您瞧,vbird1 與 mask 的集合發(fā)現(xiàn)僅有 r 存在,因此 vbird1 僅具有 r 的權(quán)限而已,并不存在 x 權(quán)限!這就是 mask 的功能了!我們可以透過使用 mask 來規(guī)范最大允許的權(quán)限,就能夠避免不小心開放某些權(quán)限給其他使用者或群組了。 不過,通常鳥哥都是將 mask 配置為 rwx 啦!然后再分別依據(jù)不同的使用者/群組去規(guī)范她們的權(quán)限就是了。
例題:
將前一小節(jié)任務(wù)二中 /srv/projecta 這個目錄,讓 myuser1 可以進入查閱,但 myuser1 不具有修改的權(quán)力。
答:
由于 myuser1 是獨立的使用者與群組,而 /srv 是附屬于 / 之下的,因此 /srv 已經(jīng)具有 acl 的功能。 透過如下的配置即可搞定:
# 1. 先測試看看,使用 myuser1 能否進入該目錄? [myuser1@www ~]$ cd /srv/projecta -bash: cd: /srv/projecta: Permission denied <==確實不可進入! # 2. 開始用 root 的身份來配置一下該目錄的權(quán)限吧! [root@www ~]# setfacl -m u:myuser1:rx /srv/projecta [root@www ~]# getfacl /srv/projecta # file: srv/projecta # owner: root # group: projecta user::rwx user:myuser1:r-x <==還是要看看有沒有配置成功喔! group::rwx mask::rwx other::--- # 3. 還是得要使用 myuser1 去測試看看結(jié)果! [myuser1@www ~]$ cd /srv/projecta [myuser1@www projecta]$ ll -a drwxrws---+ 2 root projecta 4096 Feb 27 11:29 . <==確實可以查詢檔名 drwxr-xr-x 4 root root 4096 Feb 27 11:29 .. [myuser1@www projecta]$ touch testing touch: cannot touch `testing': Permission denied <==確實不可以寫入!? 請注意,上述的 1, 3 步驟使用 myuser1 的身份,2步驟才是使用 root 去配置的! |
上面的配置我們就完成了之前任務(wù)二的后續(xù)需求喔!這么簡單呢!接下來讓我們來測試一下,如果我用 root 或者是 pro1 的身份去 /srv/projecta 添加文件或目錄時,該文件或目錄是否能夠具有 ACL 的配置? 意思就是說, ACL 的權(quán)限配置是否能夠被次目錄所『繼承?』 先試看看:
?
[root@www ~]# cd /srv/projecta [root@www ~]# touch abc1 [root@www ~]# mkdir abc2 [root@www ~]# ll -d abc* -rw-r--r-- 1 root projecta 0 Feb 27 14:37 abc1 drwxr-sr-x 2 root projecta 4096 Feb 27 14:37 abc2?
?
你可以明顯的發(fā)現(xiàn),權(quán)限后面都沒有 + ,代表這個 acl 屬性并沒有繼承喔!如果你想要讓 acl 在目錄底下的數(shù)據(jù)都有繼承的功能,那就得如下這樣做了!
?
# 4. 針對默認權(quán)限的配置方式: # 配置規(guī)范:『 d:[ug]:使用者列表:[rwx] 』 # 讓 myuser1 在 /srv/projecta 底下一直具有 rx 的默認權(quán)限! [root@www ~]# setfacl -m d:u:myuser1:rx /srv/projecta [root@www ~]# getfacl /srv/projecta # file: srv/projecta # owner: root # group: projecta user::rwx user:myuser1:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:myuser1:r-x default:group::rwx default:mask::rwx default:other::--- [root@www ~]# cd /srv/projecta [root@www projecta]# touch zzz1 [root@www projecta]# mkdir zzz2 [root@www projecta]# ll -d zzz* -rw-rw----+ 1 root projecta 0 Feb 27 14:57 zzz1 drwxrws---+ 2 root projecta 4096 Feb 27 14:57 zzz2 # 看吧!確實有繼承喔!然后我們使用 getfacl 再次確認看看! [root@www projecta]# getfacl zzz2 # file: zzz2 # owner: root # group: projecta user::rwx user:myuser1:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:myuser1:r-x default:group::rwx default:mask::rwx default:other::---?
?
透過這個『針對目錄來配置的默認 ACL 權(quán)限配置值』的項目,我們可以讓這些屬性繼承到次目錄底下呢! 非常方便啊!那如果想要讓 ACL 的屬性全部消失又要如何處理?透過『 setfacl -b 檔名 』即可啦! 太簡單了!鳥哥就不另外介紹了!請自行測試測試吧!
?
4. 使用者身份切換
什么?在 Linux 系統(tǒng)當中還要作身份的變換?這是為啥?可能有底下幾個原因啦!
-
使用一般賬號:系統(tǒng)平日操作的好習慣
事實上,為了安全的緣故,一些老人家都會建議你,盡量以一般身份使用者來操作 Linux 的日常作業(yè)!等到需要配置系統(tǒng)環(huán)境時, 才變換身份成為 root 來進行系統(tǒng)管理,相對比較安全啦!避免作錯一些嚴重的命令,例如恐怖的『 rm -rf / 』(千萬作不得!)
-
用較低權(quán)限啟動系統(tǒng)服務(wù)
相對于系統(tǒng)安全,有的時候,我們必須要以某些系統(tǒng)賬號來進行程序的運行。 舉例來說, Linux 主機上面的一套軟件,名稱為 apache ,我們可以額外創(chuàng)建一個名為 apache 的用戶來啟動 apache 軟件啊,如此一來,如果這個程序被攻破,至少系統(tǒng)還不至于就損毀了~
-
軟件本身的限制
在遠古時代的 telnet 程序中,該程序默認是不許使用 root 的身份登陸的,telnet 會判斷登陸者的 UID, 若 UID 為 0 的話,那就直接拒絕登陸了。所以,你只能使用一般使用者來登陸 Linux 服務(wù)器。 此外, ssh ( 注3 ) 也可以配置拒絕 root 登陸喔!那如果你有系統(tǒng)配置需求該如何是好啊?就變換身份啊!
由于上述考慮,所以我們都是使用一般賬號登陸系統(tǒng)的,等有需要進行系統(tǒng)維護或軟件升級時才轉(zhuǎn)為 root 的身份來動作。 那如何讓一般使用者轉(zhuǎn)變身份成為 root 呢?主要有兩種方式喔:
-
以『 su - 』直接將身份變成 root 即可,但是
這個命令卻需要 root 的口令
,也就是說,如果你要以 su 變成 root 的話,你的一般使用者就必須要有 root 的口令才行;
- 以『 sudo 命令 』運行 root 的命令串,由于 sudo 需要事先配置妥當,且 sudo 需要輸入用戶自己的口令, 因此多人共管同一部主機時, sudo 要比 su 來的好喔!至少 root 口令不會流出去!
底下我們就來說一說 su 跟 sudo 的用法啦!

su 是最簡單的身份切換命令了,他可以進行任何身份的切換唷!方法如下:
?
[root@www ~]# su [-lm] [-c 命令] [username] 選項與參數(shù): - :單純使用 - 如『 su - 』代表使用 login-shell 的變量文件讀取方式來登陸系統(tǒng); 若使用者名稱沒有加上去,則代表切換為 root 的身份。 -l :與 - 類似,但后面需要加欲切換的使用者賬號!也是 login-shell 的方式。 -m :-m 與 -p 是一樣的,表示『使用目前的環(huán)境配置,而不讀取新使用者的配置文件』 -c :僅進行一次命令,所以 -c 后面可以加上命令喔!?
?
上表的解釋當中有出現(xiàn)之前 第十一章 談過的 login-shell 配置文件讀取方式,如果你忘記那是啥東西, 請先回去第十一章瞧瞧再回來吧!這個 su 的用法當中,有沒有加上那個減號『 - 』差很多喔! 因為涉及 login-shell 與 non-login shell 的變量讀取方法。這里讓我們以一個小例子來說明吧!
?
范例一:假設(shè)你原本是 vbird1 的身份,想要使用 non-login shell 的方式變成 root [vbird1@www ~]$ su <==注意提示字符,是 vbird1 的身份喔! Password: <==這里輸入 root 的口令喔! [root@www vbird1]# id <==提示字符的目錄是 vbird1 喔! uid=0(root) gid=0(root) groups=0(root),1(bin),... <==確實是 root 的身份! [root@www vbird1]# env | grep 'vbird1' USER=vbird1 PATH=/usr/local/bin:/bin:/usr/bin:/home/vbird1/bin <==這個影響最大! MAIL=/var/spool/mail/vbird1 <==收到的 mailbox 是 vbird1 PWD=/home/vbird1 <==并非 root 的家目錄 LOGNAME=vbird1 # 雖然你的 UID 已經(jīng)是具有 root 的身份,但是看到上面的輸出信息嗎? # 還是有一堆變量為原本 vbird1 的身份,所以很多數(shù)據(jù)還是無法直接利用。 [root@www vbird1]# exit <==這樣可以離開 su 的環(huán)境!?
?
單純使用『 su 』切換成為 root 的身份, 讀取的變量配置方式為 non-login shell 的方式,這種方式很多原本的變量不會被改變 , 尤其是我們之前談過很多次的 PATH 這個變量,由于沒有改變成為 root 的環(huán)境 (一堆 /sbin, /usr/sbin 等目錄都沒有被包含進來), 因此很多 root 慣用的命令就只能使用絕對路徑來運行咯。其他的還有 MAIL 這個變量,你輸入 mail 時, 收到的郵件竟然還是 vbird1 的,而不是 root 本身的郵件!是否覺得很奇怪啊!所以切換身份時,請務(wù)必使用如下的范例二:
?
范例二:使用 login shell 的方式切換為 root 的身份并觀察變量 [vbird1@www ~]$ su - Password: <==這里輸入 root 的口令喔! [root@www ~]# env | grep root USER=root MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin PWD=/root HOME=/root LOGNAME=root # 了解差異了吧?下次變換成為 root 時,記得最好使用 su - 喔! [root@www ~]# exit <==這樣可以離開 su 的環(huán)境!?
?
上述的作法是讓使用者的身份變成 root 并開始操作系統(tǒng),如果想要離開 root 的身份則得要利用 exit 離開才行。 那我如果只是想要運行『一個只有 root 才能進行的命令,且運行完畢就恢復原本的身份』呢?那就可以加上 -c 這個選項啰! 請參考底下范例三!
?
范例三:vbird1 想要運行『 head -n 3 /etc/shadow 』一次,且已知 root 口令 [vbird1@www ~]$ head -n 3 /etc/shadow head: cannot open `/etc/shadow' for reading: Permission denied [vbird1@www ~]$ su - -c "head -n 3 /etc/shadow" Password: <==這里輸入 root 的口令喔! root:$1$/30QpEWEBEZXRD0bh6rAABCEQD.BAH0:14126:0:99999:7::: bin:*:14126:0:99999:7::: daemon:*:14126:0:99999:7::: [vbird1@www ~]$ <==注意看,身份還是 vbird1 喔!繼續(xù)使用舊的身份進行系統(tǒng)操作!?
?
由于 /etc/shadow 權(quán)限的關(guān)系,該文件僅有 root 可以查閱。為了查閱該文件,所以我們必須要使用 root 的身份工作。 但我只想要進行一次該命令而已,此時就使用類似上面的語法吧!好,那接下來,如果我是 root 或者是其他人, 想要變更成為某些特殊賬號,可以使用如下的方法來切換喔!
?
范例四:原本是 vbird1 這個使用者,想要變換身份成為 dmtsai 時? [vbird1@www ~]$ su -l dmtsai Password: <==這里輸入 dmtsai 的口令喔! [dmtsai@www ~]$ su - Password: <==這里輸入 root 的口令喔! [root@www ~]# id sshd uid=74(sshd) gid=74(sshd) groups=74(sshd) ... <==確實有存在此人 [root@www ~]# su -l sshd This account is currently not available. <==竟然說此人無法切換? [root@www ~]# finger sshd Login: sshd Name: Privilege-separated SSH Directory: /var/empty/sshd Shell: /sbin/nologin [root@www ~]# exit <==離開第二次的 su [dmtsai@www ~]$ exit <==離開第一次的 su [vbird1@www ~]$ exit <==這才是最初的環(huán)境!?
?
su 就這樣簡單的介紹完畢,總結(jié)一下他的用法是這樣的:
-
若要完整的切換到新使用者的環(huán)境,必須要使用『 su - username 』或『 su -l username 』, 才會連同 PATH/USER/MAIL 等變量都轉(zhuǎn)成新用戶的環(huán)境;
-
如果僅想要運行一次 root 的命令,可以利用『 su - -c "命令串" 』的方式來處理;
- 使用 root 切換成為任何使用者時,并不需要輸入新用戶的口令;
雖然使用 su 很方便啦,不過缺點是, 當我的主機是多人共管的環(huán)境時,如果大家都要使用 su 來切換成為 root 的身份,那么不就每個人都得要知道 root 的口令 ,這樣口令太多人知道可能會流出去, 很不妥當呢!怎辦?透過 sudo 來處理即可!

相對于 su 需要了解新切換的用戶口令 (常常是需要 root 的口令), sudo 的運行則僅需要自己的口令即可! 甚至可以配置不需要口令即可運行 sudo 呢!由于 sudo 可以讓你以其他用戶的身份運行命令 (通常是使用 root 的身份來運行命令),因此
并非所有人都能夠運行 sudo , 而是僅有規(guī)范到 /etc/sudoers 內(nèi)的用戶才能夠運行 sudo 這個命令
喔!說的這么神奇,底下就來瞧瞧那 sudo 如何使用?
- sudo 的命令用法
由于 一開始系統(tǒng)默認僅有 root 可以運行 sudo ,因此底下的范例我們先以 root 的身份來運行,等到談到 visudo 時,再以一般使用者來討論其他 sudo 的用法吧! sudo 的語法如下:
?
[root@www ~]# sudo [-b] [-u 新使用者賬號] 選項與參數(shù): -b :將后續(xù)的命令放到背景中讓系統(tǒng)自行運行,而不與目前的 shell 產(chǎn)生影響 -u :后面可以接欲切換的使用者,若無此項則代表切換身份為 root 。 范例一:你想要以 sshd 的身份在 /tmp 底下創(chuàng)建一個名為 mysshd 的文件 [root@www ~]# sudo -u sshd touch /tmp/mysshd [root@www ~]# ll /tmp/mysshd -rw-r--r-- 1 sshd sshd 0 Feb 28 17:42 /tmp/mysshd # 特別留意,這個文件的權(quán)限是由 sshd 所創(chuàng)建的情況喔! 范例二:你想要以 vbird1 的身份創(chuàng)建 ~vbird1/www 并于其中創(chuàng)建 index.html 文件 [root@www ~]# sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \ > echo 'This is index.html file' > index.html" [root@www ~]# ll -a ~vbird1/www drwxr-xr-x 2 vbird1 vbird1 4096 Feb 28 17:51 . drwx------ 5 vbird1 vbird1 4096 Feb 28 17:51 .. -rw-r--r-- 1 vbird1 vbird1 24 Feb 28 17:51 index.html # 要注意,創(chuàng)建者的身份是 vbird1 ,且我們使用 sh -c "一串命令" 來運行的!?
?
sudo 可以讓你切換身份來進行某項任務(wù),例如上面的兩個范例。范例一中,我們的 root 使用 sshd 的權(quán)限去進行某項任務(wù)! 要注意,因為我們無法使用『 su - sshd 』去切換系統(tǒng)賬號 (因為系統(tǒng)賬號的 shell 是 /sbin/nologin), 這個時候 sudo 真是他 X 的好用了!立刻以 sshd 的權(quán)限在 /tmp 底下創(chuàng)建文件!查閱一下文件權(quán)限你就了解意義啦! 至于范例二則更使用多重命令串 (透過分號 ; 來延續(xù)命令進行),使用 sh -c 的方法來運行一連串的命令, 如此真是好方便!
但是 sudo 默認僅有 root 能使用啊!為什么呢?因為 sudo 的運行是這樣的流程:
- 當用戶運行 sudo 時,系統(tǒng)于 /etc/sudoers 文件中搜尋該使用者是否有運行 sudo 的權(quán)限;
- 若使用者具有可運行 sudo 的權(quán)限后,便讓使用者『輸入用戶自己的口令』來確認;
- 若口令輸入成功,便開始進行 sudo 后續(xù)接的命令(但 root 運行 sudo 時,不需要輸入口令);
- 若欲切換的身份與運行者身份相同,那也不需要輸入口令。
所以說,sudo 運行的重點是:『
能否使用 sudo 必須要看 /etc/sudoers 的配置值, 而可使用 sudo 者是透過輸入用戶自己的口令來運行后續(xù)的命令串
』喔!由于能否使用與 /etc/sudoers 有關(guān), 所以我們當然要去編輯 sudoers 文件啦!不過,因為該文件的內(nèi)容是有一定的規(guī)范的,因此直接使用 vi 去編輯是不好的。 此時,我們得要透過 visudo 去修改這個文件喔!
- visudo 與 /etc/sudoers
從上面的說明我們可以知道, 除了 root 之外的其他賬號,若想要使用 sudo 運行屬于 root 的權(quán)限命令,則 root 需要先使用 visudo 去修改 /etc/sudoers ,讓該賬號能夠使用全部或部分的 root 命令功能 。為什么要使用 visudo 呢?這是因為 /etc/sudoers 是有配置語法的,如果配置錯誤那會造成無法使用 sudo 命令的不良后果。因此才會使用 visudo 去修改, 并在結(jié)束離開修改畫面時,系統(tǒng)會去檢驗 /etc/sudoers 的語法就是了。
一般來說,visudo 的配置方式有幾種簡單的方法喔,底下我們以幾個簡單的例子來分別說明:
-
單一用戶可進行 root 所有命令,與 sudoers 文件語法:
假如我們要讓 vbird1 這個賬號可以使用 root 的任何命令,那么可以簡單的這樣進行修改即可:
[root@www ~]# visudo ....(前面省略).... root ALL=(ALL) ALL <==找到這一行,大約在 76 行左右 vbird1 ALL=(ALL) ALL <==這一行是你要新增的! ....(前面省略)....
?有趣吧!其實 visudo 只是利用 vi 將 /etc/sudoers 文件呼叫出來進行修改而已,所以這個文件就是 /etc/sudoers 啦! 這個文件的配置其實很簡單,如上面所示,如果你找到 76 行 (有 root 配置的那行) 左右,看到的數(shù)據(jù)就是:
使用者賬號 登陸者的來源主機名=(可切換的身份) 可下達的命令 root ALL=(ALL) ALL <==這是默認值
?上面這一行的四個組件意義是:
- 系統(tǒng)的哪個賬號可以使用 sudo 這個命令的意思,默認為 root 這個賬號;
- 當這個賬號由哪部主機聯(lián)機到本 Linux 主機,意思是這個賬號可能是由哪一部網(wǎng)絡(luò)主機聯(lián)機過來的, 這個配置值可以指定客戶端計算機(信任用戶的意思)。默認值 root 可來自任何一部網(wǎng)絡(luò)主機
- 這個賬號可以切換成什么身份來下達后續(xù)的命令,默認 root 可以切換成任何人;
- 可用該身份下達什么命令? 這個命令請務(wù)必使用絕對路徑撰寫 。 默認 root 可以切換任何身份且進行任何命令之意。
[vbird1@www ~]$ tail -n 1 /etc/shadow <==注意!身份是 vbird1 tail: cannot open `/etc/shadow' for reading: Permission denied # 因為不是 root 嘛!所以當然不能查詢 /etc/shadow [vbird1@www ~]$ sudo tail -n 1 /etc/shadow <==透過 sudo We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. <==這里僅是一些說明與警示項目 #2) Think before you type. #3) With great power comes great responsibility. Password: <==注意啊!這里輸入的是『 vbird1 自己的口令 』 pro3:$1$GfinyJgZ$9J8IdrBXXMwZIauANg7tW0:14302:0:99999:7::: # 看!vbird1 竟然可以查詢 shadow !
?注意到了吧!vbird1 輸入自己的口令就能夠運行 root 的命令!所以,系統(tǒng)管理員當然要了解 vbird1 這個用戶的『 操守 』才行!否則隨便配置一個用戶,他惡搞系統(tǒng)怎辦?另外,一個一個配置太麻煩了, 能不能使用群組的方式來配置呢?參考底下的方式吧。
-
利用群組以及免口令的功能處理 visudo
我們在本章前面曾經(jīng)創(chuàng)建過 pro1, pro2, pro3 ,這三個用戶能否透過群組的功能讓這三個人可以管理系統(tǒng)? 可以的,而且很簡單!同樣我們使用實際案例來說明:
[root@www ~]# visudo <==同樣的,請使用 root 先配置 ....(前面省略).... %wheel ALL=(ALL) ALL <==大約在 84 行左右,請將這行的 # 拿掉! # 在最左邊加上 % ,代表后面接的是一個『群組』之意!改完請儲存后離開 [root@www ~]# usermod -a -G wheel pro1 <==將 pro1 加入 wheel 的支持
?上面的配置值會造成『任何加入 wheel 這個群組的使用者,就能夠使用 sudo 切換任何身份來操作任何命令』的意思。 你當然可以將 wheel 換成你自己想要的群組名。接下來,請分別切換身份成為 pro1 及 pro2 試看看 sudo 的運行。
[pro1@www ~]$ sudo tail -n 1 /etc/shadow <==注意身份是 pro1 ....(前面省略).... Password: <==輸入 pro1 的口令喔! pro3:$1$GfinyJgZ$9J8IdrBXXMwZIauANg7tW0:14302:0:99999:7::: [pro2@www ~]$ sudo tail -n 1 /etc/shadow <==注意身份是 pro2 Password: pro2 is not in the sudoers file. This incident will be reported. # 仔細看錯誤信息他是說這個 pro2 不在 /etc/sudoers 的配置中!
?這樣理解群組了吧?如果你想要讓 pro3 也支持這個 sudo 的話,不需要重新使用 visudo ,只要利用 usermod 去修改 pro3 的群組支持,讓 wheel 也支持 pro3 的話,那他就能夠進行 sudo 啰! 簡單吧!不過,既然我們都信任這些 sudo 的用戶了,能否提供『不需要口令即可使用 sudo 』呢? 就透過如下的方式:
[root@www ~]# visudo <==同樣的,請使用 root 先配置 ....(前面省略).... %wheel ALL=(ALL) NOPASSWD: ALL <==大約在 87 行左右,請將 # 拿掉! # 在最左邊加上 % ,代表后面接的是一個『群組』之意!改完請儲存后離開
?重點是那個 NOPASSWD 啦!該關(guān)鍵詞是免除口令輸入的意思喔!
-
有限制的命令操作:
上面兩點都會讓使用者能夠利用 root 的身份進行任何事情!這樣總是不太好~如果我想要讓用戶僅能夠進行部分系統(tǒng)任務(wù), 比方說,系統(tǒng)上面的 myuser1 僅能夠幫 root 修改其他用戶的口令時,亦即『當使用者僅能使用 passwd 這個命令幫忙 root 修改其他用戶的口令』時,你該如何撰寫呢?可以這樣做:
[root@www ~]# visudo <==注意是 root 身份 myuser1 ALL=(root) /usr/bin/passwd <==最后命令務(wù)必用絕對路徑
?上面的配置值指的是『myuser1 可以切換成為 root 使用 passwd 這個命令』的意思。其中要注意的是: 命令字段必須要填寫絕對路徑 才行!否則 visudo 會出現(xiàn)語法錯誤的狀況發(fā)生! 此外,上面的配置是有問題的!我們使用底下的命令操作來讓您了解:
[myuser1@www ~]$ sudo passwd myuser3 <==注意,身份是 myuser1 Password: <==輸入 myuser1 的口令 Changing password for user myuser3. <==底下改的是 myuser3 的口令喔!這樣是正確的 New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. [myuser1@www ~]$ sudo passwd Changing password for user root. <==見鬼!怎么會去改 root 的口令?
?恐怖啊!我們竟然讓 root 的口令被 myuser3 給改變了!下次 root 回來竟無法登陸系統(tǒng)...欲哭無淚~怎辦? 所以我們必須要限制用戶的命令參數(shù)!修改的方法為將上述的那行改一改先:
[root@www ~]# visudo <==注意是 root 身份 myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \ !/usr/bin/passwd root
?由于屏幕一行寫不完,我將這行寫成兩行,所以上面第一行最后加上反斜杠啰。加上驚嘆號『 ! 』代表『不可運行』的意思。 因此上面這一行會變成:可以運行『 passwd 任意字符』,但是『 passwd 』與『 passwd root 』這兩個命令例外! 如此一來 myuser1 就無法改變 root 的口令了!這樣這位使用者可以具有 root 的能力幫助你修改其他用戶的口令, 而且也不能隨意改變 root 的口令!很有用處的!
-
透過別名建置 visudo:
如上述第三點,如果我有 15 個用戶需要加入剛剛的管理員行列,那么我是否要將上述那長長的配置寫入 15 行啊? 而且如果想要修改命令或者是新增命令時,那我每行都需要重新配置,很麻煩ㄟ!有沒有更簡單的方式? 是有的!透過別名即可!我們 visudo 的別名可以是『命令別名、帳戶別名、主機別名』等。不過這里我們僅介紹帳戶別名, 其他的配置值有興趣的話,可以自行玩玩!
假設(shè)我的 pro1, pro2, pro3 與 myuser1, myuser2 要加入上述的口令管理員的 sudo 列表中, 那我可以創(chuàng)立一個帳戶別名稱為 ADMPW 的名稱,然后將這個名稱處理一下即可。處理的方式如下:
[root@www ~]# visudo <==注意是 root 身份 User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2 Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \ !/usr/bin/passwd root ADMPW ALL=(root) ADMPWCOM
?我透過 User_Alias 創(chuàng)建出一個新賬號, 這個賬號名稱一定要使用大寫字符來處理,包括 Cmnd_Alias(命令別名)、Host_Alias(來源主機名別名) 都需要使用大寫字符的 !這個 ADMPW 代表后面接的那些實際賬號。 而該賬號能夠進行的命令就如同 ADMPWCOM 后面所指定的那樣!上表最后一行則寫入這兩個別名 (賬號與命令別名), 未來要修改時,我只要修改 User_Alias 以及 Cmnd_Alias 這兩行即可!配置方面會比較簡單有彈性喔!
-
sudo 的時間間隔問題:
或許您已經(jīng)發(fā)現(xiàn)了,那就是,如果我使用同一個賬號在短時間內(nèi)重復操作 sudo 來運行命令的話, 在第二次運行 sudo 時,并不需要輸入自己的口令!sudo 還是會正確的運行喔!為什么呢? 第一次運行 sudo 需要輸入口令,是擔心由于用戶暫時離開座位,但有人跑來你的座位使用你的賬號操作系統(tǒng)之故。 所以需要你輸入一次口令重新確認一次身份。
兩次運行 sudo 的間隔在五分鐘內(nèi),那么再次運行 sudo 時就不需要再次輸入口令了, 這是因為系統(tǒng)相信你在五分鐘內(nèi)不會離開你的作業(yè),所以運行 sudo 的是同一個人!呼呼!真是很人性化的設(shè)計啊~ ^_^。不過 如果兩次 sudo 操作的間隔超過 5 分鐘,那就得要重新輸入一次你的口令了 ( 注4 )
另外要注意的是,因為使用一般賬號時,理論上不會使用到 /sbin, /usr/sbin 等目錄內(nèi)的命令,所以 $PATH 變量不會含有這些目錄,因此很多管理命令需要使用絕對路徑來下達比較妥當喔!
-
sudo 搭配 su 的使用方式:
很多時候我們需要大量運行很多 root 的工作,所以一直使用 sudo 覺得很煩ㄟ!那有沒有辦法使用 sudo 搭配 su , 一口氣將身份轉(zhuǎn)為 root ,而且還用用戶自己的口令來變成 root 呢?是有的!而且方法簡單的會讓你想笑! 我們創(chuàng)建一個 ADMINS 帳戶別名,然后這樣做:
[root@www ~]# visudo User_Alias ADMINS = pro1, pro2, pro3, myuser1 ADMINS ALL=(root) /bin/su -
?接下來,上述的 pro1, pro2, pro3, myuser1 這四個人,只要輸入『 sudo su - 』并且輸入『自己的口令』后, 立刻變成 root 的身份!不但 root 口令不會外流,用戶的管理也變的非常方便! 這也是實務(wù)上面多人共管一部主機時常常使用的技巧呢!這樣管理確實方便,不過還是要強調(diào)一下大前提, 那就是『 這些你加入的使用者,全部都是你能夠信任的用戶 』!
來源: http://vbird.dic.ksu.edu.tw/linux_basic/0410accountmanager_1.php
?
參考:Ubuntu用戶及用戶組管理命令
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
