欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Linux 賬號(hào)管理與 ACL 權(quán)限配置

系統(tǒng) 3096 0

?

參考:Ubuntu用戶及用戶組管理命令

1. Linux 的賬號(hào)與群組

管理員的工作中,相當(dāng)重要的一環(huán)就是『管理賬號(hào)』啦!因?yàn)檎麄€(gè)系統(tǒng)都是你在管理的, 并且所有一般用戶的賬號(hào)申請(qǐng),都必須要透過你的協(xié)助才行!所以你就必須要了解一下如何管理好一個(gè)服務(wù)器主機(jī)的賬號(hào)啦! 在管理 Linux 主機(jī)的賬號(hào)時(shí),我們必須先來了解一下 Linux 到底是如何辨別每一個(gè)使用者的!


小標(biāo)題的圖示 使用者標(biāo)識(shí)符: UID 與 GID

雖然我們登陸 Linux 主機(jī)的時(shí)候,輸入的是我們的賬號(hào),但是其實(shí) Linux 主機(jī)并不會(huì)直接認(rèn)識(shí)你的『賬號(hào)名稱』的,他僅認(rèn)識(shí) ID 啊 (ID 就是一組號(hào)碼啦)。 由于計(jì)算機(jī)僅認(rèn)識(shí) 0 與 1,所以主機(jī)對(duì)于數(shù)字比較有概念的;至于賬號(hào)只是為了讓人們?nèi)菀子洃浂选?而你的 ID 與賬號(hào)的對(duì)應(yīng)就在 /etc/passwd 當(dāng)中哩。

Tips:
如果你曾經(jīng)在網(wǎng)絡(luò)上下載過 tarball 類型的文件, 那么應(yīng)該不難發(fā)現(xiàn),在解壓縮之后的文件中,文件擁有者的字段竟然顯示『不明的數(shù)字』?奇怪吧?這沒什么好奇怪的,因?yàn)?Linux 說實(shí)在話,他真的只認(rèn)識(shí)代表你身份的號(hào)碼而已!
鳥哥的圖示

那么到底有幾種 ID 呢?還記得我們?cè)? 第六章 內(nèi)有提到過, 每一個(gè)文件都具有『擁有人與擁有群組』的屬性嗎?沒錯(cuò)啦~每個(gè)登陸的使用者至少都會(huì)取得兩個(gè) ID ,一個(gè)是使用者 ID (User ID ,簡(jiǎn)稱 UID)、一個(gè)是群組 ID (Group ID ,簡(jiǎn)稱 GID)。

?

那么文件如何判別他的擁有者與群組呢?其實(shí)就是利用 UID 與 GID 啦!每一個(gè)文件都會(huì)有所謂的擁有者 ID 與擁有群組 ID ,當(dāng)我們有要顯示文件屬性的需求時(shí),系統(tǒng)會(huì)依據(jù) /etc/passwd 與 /etc/group 的內(nèi)容, 找到 UID / GID 對(duì)應(yīng)的賬號(hào)與組名再顯示出來!我們可以作個(gè)小實(shí)驗(yàn),你可以用 root 的身份 vi /etc/passwd ,然后將你的一般身份的使用者的 ID 隨便改一個(gè)號(hào)碼,然后再到你的一般身份的目錄下看看原先該賬號(hào)擁有的文件,你會(huì)發(fā)現(xiàn)該文件的擁有人變成了 『數(shù)字了』呵呵!這樣可以理解了嗎?來看看底下的例子:

?

          # 1. 先察看一下,系統(tǒng)里面有沒有一個(gè)名為 dmtsai 的用戶?
[root@www ~]# grep 'dmtsai' /etc/passwd
dmtsai:x:503:504::/home/dmtsai:/bin/bash   <==是有這個(gè)賬號(hào)喔!
[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 了?因?yàn)槲募粫?huì)記錄數(shù)字而已!
# 因?yàn)槲覀儊y改,所以導(dǎo)致 503 找不到對(duì)應(yīng)的賬號(hào),因此顯示數(shù)字!

# 3. 記得將剛剛的 2000 改回來!
[root@www ~]# vi /etc/passwd
....(前面省略)....
dmtsai:x:503:504::/home/dmtsai:/bin/bash <==趕緊改回來!
        
?

?

你一定要了解的是,上面的例子僅是在說明 UID 與賬號(hào)的對(duì)應(yīng)性, 在一部正常運(yùn)行的 Linux 主機(jī)環(huán)境下,上面的動(dòng)作不可隨便進(jìn)行 , 這是因?yàn)橄到y(tǒng)上已經(jīng)有很多的數(shù)據(jù)被創(chuàng)建存在了,隨意修改系統(tǒng)上某些賬號(hào)的 UID 很可能會(huì)導(dǎo)致某些程序無法進(jìn)行,這將導(dǎo)致系統(tǒng)無法順利運(yùn)行的結(jié)果。 因?yàn)闄?quán)限的問題啊!所以,了解了之后,請(qǐng)趕快回到 /etc/passwd 里面,將數(shù)字改回來喔!

Tips:
舉例來說,如果上面的測(cè)試最后一個(gè)步驟沒有將 2000 改回原本的 UID,那么當(dāng) dmtsai 下次登陸時(shí)將沒有辦法進(jìn)入自己的家目錄! 因?yàn)樗?UID 已經(jīng)改為 2000 ,但是他的家目錄 (/home/dmtsai) 卻記錄的是 503 ,由于權(quán)限是 700 , 因此他將無法進(jìn)入原本的家目錄!是否非常嚴(yán)重啊?
鳥哥的圖示

小標(biāo)題的圖示 使用者賬號(hào)

Linux 系統(tǒng)上面的用戶如果需要登陸主機(jī)以取得 shell 的環(huán)境來工作時(shí),他需要如何進(jìn)行呢? 首先,他必須要在計(jì)算機(jī)前面利用 tty1~tty7 的終端機(jī)提供的 login 接口,并輸入賬號(hào)與口令后才能夠登陸。 如果是透過網(wǎng)絡(luò)的話,那至少使用者就得要學(xué)習(xí) ssh 這個(gè)功能了 (服務(wù)器篇再來談)。 那么你輸入賬號(hào)口令后,系統(tǒng)幫你處理了什么呢?

  1. 先找尋 /etc/passwd 里面是否有你輸入的賬號(hào)?如果沒有則跳出,如果有的話則將該賬號(hào)對(duì)應(yīng)的 UID 與 GID (在 /etc/group 中) 讀出來,另外,該賬號(hào)的家目錄與 shell 配置也一并讀出;

  2. 再來則是核對(duì)口令表啦!這時(shí) Linux 會(huì)進(jìn)入 /etc/shadow 里面找出對(duì)應(yīng)的賬號(hào)與 UID,然后核對(duì)一下你剛剛輸入的口令與里頭的口令是否相符?

  3. 如果一切都 OK 的話,就進(jìn)入 Shell 控管的階段啰!

大致上的情況就像這樣,所以當(dāng)你要登陸你的 Linux 主機(jī)的時(shí)候,那個(gè) /etc/passwd 與 /etc/shadow 就必須要讓系統(tǒng)讀取啦 (這也是很多攻擊者會(huì)將特殊賬號(hào)寫到 /etc/passwd 里頭去的緣故),所以呢,如果你要備份 Linux 的系統(tǒng)的賬號(hào)的話,那么這兩個(gè)文件就一定需要備份才行呦!

由上面的流程我們也知道,跟使用者賬號(hào)有關(guān)的有兩個(gè)非常重要的文件,一個(gè)是管理使用者 UID/GID 重要參數(shù)的 /etc/passwd ,一個(gè)則是專門管理口令相關(guān)數(shù)據(jù)的 /etc/shadow 啰!那這兩個(gè)文件的內(nèi)容就非常值得進(jìn)行研究啦! 底下我們會(huì)簡(jiǎn)單的介紹這兩個(gè)文件,詳細(xì)的說明可以參考 man 5 passwd 及 man 5 shadow ( 注1 )。


  • /etc/passwd 文件結(jié)構(gòu)

這個(gè)文件的構(gòu)造是這樣的: 每一行都代表一個(gè)賬號(hào),有幾行就代表有幾個(gè)賬號(hào)在你的系統(tǒng)中! 不過需要特別留意的是,里頭很多賬號(hào)本來就是系統(tǒng)正常運(yùn)行所必須要的,我們可以簡(jiǎn)稱他為系統(tǒng)賬號(hào), 例如 bin, daemon, adm, nobody 等等,這些賬號(hào)請(qǐng)不要隨意的殺掉他呢! 這個(gè)文件的內(nèi)容有點(diǎn)像這樣:

Tips:
鳥哥在接觸 Linux 之前曾經(jīng)碰過 Solaris 系統(tǒng) (1999 年),當(dāng)時(shí)鳥哥啥也不清楚!由于『聽說』Linux 上面的賬號(hào)越復(fù)雜會(huì)導(dǎo)致系統(tǒng)越危險(xiǎn)!所以鳥哥就將 /etc/passwd 上面的賬號(hào)全部刪除到只剩下 root 與鳥哥自己用的一般賬號(hào)!結(jié)果你猜發(fā)生什么事?那就是....呼叫升陽(yáng)的工程師來維護(hù)系統(tǒng) @_@!糗到一個(gè)不行!大家不要學(xué)啊!
鳥哥的圖示

?

          [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
        
?

?

我們先來看一下每個(gè) Linux 系統(tǒng)都會(huì)有的第一行,就是 root 這個(gè)系統(tǒng)管理員那一行好了, 你可以明顯的看出來,每一行使用『:』分隔開,共有七個(gè)咚咚,分別是:

  1. 賬號(hào)名稱
    就是賬號(hào)啦!用來對(duì)應(yīng) UID 的。例如 root 的 UID 對(duì)應(yīng)就是 0 (第三字段);

  2. 口令
    早期 Unix 系統(tǒng)的口令就是放在這字段上!但是因?yàn)檫@個(gè)文件的特性是 所有的程序都能夠讀取 ,這樣一來很容易造成口令數(shù)據(jù)被竊取, 因此后來就將這個(gè)字段的口令數(shù)據(jù)給他改放到 /etc/shadow 中了。所以這里你會(huì)看到一個(gè)『 x 』,呵呵!

  3. UID
    這個(gè)就是使用者標(biāo)識(shí)符啰!通常 Linux 對(duì)于 UID 有幾個(gè)限制需要說給您了解一下:

    id 范圍 該 ID 使用者特性
    0
    (系統(tǒng)管理員)
    當(dāng) UID 是 0 時(shí),代表這個(gè)賬號(hào)是『系統(tǒng)管理員』! 所以當(dāng)你要讓其他的賬號(hào)名稱也具有 root 的權(quán)限時(shí),將該賬號(hào)的 UID 改為 0 即可。 這也就是說,一部系統(tǒng)上面的系統(tǒng)管理員不見得只有 root 喔! 不過,很不建議有多個(gè)賬號(hào)的 UID 是 0 啦~
    1~499
    (系統(tǒng)賬號(hào))
    保留給系統(tǒng)使用的 ID,其實(shí) 除了 0 之外,其他的 UID 權(quán)限與特性并沒有不一樣 。默認(rèn) 500 以下的數(shù)字讓給系統(tǒng)作為保留賬號(hào)只是一個(gè)習(xí)慣。

    由于系統(tǒng)上面啟動(dòng)的服務(wù)希望使用較小的權(quán)限去運(yùn)行,因此不希望使用 root 的身份去運(yùn)行這些服務(wù), 所以我們就得要提供這些運(yùn)行中程序的擁有者賬號(hào)才行。這些系統(tǒng)賬號(hào)通常是不可登陸的, 所以才會(huì)有我們?cè)? 第十一章 提到的 /sbin/nologin 這個(gè)特殊的 shell 存在。

    根據(jù)系統(tǒng)賬號(hào)的由來,通常系統(tǒng)賬號(hào)又約略被區(qū)分為兩種:
    1~99:由 distributions 自行創(chuàng)建的系統(tǒng)賬號(hào);
    100~499:若用戶有系統(tǒng)賬號(hào)需求時(shí),可以使用的賬號(hào) UID。
    500~65535
    (可登陸賬號(hào))
    給一般使用者用的。事實(shí)上,目前的 linux 核心 (2.6.x 版)已經(jīng)可以支持到 4294967295 (2^32-1) 這么大的 UID 號(hào)碼喔!

    上面這樣說明可以了解了嗎?是的, UID 為 0 的時(shí)候,就是 root 呦!所以請(qǐng)?zhí)貏e留意一下你的 /etc/passwd 文件!

  4. GID
    這個(gè)與 /etc/group 有關(guān)!其實(shí) /etc/group 的觀念與 /etc/passwd 差不多,只是他是用來規(guī)范組名與 GID 的對(duì)應(yīng)而已!

  5. 用戶信息說明欄
    這個(gè)字段基本上并沒有什么重要用途,只是用來解釋這個(gè)賬號(hào)的意義而已!不過,如果您提供使用 finger 的功能時(shí), 這個(gè)字段可以提供很多的信息呢!本章后面的 chfn 命令會(huì)來解釋這里的說明。

  6. 家目錄
    這是用戶的家目錄,以上面為例, root 的家目錄在 /root ,所以當(dāng) root 登陸之后,就會(huì)立刻跑到 /root 目錄里頭啦!呵呵! 如果你有個(gè)賬號(hào)的使用空間特別的大,你想要將該賬號(hào)的家目錄移動(dòng)到其他的硬盤去該怎么作? 沒有錯(cuò)!可以在這個(gè)字段進(jìn)行修改呦!默認(rèn)的用戶家目錄在 /home/yourIDname

  7. Shell
    我們?cè)? 第十一章 BASH 提到很多次,當(dāng)用戶登陸系統(tǒng)后就會(huì)取得一個(gè) Shell 來與系統(tǒng)的核心溝通以進(jìn)行用戶的操作任務(wù)。那為何默認(rèn) shell 會(huì)使用 bash 呢?就是在這個(gè)字段指定的啰! 這里比較需要注意的是,有一個(gè) shell 可以用來替代成讓賬號(hào)無法取得 shell 環(huán)境的登陸動(dòng)作!那就是 /sbin/nologin 這個(gè)東西!這也可以用來制作純 pop 郵件賬號(hào)者的數(shù)據(jù)呢!

?


  • /etc/shadow 文件結(jié)構(gòu)

我們知道很多程序的運(yùn)行都與權(quán)限有關(guān),而權(quán)限與 UID/GID 有關(guān)!因此各程序當(dāng)然需要讀取 /etc/passwd 來了解不同賬號(hào)的權(quán)限。 因此 /etc/passwd 的權(quán)限需配置為 -rw-r--r-- 這樣的情況 , 雖然早期的口令也有加密過,但卻放置到 /etc/passwd 的第二個(gè)字段上!這樣一來很容易被有心人士所竊取的, 加密過的口令也能夠透過暴力破解法去 try and error (試誤) 找出來!

?

因?yàn)檫@樣的關(guān)系,所以后來發(fā)展出將口令移動(dòng)到 /etc/shadow 這個(gè)文件分隔開來的技術(shù), 而且還加入很多的口令限制參數(shù)在 /etc/shadow 里頭呢!在這里,我們先來了解一下這個(gè)文件的構(gòu)造吧! 鳥哥的 /etc/shadow 文件有點(diǎn)像這樣:

?

          [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ù),會(huì)發(fā)現(xiàn)共有九個(gè)字段啊,這九個(gè)字段的用途是這樣的:

  1. 賬號(hào)名稱
    由于口令也需要與賬號(hào)對(duì)應(yīng)啊~因此,這個(gè)文件的第一欄就是賬號(hào),必須要與 /etc/passwd 相同才行!

  2. 口令
    這個(gè)字段內(nèi)的數(shù)據(jù)才是真正的口令,而且是 經(jīng)過編碼的口令 (加密) 啦! 你只會(huì)看到有一些特殊符號(hào)的字母就是了!需要特別留意的是,雖然這些加密過的口令很難被解出來, 但是『很難』不等于『不會(huì)』,所以,這個(gè)文件的默認(rèn)權(quán)限是『-rw-------』或者是『-r--------』,亦即只有 root 才可以讀寫就是了!你得隨時(shí)注意,不要不小心更動(dòng)了這個(gè)文件的權(quán)限呢!

    另外,由于各種口令編碼的技術(shù)不一樣,因此不同的編碼系統(tǒng)會(huì)造成這個(gè)字段的長(zhǎng)度不相同。 舉例來說,舊式的 DES 編碼系統(tǒng)產(chǎn)生的口令長(zhǎng)度就與目前慣用的 MD5 不同( 注2 )!MD5 的口令長(zhǎng)度明顯的比較長(zhǎng)些。由于固定的編碼系統(tǒng)產(chǎn)生的口令長(zhǎng)度必須一致,因此『 當(dāng)你讓這個(gè)字段的長(zhǎng)度改變后,該口令就會(huì)失效(算不出來) 』。 很多軟件透過這個(gè)功能, 在此字段前加上 ! 或 * 改變口令字段長(zhǎng)度,就會(huì)讓口令『暫時(shí)失效』了。

  3. 最近更動(dòng)口令的日期
    這個(gè)字段記錄了『更動(dòng)口令那一天』的日期,不過,很奇怪呀!在我的例子中怎么會(huì)是 14126 呢?呵呵,這個(gè)是因?yàn)橛?jì)算 Linux 日期的時(shí)間是以 1970 年 1 月 1 日作為 1 而累加的日期,1971 年 1 月 1 日則為 366 啦! 得注意一下這個(gè)數(shù)據(jù)呦!上述的 14126 指的就是 2008-09-04 那一天啦!了解乎? 而想要了解該日期可以使用本章后面 chage 命令的幫忙!至于想要知道某個(gè)日期的累積日數(shù), 可使用如下的程序計(jì)算:
                  [root@www ~]# echo $(($(date --date="2008/09/04" +%s)/86400+1))
    14126
                
    ?
    上述命令中,2008/09/04 為你想要計(jì)算的日期,86400 為每一天的秒數(shù), %s 為 1970/01/01 以來的累積總秒數(shù)。 由于 bash 僅支持整數(shù),因此最終需要加上 1 補(bǔ)齊 1970/01/01 當(dāng)天。

  4. 口令不可被更動(dòng)的天數(shù) :(與第 3 字段相比)
    第四個(gè)字段記錄了:這個(gè)賬號(hào)的口令在最近一次被更改后需要經(jīng)過幾天才可以再被變更!如果是 0 的話, 表示口令隨時(shí)可以更動(dòng)的意思。這的限制是為了怕口令被某些人一改再改而設(shè)計(jì)的!如果配置為 20 天的話,那么當(dāng)你配置了口令之后, 20 天之內(nèi)都無法改變這個(gè)口令呦!

  5. 口令需要重新變更的天數(shù) :(與第 3 字段相比)
    經(jīng)常變更口令是個(gè)好習(xí)慣!為了強(qiáng)制要求用戶變更口令,這個(gè)字段可以指定在最近一次更改口令后, 在多少天數(shù)內(nèi)需要再次的變更口令才行。 你必須要在這個(gè)天數(shù)內(nèi)重新配置你的口令,否則這個(gè)賬號(hào)的口令將會(huì)『變?yōu)檫^期特性』 。 而如果像上面的 99999 (計(jì)算為 273 年) 的話,那就表示,呵呵,口令的變更沒有強(qiáng)制性之意。

  6. 口令需要變更期限前的警告天數(shù) :(與第 5 字段相比)
    當(dāng)賬號(hào)的口令有效期限快要到的時(shí)候 (第 5 字段),系統(tǒng)會(huì)依據(jù)這個(gè)字段的配置,發(fā)出『警告』言論給這個(gè)賬號(hào),提醒他『再過 n 天你的口令就要過期了,請(qǐng)盡快重新配置你的口令呦!』,如上面的例子,則是口令到期之前的 7 天之內(nèi),系統(tǒng)會(huì)警告該用戶。

  7. 口令過期后的賬號(hào)寬限時(shí)間(口令失效日) :(與第 5 字段相比)
    口令有效日期為『升級(jí)日期(第3字段)』+『重新變更日期(第5字段)』,過了該期限后用戶依舊沒有升級(jí)口令,那該口令就算過期了。 雖然口令過期但是該賬號(hào)還是可以用來進(jìn)行其他工作的,包括登陸系統(tǒng)取得 bash 。 不過如果口令過期了, 那當(dāng)你登陸系統(tǒng)時(shí),系統(tǒng)會(huì)強(qiáng)制要求你必須要重新配置口令才能登陸繼續(xù)使用喔,這就是口令過期特性

    那這個(gè)字段的功能是什么呢?是在口令過期幾天后,如果使用者還是沒有登陸更改口令,那么這個(gè)賬號(hào)的口令將會(huì)『失效』, 亦即該賬號(hào)再也無法使用該口令登陸了。要注意 口令過期與口令失效并不相同

  8. 賬號(hào)失效日期
    這個(gè)日期跟第三個(gè)字段一樣,都是使用 1970 年以來的總?cè)諗?shù)配置。這個(gè)字段表示: 這個(gè)賬號(hào)在此字段規(guī)定的日期之后,將無法再使用 。 就是所謂的『賬號(hào)失效』,此時(shí)不論你的口令是否有過期,這個(gè)『賬號(hào)』都不能再被使用! 這個(gè)字段會(huì)被使用通常應(yīng)該是在『收費(fèi)服務(wù)』的系統(tǒng)中,你可以規(guī)定一個(gè)日期讓該賬號(hào)不能再使用啦!

  9. 保留
    最后一個(gè)字段是保留的,看以后有沒有新功能加入。

舉個(gè)例子來說好了,假如我的 dmtsai 這個(gè)用戶的口令欄如下所示:

?

          dmtsai:$1$vyUuj.eX$omt6lKJvMcIZHx4H7RI1V.:14299:5:60:7:5:14419:
        
?

?

這表示什么呢?先要注意的是 14299 是 2009/02/24 。所以 dmtsai 這個(gè)用戶的口令相關(guān)意義是:

  • 由于口令幾乎僅能單向運(yùn)算(由明碼計(jì)算成為口令,無法由口令反推回明碼),因此由上表的數(shù)據(jù)我們 無法得知 dmstai 的實(shí)際口令明文

  • 此賬號(hào)最近一次更動(dòng)口令的日期是 2009/02/24 (14299);

  • 能夠再次修改口令的時(shí)間是 5 天以后,也就是 2009/03/01 以前 dmtsai 不能修改自己的口令 ;如果用戶還是嘗試要更動(dòng)自己的口令,系統(tǒng)就會(huì)出現(xiàn)這樣的信息:
                  You must wait longer to change your password
    passwd: Authentication token manipulation error
                
    ?畫面中告訴我們:你必須要等待更久的時(shí)間才能夠變更口令之意啦!

  • 由于口令過期日期定義為 60 天后,亦即累積日數(shù)為: 14299+60=14359,經(jīng)過計(jì)算得到此日數(shù)代表日期為 2009/04/25。 這表示:『 使用者必須要在 2009/03/01 到 2009/04/25 之間的 60 天限制內(nèi)去修改自己的口令,若 2009/04/25 之后還是沒有變更口令時(shí),該口令就宣告為過期 』了!

  • 警告日期設(shè)為 7 天,亦即是口令過期日前的 7 天,在本例中則代表 2009/04/19 ~ 2009/04/25 這七天。 如果用戶一直沒有更改口令,那么在這 7 天中,只要 dmtsai 登陸系統(tǒng)就會(huì)發(fā)現(xiàn)如下的信息:
                  Warning: your password will expire in 5 days
                
    ?
  • 如果該賬號(hào)一直到 2009/04/25 都沒有更改口令,那么口令就過期了。但是由于有 5 天的寬限天數(shù), 因此 dmtsai 在 2009/04/30 前都還可以使用舊口令登陸主機(jī)。 不過登陸時(shí)會(huì)出現(xiàn)強(qiáng)制更改口令的情況 ,畫面有點(diǎ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)的各項(xiàng)資源。如果你是在 2009/04/30 以后嘗試以 dmtsai 登陸的話,那么就會(huì)出現(xiàn)如下的錯(cuò)誤信息且無法登陸,因?yàn)榇藭r(shí)你的口令就失效去啦!
                  Your account has expired; please contact your system administrator
                
    ?
  • 如果使用者在 2009/04/25 以前變更過口令,那么第 3 個(gè)字段的那個(gè) 14299 的天數(shù)就會(huì)跟著改變,因此, 所有的限制日期也會(huì)跟著相對(duì)變動(dòng)喔!^_^

  • 無論使用者如何動(dòng)作,到了 14419 (大約是 2009/07/24 左右) 該賬號(hào)就失效了~

透過這樣的說明,您應(yīng)該會(huì)比較容易理解了吧?由于 shadow 有這樣的重要性,因此可不能隨意修改喔! 但在某些情況底下你得要使用各種方法來處理這個(gè)文件的!舉例來說,常常聽到人家說:『我的口令忘記了』, 或者是『我的口令不曉得被誰(shuí)改過,跟原先的不一樣了』,這個(gè)時(shí)候怎么辦?

  • 一般用戶的口令忘記了 :這個(gè)最容易解決,請(qǐng)系統(tǒng)管理員幫忙, 他會(huì)重新配置好你的口令而不需要知道你的舊口令!利用 root 的身份使用 passwd 命令來處理即可。

  • root 口令忘記了 :這就麻煩了!因?yàn)槟銦o法使用 root 的身份登陸了嘛! 但我們知道 root 的口令在 /etc/shadow 當(dāng)中,因此你可以使用各種可行的方法啟動(dòng)進(jìn)入 Linux 再去修改。 例如重新啟動(dòng)進(jìn)入單人維護(hù)模式( 第二十章 )后,系統(tǒng)會(huì)主動(dòng)的給予 root 權(quán)限的 bash 接口, 此時(shí)再以 passwd 修改口令即可;或以 Live CD 啟動(dòng)后掛載根目錄去修改 /etc/shadow,將里面的 root 的口令字段清空, 再重新啟動(dòng)后 root 將不用口令即可登陸!登陸后再趕快以 passwd 命令去配置 root 口令即可。
Tips:
曾經(jīng)聽過一則笑話,某位老師主要是在教授 Linux 操作系統(tǒng),但是他是兼任的老師,因此對(duì)于該系的計(jì)算機(jī)環(huán)境不熟。 由于當(dāng)初安裝該計(jì)算機(jī)教室 Linux 操作系統(tǒng)的人員已經(jīng)離職且找不到聯(lián)絡(luò)方式了,也就是說 root 口令已經(jīng)沒有人曉得了! 此時(shí)該老師就對(duì)學(xué)生說:『在 Linux 里面 root 口令不見了,我們只能重新安裝』...感覺有點(diǎn)無力~ 又是個(gè)被 Windows 制約的人才!
鳥哥的圖示

小標(biāo)題的圖示 關(guān)于群組: 有效與初始群組、groups, newgrp

認(rèn)識(shí)了賬號(hào)相關(guān)的兩個(gè)文件 /etc/passwd 與 /etc/shadow 之后,你或許還是會(huì)覺得奇怪, 那么群組的配置文件在哪里?還有,在 /etc/passwd 的第四欄不是所謂的 GID 嗎?那又是啥? 呵呵~此時(shí)就需要了解 /etc/group 與 /etc/gshadow 啰~


  • /etc/group 文件結(jié)構(gòu)

這個(gè)文件就是在記錄 GID 與組名的對(duì)應(yīng)了~鳥哥測(cè)試機(jī)的 /etc/group 內(nèi)容有點(diǎn)像這樣:

?

          [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
        
?

?

這個(gè)文件每一行代表一個(gè)群組,也是以冒號(hào)『:』作為字段的分隔符,共分為四欄,每一字段的意義是:

  1. 組名
    就是組名啦!

  2. 群組口令
    通常不需要配置,這個(gè)配置通常是給『群組管理員』使用的,目前很少有這個(gè)機(jī)會(huì)配置群組管理員啦! 同樣的,口令已經(jīng)移動(dòng)到 /etc/gshadow 去,因此這個(gè)字段只會(huì)存在一個(gè)『x』而已;

  3. GID
    就是群組的 ID 啊。我們 /etc/passwd 第四個(gè)字段使用的 GID 對(duì)應(yīng)的群組名,就是由這里對(duì)應(yīng)出來的!

  4. 此群組支持的賬號(hào)名稱
    我們知道一個(gè)賬號(hào)可以加入多個(gè)群組,那某個(gè)賬號(hào)想要加入此群組時(shí),將該賬號(hào)填入這個(gè)字段即可。 舉例來說,如果我想要讓 dmtsai 也加入 root 這個(gè)群組,那么在第一行的最后面加上『,dmtsai』,注意不要有空格, 使成為『 root:x:0:root,dmtsai 』就可以啰~

談完了 /etc/passwd, /etc/shadow, /etc/group 之后,我們可以使用一個(gè)簡(jiǎn)單的圖示來了解一下 UID / GID 與口令之間的關(guān)系, 圖示如下。其實(shí)重點(diǎn)是 /etc/passwd 啦,其他相關(guān)的數(shù)據(jù)都是根據(jù)這個(gè)文件的字段去找尋出來的。 下圖中, root 的 UID 是 0 ,而 GID 也是 0 ,去找 /etc/group 可以知道 GID 為 0 時(shí)的組名就是 root 哩。 至于口令的尋找中,會(huì)找到 /etc/shadow 與 /etc/passwd 內(nèi)同賬號(hào)名稱的那一行,就是口令相關(guān)數(shù)據(jù)啰。

?

賬號(hào)相關(guān)文件之間的 UID/GID 與口令相關(guān)性示意圖
圖 1.3.1 、賬號(hào)相關(guān)文件之間的 UID/GID 與口令相關(guān)性示意圖

?

至于在 /etc/group 比較重要的特色在于第四欄啦,因?yàn)槊總€(gè)使用者都可以擁有多個(gè)支持的群組,這就好比在學(xué)校念書的時(shí)候, 我們可以加入多個(gè)社團(tuán)一樣! ^_^。不過這里你或許會(huì)覺得奇怪的,那就是:『 假如我同時(shí)加入多個(gè)群組,那么我在作業(yè)的時(shí)候,到底是以那個(gè)群組為準(zhǔn)? 』 底下我們就來談一談這個(gè)『有效群組』的概念。


  • 有效群組(effective group)與初始群組(initial group)

還記得每個(gè)使用者在他的 /etc/passwd 里面的第四欄有所謂的 GID 吧?那個(gè) GID 就是所謂的『初始群組 (initial group) 』!也就是說,當(dāng)用戶一登陸系統(tǒng),立刻就擁有這個(gè)群組的相關(guān)權(quán)限的意思。 舉例來說,我們上面提到 dmtsai 這個(gè)使用者的 /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:       <==因?yàn)槭浅跏既航M,所以第四字段不需要填入賬號(hào)
/etc/gshadow:users:::dmtsai    <==次要群組的配置
/etc/gshadow:dmtsai:!::
        
?

?

仔細(xì)看到上面這個(gè)表格,在 /etc/passwd 里面,dmtsai 這個(gè)使用者所屬的群組為 GID=504 ,搜尋一下 /etc/group 得到 504 是那個(gè)名為 dmtsai 的群組啦!這就是 initial group。因?yàn)槭浅跏既航M, 使用者一登陸就會(huì)主動(dòng)取得,不需要在 /etc/group 的第四個(gè)字段寫入該賬號(hào)的!

?

但是非 initial group 的其他群組可就不同了。舉上面這個(gè)例子來說,我將 dmtsai 加入 users 這個(gè)群組當(dāng)中,由于 users 這個(gè)群組并非是 dmtsai 的初始群組,因此, 我必須要在 /etc/group 這個(gè)文件中,找到 users 那一行,并且將 dmtsai 這個(gè)賬號(hào)加入第四欄, 這樣 dmtsai 才能夠加入 users 這個(gè)群組啊。

?

那么在這個(gè)例子當(dāng)中,因?yàn)槲业?dmtsai 賬號(hào)同時(shí)支持 dmtsai 與 users 這兩個(gè)群組, 因此,在讀取/寫入/運(yùn)行文件時(shí),針對(duì)群組部分,只要是 users 與 dmtsai 這兩個(gè)群組擁有的功能, 我 dmtsai 這個(gè)使用者都能夠擁有喔!這樣瞭呼?不過,這是針對(duì)已經(jīng)存在的文件而言, 如果今天我要?jiǎng)?chuàng)建一個(gè)新的文件或者是新的目錄,請(qǐng)問一下, 新文件的群組是 dmtsai 還是 users ?呵呵!這就得要檢查一下當(dāng)時(shí)的有效群組了 (effective group)。


  • groups: 有效與支持群組的觀察

如果我以 dmtsai 這個(gè)使用者的身份登陸后,該如何知道我所有支持的群組呢? 很簡(jiǎn)單啊,直接輸入 groups 就可以了!注意喔,是 groups 有加 s 呢!結(jié)果像這樣:

?

          [dmtsai@www ~]$ groups
dmtsai users
        
?

?

在這個(gè)輸出的信息中,可知道 dmtsai 這個(gè)用戶同時(shí)屬于 dmtsai 及 users 這個(gè)兩個(gè)群組,而且, 第一個(gè)輸出的群組即為有效群組 (effective group) 了 。 也就是說,我的有效群組為 dmtsai 啦~此時(shí),如果我以 touch 去創(chuàng)建一個(gè)新檔,例如: 『 touch test 』,那么這個(gè)文件的擁有者為 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 這兩個(gè)群組間切換有效群組,但是 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
        
?

?

此時(shí),dmtsai 的有效群組就成為 users 了。 我們額外的來討論一下 newgrp 這個(gè)命令,這個(gè)命令可以變更目前用戶的有效群組, 而且是 另外以一個(gè) shell 來提供這個(gè)功能 的喔,所以,以上面的例子來說, dmtsai 這個(gè)使用者目前是以另一個(gè) shell 登陸的,而且新的 shell 給予 dmtsai 有效 GID 為 users 就是了。如果以圖示來看就是如下所示:

?

newgrp 的運(yùn)行示意圖
圖 1.3.2 、newgrp 的運(yùn)行示意圖

?

雖然用戶的環(huán)境配置(例如環(huán)境變量等等其他數(shù)據(jù))不會(huì)有影響,但是使用者的『群組權(quán)限』將會(huì)重新被計(jì)算。 但是需要注意,由于是新取得一個(gè) shell ,因此如果你想要回到原本的環(huán)境中,請(qǐng)輸入 exit 回到原本的 shell 喔!

既然如此,也就是說,只要我的用戶有支持的群組就是能夠切換成為有效群組!好了, 那么如何讓一個(gè)賬號(hào)加入不同的群組就是問題的所在啰。你要加入一個(gè)群組有兩個(gè)方式,一個(gè)是透過系統(tǒng)管理員 (root) 利用 usermod 幫你加入,如果 root 太忙了而且你的系統(tǒng)有配置群組管理員,那么你可以透過群組管理員以 gpasswd 幫你加入他所管理的群組中!詳細(xì)的作法留待下一小節(jié)再來介紹啰!


  • /etc/gshadow

剛剛講了很多關(guān)于『有效群組』的概念,另外,也提到 newgrp 這個(gè)命令的用法, 但是,如果 /etc/gshadow 這個(gè)配置沒有搞懂得話,那么 newgrp 是無法動(dòng)作的呢! 鳥哥測(cè)試機(jī)的 /etc/gshadow 的內(nèi)容有點(diǎn)像這樣:

?

          [root@www ~]# head -n 4 /etc/gshadow
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
        
?

?

這個(gè)文件內(nèi)同樣還是使用冒號(hào)『:』來作為字段的分隔字符,而且你會(huì)發(fā)現(xiàn),這個(gè)文件幾乎與 /etc/group 一模一樣啊!是這樣沒錯(cuò)~不過,要注意的大概就是第二個(gè)字段吧~第二個(gè)字段是口令欄, 如果口令欄上面是『!』時(shí),表示該群組不具有群組管理員!至于第四個(gè)字段也就是支持的賬號(hào)名稱啰~ 這四個(gè)字段的意義為:

  1. 組名
  2. 口令欄,同樣的,開頭為 ! 表示無合法口令,所以無群組管理員
  3. 群組管理員的賬號(hào) (相關(guān)信息在 gpasswd 中介紹)
  4. 該群組的所屬賬號(hào) (與 /etc/group 內(nèi)容相同!)

以系統(tǒng)管理員的角度來說,這個(gè) gshadow 最大的功能就是 創(chuàng)建群組管理員 啦! 那么什么是群組管理員呢?由于系統(tǒng)上面的賬號(hào)可能會(huì)很多,但是我們 root 可能平時(shí)太忙碌,所以當(dāng)有使用者想要加入某些群組時(shí), root 或許會(huì)沒有空管理。此時(shí)如果能夠創(chuàng)建群組管理員的話,那么 該群組管理員就能夠?qū)⒛莻€(gè)賬號(hào)加入自己管理的群組中 ! 可以免去 root 的忙碌啦!不過,由于目前有類似 sudo 之類的工具, 所以這個(gè)群組管理員的功能已經(jīng)很少使用了。我們會(huì)在后續(xù)的 gpasswd 中介紹這個(gè)實(shí)作。

?

2. 賬號(hào)管理

好啦!既然要管理賬號(hào),當(dāng)然是由新增與移除使用者開始的啰~底下我們就分別來談一談如何新增、 移除與更改用戶的相關(guān)信息吧~

?


小標(biāo)題的圖示 新增與移除使用者: useradd, 相關(guān)配置文件, passwd, usermod, userdel

要如何在 Linux 的系統(tǒng)新增一個(gè)用戶啊?呵呵~真是太簡(jiǎn)單了~我們登陸系統(tǒng)時(shí)會(huì)輸入 (1)賬號(hào)與 (2)口令, 所以創(chuàng)建一個(gè)可用的賬號(hào)同樣的也需要這兩個(gè)數(shù)據(jù)。那賬號(hào)可以使用 useradd 來新建用戶,口令的給予則使用 passwd 這個(gè)命令!這兩個(gè)命令下達(dá)方法如下:


  • useradd

?

          [root@www ~]# useradd [-u UID] [-g 初始群組] [-G 次要群組] [-mM]\
>  [-c 說明欄] [-d 家目錄絕對(duì)路徑] [-s shell] 使用者賬號(hào)名
選項(xiàng)與參數(shù):
-u  :后面接的是 UID ,是一組數(shù)字。直接指定一個(gè)特定的 UID 給這個(gè)賬號(hào);
-g  :后面接的那個(gè)組名就是我們上面提到的 initial group 啦~
      該群組的 GID 會(huì)被放置到 /etc/passwd 的第四個(gè)字段內(nèi)。
-G  :后面接的組名則是這個(gè)賬號(hào)還可以加入的群組。
      這個(gè)選項(xiàng)與參數(shù)會(huì)修改 /etc/group 內(nèi)的相關(guān)數(shù)據(jù)喔!
-M  :強(qiáng)制!不要?jiǎng)?chuàng)建用戶家目錄!(系統(tǒng)賬號(hào)默認(rèn)值)
-m  :強(qiáng)制!要?jiǎng)?chuàng)建用戶家目錄!(一般賬號(hào)默認(rèn)值)
-c  :這個(gè)就是 /etc/passwd 的第五欄的說明內(nèi)容啦~可以隨便我們配置的啦~
-d  :指定某個(gè)目錄成為家目錄,而不要使用默認(rèn)值。務(wù)必使用絕對(duì)路徑!
-r  :創(chuàng)建一個(gè)系統(tǒng)的賬號(hào),這個(gè)賬號(hào)的 UID 會(huì)有限制 (參考 /etc/login.defs)
-s  :后面接一個(gè) shell ,若沒有指定則默認(rèn)是 /bin/bash 的啦~
-e  :后面接一個(gè)日期,格式為『YYYY-MM-DD』此項(xiàng)目可寫入 shadow 第八字段,
      亦即賬號(hào)失效日的配置項(xiàng)目啰;
-f  :后面接 shadow 的第七字段項(xiàng)目,指定口令是否會(huì)失效。0為立刻失效,
      -1 為永遠(yuǎn)不失效(口令只會(huì)過期而強(qiáng)制于登陸時(shí)重新配置而已。)

范例一:完全參考默認(rèn)值創(chuàng)建一個(gè)用戶,名稱為 vbird1
[root@www ~]# useradd vbird1
[root@www ~]# ll -d /home/vbird1
drwx------ 4 vbird1 vbird1 4096 Feb 25 09:38 /home/vbird1
# 默認(rèn)會(huì)創(chuàng)建用戶家目錄,且權(quán)限為 700 !這是重點(diǎn)!

[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:    <==默認(rèn)會(huì)創(chuàng)建一個(gè)與賬號(hào)一模一樣的群組名
        
?

?

其實(shí)系統(tǒng)已經(jīng)幫我們規(guī)定好非常多的默認(rèn)值了,所以我們可以簡(jiǎn)單的使用『 useradd 賬號(hào) 』來創(chuàng)建使用者即可。 CentOS 這些默認(rèn)值主要會(huì)幫我們處理幾個(gè)項(xiàng)目:

  • 在 /etc/passwd 里面創(chuàng)建一行與賬號(hào)相關(guān)的數(shù)據(jù),包括創(chuàng)建 UID/GID/家目錄等;
  • 在 /etc/shadow 里面將此賬號(hào)的口令相關(guān)參數(shù)填入,但是尚未有口令;
  • 在 /etc/group 里面加入一個(gè)與賬號(hào)名稱一模一樣的組名;
  • 在 /home 底下創(chuàng)建一個(gè)與賬號(hào)同名的目錄作為用戶家目錄,且權(quán)限為 700

由于在 /etc/shadow 內(nèi)僅會(huì)有口令參數(shù)而不會(huì)有加密過的口令數(shù)據(jù),因此我們?cè)趧?chuàng)建使用者賬號(hào)時(shí), 還需要使用『 passwd 賬號(hào) 』來給予口令才算是完成了用戶創(chuàng)建的流程。如果由于特殊需求而需要改變使用者相關(guān)參數(shù)時(shí), 就得要透過上述表格中的選項(xiàng)來進(jìn)行創(chuàng)建了,參考底下的案例:

?

          范例二:假設(shè)我已知道我的系統(tǒng)當(dāng)中有個(gè)組名為 users ,且 UID 700 并不存在,
        請(qǐng)用 users 為初始群組,以及 uid 為 700 來創(chuàng)建一個(gè)名為 vbird2 的賬號(hào)
[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 確實(shí)改變成我們需要的了!
        
?

?

在這個(gè)范例中,我們創(chuàng)建的是指定一個(gè)已經(jīng)存在的群組作為使用者的初始群組,因?yàn)槿航M已經(jīng)存在, 所以在 /etc/group 里面就不會(huì)主動(dòng)的創(chuàng)建與賬號(hào)同名的群組了! 此外,我們也指定了特殊的 UID 來作為使用者的專屬 UID 喔!了解了一般賬號(hào)后,我們來瞧瞧那啥是系統(tǒng)賬號(hào) (system account) 吧!

?

          范例三:創(chuàng)建一個(gè)系統(tǒng)賬號(hào),名稱為 vbird3
[root@www ~]# useradd -r vbird3
[root@www ~]# ll -d /home/vbird3
ls: /home/vbird3: No such file or directory  <==不會(huì)主動(dòng)創(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:
        
?

?

我們?cè)谡劦?UID 的時(shí)候曾經(jīng)說過一般賬號(hào)應(yīng)該是 500 號(hào)以后,那用戶自己創(chuàng)建的系統(tǒng)賬號(hào)則一般是由 100 號(hào)以后起算的。 所以在這里我們加上 -r 這個(gè)選項(xiàng)以后,系統(tǒng)就會(huì)主動(dòng)將賬號(hào)與賬號(hào)同名群組的 UID/GID 都指定小于 500 以下, 在本案例中則是使用 100(UID) 與 103(GID) 啰!此外,由于系統(tǒng)賬號(hào)主要是用來進(jìn)行運(yùn)行系統(tǒng)所需服務(wù)的權(quán)限配置, 所以 系統(tǒng)賬號(hào)默認(rèn)都不會(huì)主動(dòng)創(chuàng)建家目錄的

?

由這幾個(gè)范例我們也會(huì)知道,使用 useradd 創(chuàng)建使用者賬號(hào)時(shí),其實(shí)會(huì)更改不少地方,至少我們就知道底下幾個(gè)文件:

  • 用戶賬號(hào)與口令參數(shù)方面的文件:/etc/passwd, /etc/shadow
  • 使用者群組相關(guān)方面的文件:/etc/group, /etc/gshadow
  • 用戶的家目錄:/home/賬號(hào)名稱

那請(qǐng)教一下,你有沒有想過,為何『 useradd vbird1 』會(huì)主動(dòng)在 /home/vbird1 創(chuàng)建起用戶的家目錄?家目錄內(nèi)有什么數(shù)據(jù)且來自哪里?為何默認(rèn)使用的是 /bin/bash 這個(gè) shell ?為何口令字段已經(jīng)都規(guī)范好了 (0:99999:7 那一串)?呵呵!這就得要說明一下 useradd 所使用的參考文件啰!


  • useradd 參考檔

其實(shí) useradd 的默認(rèn)值可以使用底下的方法呼叫出來:

?

          [root@www ~]# useradd -D
GROUP=100		<==默認(rèn)的群組
HOME=/home		<==默認(rèn)的家目錄所在目錄
INACTIVE=-1		<==口令失效日,在 shadow 內(nèi)的第 7 欄
EXPIRE=			<==賬號(hào)失效日,在 shadow 內(nèi)的第 8 欄
SHELL=/bin/bash		<==默認(rèn)的 shell
SKEL=/etc/skel		<==用戶家目錄的內(nèi)容數(shù)據(jù)參考目錄
CREATE_MAIL_SPOOL=yes   <==是否主動(dòng)幫使用者創(chuàng)建郵件信箱(mailbox)
        
?

?

這個(gè) 數(shù)據(jù)其實(shí)是由 /etc/default/useradd 呼叫出來的!你可以自行用 vim 去觀察該文件的內(nèi)容。搭配上頭剛剛談過的范例一的運(yùn)行結(jié)果,上面這些配置項(xiàng)目所造成的行為分別是:

  • GROUP=100:新建賬號(hào)的初始群組使用 GID 為 100 者

    系統(tǒng)上面 GID 為 100 者即是 users 這個(gè)群組,此配置項(xiàng)目指的就是讓新設(shè)使用者賬號(hào)的初始群組為 users 這一個(gè)的意思。 但是我們知道 CentOS 上面并不是這樣的,在 CentOS 上面 默認(rèn)的群組為與賬號(hào)名相同的群組 。 舉例來說, vbird1 的初始群組為 vbird1 。怎么會(huì)這樣啊?這是因?yàn)獒槍?duì)群組的角度有兩種不同的機(jī)制所致, 這兩種機(jī)制分別是:

    • 私有群組機(jī)制 :系統(tǒng)會(huì)創(chuàng)建一個(gè)與賬號(hào)一樣的群組給使用者作為初始群組。 這種群組的配置機(jī)制會(huì)比較有保密性,這是因?yàn)槭褂谜叨加凶约旱娜航M,而且家目錄權(quán)限將會(huì)配置為 700 (僅有自己可進(jìn)入自己的家目錄) 之故。使用這種機(jī)制將不會(huì)參考 GROUP=100 這個(gè)配置值。代表性的 distributions 有 RHEL, Fedora, CentOS 等;

    • 公共群組機(jī)制 :就是以 GROUP=100 這個(gè)配置值作為新建賬號(hào)的初始群組,因此每個(gè)賬號(hào)都屬于 users 這個(gè)群組, 且默認(rèn)家目錄通常的權(quán)限會(huì)是『 drwxr-xr-x ... username users ... 』,由于每個(gè)賬號(hào)都屬于 users 群組,因此大家都可以互相分享家目錄內(nèi)的數(shù)據(jù)之故。代表 distributions 如 SuSE等。

    由于我們的 CentOS 使用私有群組機(jī)制,因此這個(gè)配置項(xiàng)目是不會(huì)生效的!不要太緊張啊!

  • HOME=/home:用戶家目錄的基準(zhǔn)目錄(basedir)

    用戶的家目錄通常是與賬號(hào)同名的目錄,這個(gè)目錄將會(huì)擺放在此配置值的目錄后。所以 vbird1 的家目錄就會(huì)在 /home/vbird1/ 了!很容易理解吧!

  • INACTIVE=-1:口令過期后是否會(huì)失效的配置值

    我們?cè)? shadow 文件結(jié)構(gòu)當(dāng)中談過,第七個(gè)字段的配置值將會(huì)影響到口令過期后, 在多久時(shí)間內(nèi)還可使用舊口令登陸。這個(gè)項(xiàng)目就是在指定該日數(shù)啦!如果是 0 代表口令過期立刻失效, 如果是 -1 則是代表口令永遠(yuǎn)不會(huì)失效,如果是數(shù)字,如 30 ,則代表過期 30 天后才失效。

  • EXPIRE=:賬號(hào)失效的日期

    就是 shadow 內(nèi)的第八字段,你可以直接配置賬號(hào)在哪個(gè)日期后就直接失效,而不理會(huì)口令的問題。 通常不會(huì)配置此項(xiàng)目,但如果是付費(fèi)的會(huì)員制系統(tǒng),或許這個(gè)字段可以配置喔!

  • SHELL=/bin/bash:默認(rèn)使用的 shell 程序文件名

    系統(tǒng)默認(rèn)的 shell 就寫在這里。假如你的系統(tǒng)為 mail server ,你希望每個(gè)賬號(hào)都只能使用 email 的收發(fā)信件功能, 而不許用戶登陸系統(tǒng)取得 shell ,那么可以將這里配置為 /sbin/nologin ,如此一來,新建的使用者默認(rèn)就無法登陸! 也免去后續(xù)使用 usermod 進(jìn)行修改的手續(xù)!

  • SKEL=/etc/skel:用戶家目錄參考基準(zhǔn)目錄

    這個(gè)咚咚就是指定用戶家目錄的參考基準(zhǔn)目錄啰~舉我們的范例一為例, vbird1 家目錄 /home/vbird1 內(nèi)的各項(xiàng)數(shù)據(jù),都是由 /etc/skel 所復(fù)制過去的~所以呢,未來如果我想要讓新增使用者時(shí),該用戶的環(huán)境變量 ~/.bashrc 就配置妥當(dāng)?shù)脑挘梢缘?/etc/skel/.bashrc 去編輯一下,也可以創(chuàng)建 /etc/skel/www 這個(gè)目錄,那么未來新增使用者后,在他的家目錄下就會(huì)有 www 那個(gè)目錄了!這樣瞭呼?

  • CREATE_MAIL_SPOOL=yes:創(chuàng)建使用者的 mailbox

    你可以使用『 ll /var/spool/mail/vbird1 』看一下,會(huì)發(fā)現(xiàn)有這個(gè)文件的存在喔!這就是使用者的郵件信箱!

除了這些基本的賬號(hào)配置值之外, UID/GID 還有口令參數(shù)又是在哪里參考的呢?那就得要看一下 /etc/login.defs 啦! 這個(gè)文件的內(nèi)容有點(diǎn)像底下這樣:

?

          MAIL_DIR        /var/spool/mail	<==用戶默認(rèn)郵件信箱放置目錄

PASS_MAX_DAYS   99999	<==/etc/shadow 內(nèi)的第 5 欄,多久需變更口令日數(shù)
PASS_MIN_DAYS   0	<==/etc/shadow 內(nèi)的第 4 欄,多久不可重新配置口令日數(shù)
PASS_MIN_LEN    5	<==口令最短的字符長(zhǎng)度,已被 pam 模塊取代,失去效用!
PASS_WARN_AGE   7	<==/etc/shadow 內(nèi)的第 6 欄,過期前會(huì)警告的日數(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 時(shí),是否主動(dòng)創(chuàng)建用戶家目錄?
UMASK           077     <==用戶家目錄創(chuàng)建的 umask ,因此權(quán)限會(huì)是 700
USERGROUPS_ENAB yes     <==使用 userdel 刪除時(shí),是否會(huì)刪除初始群組
MD5_CRYPT_ENAB yes      <==口令是否經(jīng)過 MD5 的加密機(jī)制處理
        
?

?

這個(gè)文件規(guī)范的數(shù)據(jù)則是如下所示:

  • mailbox 所在目錄
    用戶的默認(rèn) mailbox 文件放置的目錄在 /var/spool/mail,所以 vbird1 的 mailbox 就是在 /var/spool/mail/vbird1 啰!

  • shadow 口令第 4, 5, 6 字段內(nèi)容
    透過 PASS_MAX_DAYS 等等配置值來指定的!所以你知道為何默認(rèn)的 /etc/shadow 內(nèi)每一行都會(huì)有『 0:99999:7 』的存在了嗎?^_^!不過要注意的是,由于目前我們登陸時(shí)改用 PAM 模塊來進(jìn)行口令檢驗(yàn),所以那個(gè) PASS_MIN_LEN 是失效的!

  • UID/GID 指定數(shù)值
    雖然 Linux 核心支持的賬號(hào)可高達(dá) 2 32 這么多個(gè),不過一部主機(jī)要作出這么多賬號(hào)在管理上也是很麻煩的! 所以在這里就針對(duì) UID/GID 的范圍進(jìn)行規(guī)范就是了。上表中的 UID_MIN 指的就是可登陸系統(tǒng)的一般賬號(hào)的最小 UID ,至于 UID_MAX 則是最大 UID 之意。

    要注意的是,系統(tǒng)給予一個(gè)賬號(hào) UID 時(shí),他是 (1)先參考 UID_MIN 配置值取得最小數(shù)值; (2)由 /etc/passwd 搜尋最大的 UID 數(shù)值, 將 (1) 與 (2) 相比,找出最大的那個(gè)再加一就是新賬號(hào)的 UID 了。我們上面已經(jīng)作出 UID 為 700 的 vbird2 , 如果再使用『 useradd vbird4 』時(shí),你猜 vbird4 的 UID 會(huì)是多少?答案是: 701 。 所以中間的 505~699 的號(hào)碼就空下來啦!

    而如果我是想要?jiǎng)?chuàng)建系統(tǒng)用的賬號(hào),所以使用 useradd -r sysaccount 這個(gè) -r 的選項(xiàng)時(shí),就會(huì)找『比 500 小的最大的那個(gè) UID + 1 』就是了。 ^_^

  • 用戶家目錄配置值
    為何我們系統(tǒng)默認(rèn)會(huì)幫用戶創(chuàng)建家目錄?就是這個(gè)『CREATE_HOME = yes』的配置值啦!這個(gè)配置值會(huì)讓你在使用 useradd 時(shí), 主動(dòng)加入『 -m 』這個(gè)產(chǎn)生家目錄的選項(xiàng)啊!如果不想要?jiǎng)?chuàng)建用戶家目錄,就只能強(qiáng)制加上『 -M 』的選項(xiàng)在 useradd 命令運(yùn)行時(shí)啦!至于創(chuàng)建家目錄的權(quán)限配置呢?就透過 umask 這個(gè)配置值啊!因?yàn)槭?077 的默認(rèn)配置,因此用戶家目錄默認(rèn)權(quán)限才會(huì)是『 drwx------ 』哩!

  • 用戶刪除與口令配置值
    使用『USERGROUPS_ENAB yes』這個(gè)配置值的功能是: 如果使用 userdel 去刪除一個(gè)賬號(hào)時(shí),且該賬號(hào)所屬的初始群組已經(jīng)沒有人隸屬于該群組了, 那么就刪除掉該群組 ,舉例來說,我們剛剛有創(chuàng)建 vbird4 這個(gè)賬號(hào),他會(huì)主動(dòng)創(chuàng)建 vbird4 這個(gè)群組。 若 vbird4 這個(gè)群組并沒有其他賬號(hào)將他加入支持的情況下,若使用 userdel vbird4 時(shí),該群組也會(huì)被刪除的意思。 至于『MD5_CRYPT_ENAB yes』則表示使用 MD5 來加密口令明文,而不使用舊式的 DES( 注2 ) 。

現(xiàn)在你知道啦,使用 useradd 這支程序在創(chuàng)建 Linux 上的賬號(hào)時(shí),至少會(huì)參考:

  • /etc/default/useradd
  • /etc/login.defs
  • /etc/skel/*

這些文件,不過,最重要的其實(shí)是創(chuàng)建 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 還有用戶家目錄就是了~所以,如果你了解整個(gè)系統(tǒng)運(yùn)行的狀態(tài),也是可以手動(dòng)直接修改這幾個(gè)文件就是了。 OK!賬號(hào)創(chuàng)建了,接下來處理一下用戶的口令吧!


  • passwd

剛剛我們講到了,使用 useradd 創(chuàng)建了賬號(hào)之后,在默認(rèn)的情況下,該賬號(hào)是暫時(shí)被封鎖的, 也就是說,該賬號(hào)是無法登陸的,你可以去瞧一瞧 /etc/shadow 內(nèi)的第二個(gè)字段就曉得啰~ 那該如何是好?怕什么?直接給他配置新口令就好了嘛!對(duì)吧~配置口令就使用 passwd 啰!

?

          [root@www ~]# passwd [--stdin]  <==所有人均可使用來改自己的口令
[root@www ~]# passwd [-l] [-u] [--stdin] [-S] \
>  [-n 日數(shù)] [-x 日數(shù)] [-w 日數(shù)] [-i 日期] 賬號(hào) <==root 功能
選項(xiàng)與參數(shù):
--stdin :可以透過來自前一個(gè)管線的數(shù)據(jù),作為口令輸入,對(duì) shell script 有幫助!
-l  :是 Lock 的意思,會(huì)將 /etc/shadow 第二欄最前面加上 ! 使口令失效;
-u  :與 -l 相對(duì),是 Unlock 的意思!
-S  :列出口令相關(guān)參數(shù),亦即 shadow 文件內(nèi)的大部分信息。
-n  :后面接天數(shù),shadow 的第 4 字段,多久不可修改口令天數(shù)
-x  :后面接天數(shù),shadow 的第 5 字段,多久內(nèi)必須要更動(dòng)口令
-w  :后面接天數(shù),shadow 的第 6 字段,口令過期前的警告天數(shù)
-i  :后面接『日期』,shadow 的第 7 字段,口令失效日期

范例一:請(qǐng) root 給予 vbird2 口令
[root@www ~]# passwd vbird2
Changing password for user vbird2.
New UNIX password: <==這里直接輸入新的口令,屏幕不會(huì)有任何反應(yīng)
BAD PASSWORD: it is WAY too short <==口令太簡(jiǎn)單或過短的錯(cuò)誤!
Retype new UNIX password:  <==再輸入一次同樣的口令
passwd: all authentication tokens updated successfully.  <==竟然還是成功修改了!
        
?

?

root 果然是最偉大的人物!當(dāng)我們要給予用戶口令時(shí),透過 root 來配置即可。 root 可以配置各式各樣的口令,系統(tǒng)幾乎一定會(huì)接受!所以您瞧瞧,如同上面的范例一,明明鳥哥輸入的口令太短了, 但是系統(tǒng)依舊可接受 vbird2 這樣的口令配置。這個(gè)是 root 幫忙配置的結(jié)果,那如果是用戶自己要改口令呢? 包括 root 也是這樣修改的喔!

?

          范例二:用 vbird2 登陸后,修改 vbird2 自己的口令
[vbird2@www ~]$ passwd   <==后面沒有加賬號(hào),就是改自己的口令!
Changing password for user vbird2.
Changing password for vbird2
(current) UNIX password: <==這里輸入『原有的舊口令』
New UNIX password: <==這里輸入新口令
BAD PASSWORD: it is based on a dictionary word <==口令檢驗(yàn)不通過,請(qǐng)?jiān)傧雮€(gè)新口令
New UNIX password: <==這里再想個(gè)來輸入吧
Retype new UNIX password: <==通過口令驗(yàn)證!所以重復(fù)這個(gè)口令的輸入
passwd: all authentication tokens updated successfully. <==有無成功看關(guān)鍵詞
        
?

?

passwd 的使用真的要很注意,尤其是 root 先生啊!鳥哥在課堂上每次講到這里,說是要幫自己的一般賬號(hào)創(chuàng)建口令時(shí), 有一小部分的學(xué)生就是會(huì)忘記加上賬號(hào),結(jié)果就變成改變 root 自己的口令,最后.... root 口令就這樣不見去!唉~ 要幫一般賬號(hào)創(chuàng)建口令需要使用『 passwd 賬號(hào) 』的格式,使用『 passwd 』表示修改自己的口令 !拜托!千萬不要改錯(cuò)!

?

與 root 不同的是,一般賬號(hào)在更改口令時(shí)需要先輸入自己的舊口令 (亦即 current 那一行),然后再輸入新口令 (New 那一行)。 要注意的是,口令的規(guī)范是非常嚴(yán)格的,尤其新的 distributions 大多使用 PAM 模塊來進(jìn)行口令的檢驗(yàn),包括太短、 口令與賬號(hào)相同、口令為字典常見字符串等,都會(huì)被 PAM 模塊檢查出來而拒絕修改口令,此時(shí)會(huì)再重復(fù)出現(xiàn)『 New 』這個(gè)關(guān)鍵詞! 那時(shí)請(qǐng)?jiān)傧雮€(gè)新口令!若出現(xiàn)『 Retype 』才是你的口令被接受了!重復(fù)輸入新口令并且看到『 successfully 』這個(gè)關(guān)鍵詞時(shí)才是修改口令成功喔!

Tips:
與一般使用者不同的是, root 并不需要知道舊口令就能夠幫用戶或 root 自己創(chuàng)建新口令! 但如此一來有困擾~就是如果你的親密愛人老是告訴你『我的口令真難記,幫我配置簡(jiǎn)單一點(diǎn)的!』時(shí), 千萬不要妥協(xié)啊!這是為了系統(tǒng)安全...
鳥哥的圖示

為何用戶要設(shè)訂自己的口令會(huì)這么麻煩啊?這是因?yàn)榭诹畹陌踩岳玻∪绻诹钆渲锰?jiǎn)單, 一些有心人士就能夠很簡(jiǎn)單的猜到你的口令,如此一來人家就可能使用你的一般賬號(hào)登陸你的主機(jī)或使用其他主機(jī)資源, 對(duì)主機(jī)的維護(hù)會(huì)造成困擾的!所以新的 distributions 是使用較嚴(yán)格的 PAM 模塊來管理口令,這個(gè)管理的機(jī)制寫在 /etc/pam.d/passwd 當(dāng)中。而 該文件與口令有關(guān)的測(cè)試模塊就是使用:pam_cracklib.so,這個(gè)模塊會(huì)檢驗(yàn)口令相關(guān)的信息, 并且取代 /etc/login.defs 內(nèi)的 PASS_MIN_LEN 的配置 啦!關(guān)于 PAM 我們?cè)诒菊潞竺胬^續(xù)介紹,這里先談一下, 理論上,你的口令最好符合如下要求:

  • 口令不能與賬號(hào)相同;
  • 口令盡量不要選用字典里面會(huì)出現(xiàn)的字符串;
  • 口令需要超過 8 個(gè)字符;
  • 口令不要使用個(gè)人信息,如身份證、手機(jī)號(hào)碼、其他電話號(hào)碼等;
  • 口令不要使用簡(jiǎn)單的關(guān)系式,如 1+1=2, Iamvbird 等;
  • 口令盡量使用大小寫字符、數(shù)字、特殊字符($,_,-等)的組合。

為了方便系統(tǒng)管理,新版的 passwd 還加入了很多創(chuàng)意選項(xiàng)喔!鳥哥個(gè)人認(rèn)為最好用的大概就是這個(gè)『 --stdin 』了! 舉例來說,你想要幫 vbird2 變更口令成為 abc543CC ,可以這樣下達(dá)命令呢!

?

          范例三:使用 standard input 創(chuàng)建用戶的口令
[root@www ~]# echo "abc543CC" | passwd --stdin vbird2
Changing password for user vbird2.
passwd: all authentication tokens updated successfully.
        
?

?

這個(gè)動(dòng)作會(huì)直接升級(jí)用戶的口令而不用再次的手動(dòng)輸入!好處是方便處理,缺點(diǎn)是這個(gè)口令會(huì)保留在命令中, 未來若系統(tǒng)被攻破,人家可以在 /root/.bash_history 找到這個(gè)口令呢!所以這個(gè)動(dòng)作通常僅用在 shell script 的大量創(chuàng)建使用者賬號(hào)當(dāng)中!要注意的是,這個(gè)選項(xiàng)并不存在所有 distributions 版本中, 請(qǐng)使用 man passwd 確認(rèn)你的 distribution 是否有支持此選項(xiàng)喔!

?

如果你想要讓 vbird2 的口令具有相當(dāng)?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)建時(shí)間 (2009-02-26)、0 最小天數(shù)、99999 變更天數(shù)、7 警告日數(shù)
# 與口令不會(huì)失效 (-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.)
        
?

?

那如果我想要讓某個(gè)賬號(hào)暫時(shí)無法使用口令登陸主機(jī)呢?舉例來說, vbird2 這家伙最近老是胡亂在主機(jī)亂來, 所以我想要暫時(shí)讓她無法登陸的話,最簡(jiǎn)單的方法就是讓她的口令變成不合法 (shadow 第 2 字段長(zhǎng)度變掉)! 處理的方法就更簡(jiǎn)單的!

?

          范例五:讓 vbird2 的賬號(hào)失效,觀察完畢后再讓她失效
[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::
# 其實(shí)只是在這里加上 !! 而已!

[root@www ~]# passwd -u vbird2
[root@www ~]# grep vbird2 /etc/shadow
vbird2:$1$50MnwNFq$oChX.0TPanCq7ecE4HYEi.:14301:0:60:7:10::
# 口令字段恢復(fù)正常!
        
?

?

是否很有趣啊!您可以自行管理一下你的賬號(hào)的口令相關(guān)參數(shù)喔!接下來讓我們用更簡(jiǎn)單的方法來查閱口令參數(shù)喔!


  • chage

除了使用 passwd -S 之外,有沒有更詳細(xì)的口令參數(shù)顯示功能呢?有的!那就是 chage 了! 他的用法如下:

?

          [root@www ~]# chage [-ldEImMW] 賬號(hào)名
選項(xiàng)與參數(shù):
-l :列出該賬號(hào)的詳細(xì)口令參數(shù);
-d :后面接日期,修改 shadow 第三字段(最近一次更改口令的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(賬號(hào)失效日),格式 YYYY-MM-DD
-I :后面接天數(shù),修改 shadow 第七字段(口令失效日期)
-m :后面接天數(shù),修改 shadow 第四字段(口令最短保留天數(shù))
-M :后面接天數(shù),修改 shadow 第五字段(口令多久需要進(jìn)行變更)
-W :后面接天數(shù),修改 shadow 第六字段(口令過期前警告日期)

范例一:列出 vbird2 的詳細(xì)口令參數(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
        
?

?

我們?cè)? passwd 的介紹中談到了處理 vbird2 這個(gè)賬號(hào)的口令屬性流程,使用 passwd -S 卻無法看到很清楚的說明。如果使用 chage 那可就明白多了!如上表所示,我們可以清楚的知道 vbird2 的詳細(xì)參數(shù)呢! 如果想要修改其他的配置值,就自己參考上面的選項(xiàng),或者自行 man chage 一下吧!^_^

?

chage 有一個(gè)功能很不錯(cuò)喔!如果你想要讓『 使用者在第一次登陸時(shí), 強(qiáng)制她們一定要更改口令后才能夠使用系統(tǒng)資源 』,可以利用如下的方法來處理的!

?

          范例二:創(chuàng)建一個(gè)名為 agetest 的賬號(hào),該賬號(hào)第一次登陸后使用默認(rèn)口令,
        但必須要更改過口令后,使用新口令才能夠登陸系統(tǒng)使用 bash 環(huán)境
[root@www ~]# useradd agetest
[root@www ~]# echo "agetest" | passwd --stdin agetest
[root@www ~]# chage -d 0 agetest
# 此時(shí)此賬號(hào)的口令創(chuàng)建時(shí)間會(huì)被改為 1970/1/1 ,所以會(huì)有問題!

范例三:嘗試以 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:  <==這個(gè)賬號(hào)被強(qiáng)制要求必須要改口令!
        
?

?

非常有趣吧!你會(huì)發(fā)現(xiàn) agetest 這個(gè)賬號(hào)在第一次登陸時(shí)可以使用與賬號(hào)同名的口令登陸, 但登陸時(shí)就會(huì)被要求立刻更改口令,更改口令完成后就會(huì)被踢出系統(tǒng)。再次登陸時(shí)就能夠使用新口令登陸了! 這個(gè)功能對(duì)學(xué)校老師非常有幫助!因?yàn)槲覀儾幌胍缹W(xué)生的口令,那么在初次上課時(shí)就使用與學(xué)號(hào)相同的賬號(hào)/口令給學(xué)生, 讓她們登陸時(shí)自行配置她們的口令,如此一來就能夠避免其他同學(xué)隨意使用別人的賬號(hào),也能夠保證學(xué)生知道如何更改自己的口令!


  • usermod

所謂這『人有失手,馬有亂蹄』,您說是吧?所以啰,當(dāng)然有的時(shí)候會(huì)『不小心』在 useradd 的時(shí)候加入了錯(cuò)誤的配置數(shù)據(jù)。或者是,在使用 useradd 后,發(fā)現(xiàn)某些地方還可以進(jìn)行細(xì)部修改。 此時(shí),當(dāng)然我們可以直接到 /etc/passwd 或 /etc/shadow 去修改相對(duì)應(yīng)字段的數(shù)據(jù), 不過,Linux 也有提供相關(guān)的命令讓大家來進(jìn)行賬號(hào)相關(guān)數(shù)據(jù)的微調(diào)呢~那就是 usermod 啰~

?

          [root@www ~]# usermod [-cdegGlsuLU] username
選項(xiàng)與參數(shù):
-c  :后面接賬號(hào)的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些賬號(hào)的說明。
-d  :后面接賬號(hào)的家目錄,即修改 /etc/passwd 的第六欄;
-e  :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內(nèi)的第八個(gè)字段數(shù)據(jù)啦!
-f  :后面接天數(shù),為 shadow 的第七字段。
-g  :后面接初始群組,修改 /etc/passwd 的第四個(gè)字段,亦即是 GID 的字段!
-G  :后面接次要群組,修改這個(gè)使用者能夠支持的群組,修改的是 /etc/group 啰~
-a  :與 -G 合用,可『添加次要群組的支持』而非『配置』喔!
-l  :后面接賬號(hào)名稱。亦即是修改賬號(hào)名稱, /etc/passwd 的第一欄!
-s  :后面接 Shell 的實(shí)際文件,例如 /bin/bash 或 /bin/csh 等等。
-u  :后面接 UID 數(shù)字啦!即 /etc/passwd 第三欄的數(shù)據(jù);
-L  :暫時(shí)將用戶的口令凍結(jié),讓他無法登陸。其實(shí)僅改 /etc/shadow 的口令欄。
-U  :將 /etc/shadow 口令欄的 ! 拿掉,解凍啦!
        
?

?

如果你仔細(xì)的比對(duì),會(huì)發(fā)現(xiàn) usermod 的選項(xiàng)與 useradd 非常類似! 這是因?yàn)?usermod 也是用來微調(diào) useradd 添加的使用者參數(shù)嘛!不過 usermod 還是有新增的選項(xiàng), 那就是 -L 與 -U ,不過這兩個(gè)選項(xiàng)其實(shí)與 passwd 的 -l, -u 是相同的!而且也不見得會(huì)存在所有的 distribution 當(dāng)中!接下來,讓我們談?wù)勔恍┳兏鼌?shù)的實(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 這個(gè)系統(tǒng)賬號(hào)時(shí)并沒有給予家目錄,請(qǐng)創(chuàng)建他的家目錄
[root@www ~]# ll -d ~vbird3
ls: /home/vbird3: No such file or directory  <==確認(rèn)一下,確實(shí)沒有家目錄的存在!
[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 ,是因?yàn)槲覀儍H要修改目錄的權(quán)限而非內(nèi)部文件的權(quán)限!
        
?

  • userdel

這個(gè)功能就太簡(jiǎn)單了,目的在刪除用戶的相關(guān)數(shù)據(jù),而用戶的數(shù)據(jù)有:

  • 用戶賬號(hào)/口令相關(guān)參數(shù):/etc/passwd, /etc/shadow
  • 使用者群組相關(guān)參數(shù):/etc/group, /etc/gshadow
  • 用戶個(gè)人文件數(shù)據(jù): /home/username, /var/spool/mail/username..

整個(gè)命令的語(yǔ)法非常簡(jiǎn)單:

?

          [root@www ~]# userdel [-r] username
選項(xiàng)與參數(shù):
-r  :連同用戶的家目錄也一起刪除

范例一:刪除 vbird2 ,連同家目錄一起刪除
[root@www ~]# userdel -r vbird2
        
?

?

這個(gè)命令下達(dá)的時(shí)候要小心了!通常我們要移除一個(gè)賬號(hào)的時(shí)候,你可以手動(dòng)的將 /etc/passwd 與 /etc/shadow 里頭的該賬號(hào)取消即可!一般而言,如果該賬號(hào)只是『 暫時(shí)不激活 』的話,那么將 /etc/shadow 里頭賬號(hào)失效日期 (第八字段) 配置為 0 就可以讓該賬號(hào)無法使用,但是所有跟該賬號(hào)相關(guān)的數(shù)據(jù)都會(huì)留下來! 使用 userdel 的時(shí)機(jī)通常是『 你真的確定不要讓該用戶在主機(jī)上面使用任何數(shù)據(jù)了 !』

?

另外,其實(shí)用戶如果在系統(tǒng)上面操作過一陣子了,那么該用戶其實(shí)在系統(tǒng)內(nèi)可能會(huì)含有其他文件的。 舉例來說,他的郵件信箱 (mailbox) 或者是 例行性工作排程 (crontab, 十六章) 之類的文件。 所以,如果想要完整的將某個(gè)賬號(hào)完整的移除,最好可以在下達(dá) userdel -r username 之前, 先以『 find / -user username 』查出整個(gè)系統(tǒng)內(nèi)屬于 username 的文件,然后再加以刪除吧!


小標(biāo)題的圖示 用戶功能

不論是 useradd/usermod/userdel ,那都是系統(tǒng)管理員所能夠使用的命令, 如果我是一般身份使用者,那么我是否除了口令之外,就無法更改其他的數(shù)據(jù)呢? 當(dāng)然不是啦!這里我們介紹幾個(gè)一般身份用戶常用的賬號(hào)數(shù)據(jù)變更與查詢命令啰!


  • finger

finger 的中文字面意義是:『手指』或者是『指紋』的意思。這個(gè) finger 可以查閱很多用戶相關(guān)的信息喔! 大部分都是在 /etc/passwd 這個(gè)文件里面的信息啦!我們就先來檢查檢查用戶信息吧!

?

          [root@www ~]# finger [-s] username
選項(xiàng)與參數(shù):
-s  :僅列出用戶的賬號(hào)、全名、終端機(jī)代號(hào)與登陸時(shí)間等等;
-m  :列出與后面接的賬號(hào)相同者,而不是利用部分比對(duì) (包括全名部分)

范例一:觀察 vbird1 的用戶相關(guān)賬號(hào)屬性
[root@www ~]# finger vbird1
Login: vbird1                           Name: (null)
Directory: /home/vbird1                 Shell: /bin/bash
Never logged in.
No mail.
No Plan.
        
?

?

由于 finger 類似指紋的功能,他會(huì)將用戶的相關(guān)屬性列出來!如上表所示,其實(shí)他列出來的幾乎都是 /etc/passwd 文件里面的東西。列出的信息說明如下:

  • Login:為使用者賬號(hào),亦即 /etc/passwd 內(nèi)的第一字段;
  • Name:為全名,亦即 /etc/passwd 內(nèi)的第五字段(或稱為批注);
  • Directory:就是家目錄了;
  • Shell:就是使用的 Shell 文件所在;
  • Never logged in.:figner 還會(huì)調(diào)查用戶登陸主機(jī)的情況喔!
  • No mail.:調(diào)查 /var/spool/mail 當(dāng)中的信箱數(shù)據(jù);
  • No Plan.:調(diào)查 ~vbird1/.plan 文件,并將該文件取出來說明!

不過是否能夠查閱到 Mail 與 Plan 則與權(quán)限有關(guān)了!因?yàn)?Mail / Plan 都是與使用者自己的權(quán)限配置有關(guān), root 當(dāng)然可以查閱到用戶的這些信息,但是 vbird1 就不見得能夠查到 vbird3 的信息, 因?yàn)?/var/spool/mail/vbird3 與 /home/vbird3/ 的權(quán)限分別是 660, 700 ,那 vbird1 當(dāng)然就無法查閱的到! 這樣解釋可以理解吧?此外,我們可以創(chuàng)建自己想要運(yùn)行的預(yù)定計(jì)劃,當(dāng)然,最多是給自己看的!可以這樣做:

?

          范例二:利用 vbird1 創(chuàng)建自己的計(jì)劃?rùn)n
[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)上面登陸的用戶與登陸時(shí)間
[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
        
?

?

在范例三當(dāng)中,我們發(fā)現(xiàn)輸出的信息還會(huì)有 Office, Office Phone 等信息,那這些信息要如何記錄呢? 底下我們會(huì)介紹 chfn 這個(gè)命令!來看看如何修改用戶的 finger 數(shù)據(jù)吧!


  • chfn

chfn 有點(diǎn)像是: change finger 的意思!這玩意的使用方法如下:

?

          [root@www ~]# chfn [-foph] [賬號(hào)名]
選項(xiàng)與參數(shù):
-f  :后面接完整的大名;
-o  :您辦公室的房間號(hào)碼;
-p  :辦公室的電話號(hào)碼;
-h  :家里的電話號(hào)碼!

范例一:vbird1 自己更改一下自己的相關(guān)信息!
[vbird1@www ~]$ chfn
Changing finger information for vbird1.
Password:                        <==確認(rèn)身份,所以輸入自己的口令
Name []: VBird Tsai test         <==輸入你想要呈現(xiàn)的全名
Office []: Dic in Ksu. Tainan    <==辦公室號(hào)碼
Office Phone []: 06-2727175#356  <==辦公室電話
Home Phone []: 06-1234567        <==家里電話號(hào)碼

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
# 其實(shí)就是改到第五個(gè)字段,該字段里面用多個(gè)『 , 』分隔就是了!

[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 所修改出來的!
        
?

?

這個(gè)命令說實(shí)在的,除非是你的主機(jī)有很多的用戶,否則倒真是用不著這個(gè)程序!這就有點(diǎn)像是 bbs 里頭更改你『個(gè)人屬性』的那一個(gè)數(shù)據(jù)啦!不過還是可以自己玩一玩!尤其是用來提醒自己相關(guān)數(shù)據(jù)啦! ^_^


  • chsh

這就是 change shell 的簡(jiǎn)寫!使用方法就更簡(jiǎn)單了!

?

          [vbird1@www ~]$ chsh [-ls]
選項(xiàng)與參數(shù):
-l  :列出目前系統(tǒng)上面可用的 shell ,其實(shí)就是 /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
# 其實(shí)上面的信息就是我們?cè)?bash 中談到的 /etc/shells 啦!

[vbird1@www ~]$ chsh -s /bin/csh; grep vbird1 /etc/passwd
Changing shell for vbird1.
Password:  <==確認(rèn)身份,請(qǐng)輸入 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
# 測(cè)試完畢后,立刻改回來!

[vbird1@www ~]$ ll $(which chsh)
-rws--x--x 1 root root 19128 May 25  2008 /usr/bin/chsh
        
?

?

不論是 chfn 與 chsh ,都是能夠讓一般用戶修改 /etc/passwd 這個(gè)系統(tǒng)文件的!所以你猜猜,這兩個(gè)文件的權(quán)限是什么? 一定是 SUID 的功能啦!看到這里,想到前面! 這就是 Linux 的學(xué)習(xí)方法~ ^_^


  • id

id 這個(gè)命令則可以查詢某人或自己的相關(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í)是同一行的數(shù)據(jù)!包括會(huì)顯示 UID/GID 以及支持的所有群組!
# 至于后面那個(gè) context=... 則是 SELinux 的內(nèi)容,先不要理會(huì)他!

范例二:查閱一下 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 這個(gè)命令也可以用來判斷系統(tǒng)上面有無某賬號(hào)!
        
?

?


小標(biāo)題的圖示 新增與移除群組

OK!了解了賬號(hào)的新增、刪除、更動(dòng)與查詢后,再來我們可以聊一聊群組的相關(guān)內(nèi)容了。 基本上,群組的內(nèi)容都與這兩個(gè)文件有關(guān): /etc/group, /etc/gshadow 。 群組的內(nèi)容其實(shí)很簡(jiǎn)單,都是上面兩個(gè)文件的新增、修改與移除而已, 不過,如果再加上有效群組的概念,那么 newgrp 與 gpasswd 則不可不知呢!


  • groupadd
          [root@www ~]# groupadd [-g gid] [-r] 組名
選項(xiàng)與參數(shù):
-g  :后面接某個(gè)特定的 GID ,用來直接給予某個(gè) GID ~
-r  :創(chuàng)建系統(tǒng)群組啦!與 /etc/login.defs 內(nèi)的 GID_MIN 有關(guān)。

范例一:新建一個(gè)群組,名稱為 group1
[root@www ~]# groupadd group1
[root@www ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:702:
/etc/gshadow:group1:!::
# 群組的 GID 也是會(huì)由 500 以上最大 GID+1 來決定!
        
?

曾經(jīng)有某些版本的教育訓(xùn)練手冊(cè)談到,為了讓使用者的 UID/GID 成對(duì),她們建議 新建的與使用者私有群組無關(guān)的其他群組時(shí),使用小于 500 以下的 GID 為宜 。 也就是說,如果要?jiǎng)?chuàng)建群組的話,最好能夠使用『 groupadd -r 群組名』的方式來創(chuàng)建啦! 不過,這見仁見智啦!看你自己的抉擇啰!


  • groupmod

usermod 類似的,這個(gè)命令僅是在進(jìn)行 group 相關(guān)參數(shù)的修改而已。

?

          [root@www ~]# groupmod [-g gid] [-n group_name] 群組名
選項(xiàng)與參數(shù):
-g  :修改既有的 GID 數(shù)字;
-n  :修改既有的組名

范例一:將剛剛上個(gè)命令創(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:!::
        
?

?

不過,還是那句老話,不要隨意的更動(dòng) GID ,容易造成系統(tǒng)資源的錯(cuò)亂喔!


  • groupdel

呼呼! groupdel 自然就是在刪除群組的啰~用法很簡(jiǎn)單:

?

          [root@www ~]# groupdel [groupname]

范例一:將剛剛的 mygroup 刪除!
[root@www ~]# groupdel mygroup

范例二:若要?jiǎng)h除 vbird1 這個(gè)群組的話?
[root@www ~]# groupdel vbird1
groupdel: cannot remove user's primary group.
        
?

?

為什么 mygroup 可以刪除,但是 vbird1 就不能刪除呢?原因很簡(jiǎn)單,『 有某個(gè)賬號(hào) (/etc/passwd) 的 initial group 使用該群組! 』 如果查閱一下,你會(huì)發(fā)現(xiàn)在 /etc/passwd 內(nèi)的 vbird1 第四欄的 GID 就是 /etc/group 內(nèi)的 vbird1 那個(gè)群組的 GID ,所以啰,當(dāng)然無法刪除~否則 vbird1 這個(gè)用戶登陸系統(tǒng)后, 就會(huì)找不到 GID ,那可是會(huì)造成很大的困擾的!那么如果硬要?jiǎng)h除 vbird1 這個(gè)群組呢? 你『 必須要確認(rèn) /etc/passwd 內(nèi)的賬號(hào)沒有任何人使用該群組作為 initial group 』才行喔!所以,你可以:

  • 修改 vbird1 的 GID ,或者是:
  • 刪除 vbird1 這個(gè)使用者。

  • gpasswd:群組管理員功能

如果系統(tǒng)管理員太忙碌了,導(dǎo)致某些賬號(hào)想要加入某個(gè)項(xiàng)目時(shí)找不到人幫忙!這個(gè)時(shí)候可以創(chuàng)建『群組管理員』喔! 什么是群組管理員呢?就是讓某個(gè)群組具有一個(gè)管理員,這個(gè)群組管理員可以管理哪些賬號(hào)可以加入/移出該群組! 那要如何『創(chuàng)建一個(gè)群組管理員』呢?就得要透過 gpasswd 啰!

?

          # 關(guān)于系統(tǒng)管理員(root)做的動(dòng)作:
[root@www ~]# gpasswd groupname
[root@www ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[root@www ~]# gpasswd [-rR] groupname
選項(xiàng)與參數(shù):
    :若沒有任何參數(shù)時(shí),表示給予 groupname 一個(gè)口令(/etc/gshadow)
-A  :將 groupname 的主控權(quán)交由后面的使用者管理(該群組的管理員)
-M  :將某些賬號(hào)加入這個(gè)群組當(dāng)中!
-r  :將 groupname 的口令移除
-R  :讓 groupname 的口令欄失效

# 關(guān)于群組管理員(Group administrator)做的動(dòng)作:
[someone@www ~]$ gpasswd [-ad] user groupname
選項(xiàng)與參數(shù):
-a  :將某位使用者加入到 groupname 這個(gè)群組當(dāng)中!
-d  :將某位使用者移除出 groupname 這個(gè)群組當(dāng)中。

范例一:創(chuàng)建一個(gè)新群組,名稱為 testgroup 且群組交由 vbird1 管理:
[root@www ~]# groupadd testgroup  <==先創(chuàng)建群組
[root@www ~]# gpasswd testgroup   <==給這個(gè)群組一個(gè)口令吧!
Changing the password for group testgroup
New Password:
Re-enter new password:
# 輸入兩次口令就對(duì)了!
[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:
# 很有趣吧!此時(shí) vbird1 則擁有 testgroup 的主控權(quán)喔!身份有點(diǎ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
        
?

?

很有趣的一個(gè)小實(shí)驗(yàn)吧!我們可以讓 testgroup 成為一個(gè)可以公開的群組,然后創(chuàng)建起群組管理員, 群組管理員可以有多個(gè)。在這個(gè)案例中,我將 vbird1 配置為 testgroup 的群組管理員,所以 vbird1 就可以自行添加群組成員啰~呼呼!然后,該群組成員就能夠使用 newgrp 啰~


小標(biāo)題的圖示 賬號(hào)管理實(shí)例

賬號(hào)管理不是隨意建置幾個(gè)賬號(hào)就算了!有時(shí)候我們需要考慮到一部主機(jī)上面可能有多個(gè)賬號(hào)在協(xié)同工作! 舉例來說,在大學(xué)任教時(shí),我們學(xué)校的專題生是需要分組的,這些同一組的同學(xué)間必須要能夠互相修改對(duì)方的數(shù)據(jù)文件, 但是同時(shí)這些同學(xué)又需要保留自己的私密數(shù)據(jù),因此直接公開家目錄是不適宜的。那該如何是好? 為此,我們底下提供幾個(gè)例子來讓大家思考看看啰:

任務(wù)一:?jiǎn)渭兊耐瓿缮项^交代的任務(wù),假設(shè)我們需要的賬號(hào)數(shù)據(jù)如下,你該如何實(shí)作?

賬號(hào)名稱 賬號(hào)全名 支持次要群組 是否可登陸主機(jī) 口令
myuser1 1st user mygroup1 可以 password
myuser2 2nd user mygroup1 可以 password
myuser3 3rd user 無額外支持 不可以 password

?

處理的方法如下所示:

?

          # 先處理賬號(hào)相關(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

# 再處理賬號(hào)的口令相關(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 都有支持次要群組,但該群組不見得會(huì)存在,因此需要先手動(dòng)創(chuàng)建他! 然后 myuser3 是『不可登陸系統(tǒng)』的賬號(hào),因此需要使用 /sbin/nologin 這個(gè) shell 來給予,這樣該賬號(hào)就無法登陸啰! 這樣是否理解啊!接下來再來討論比較難一些的環(huán)境!如果是專題環(huán)境該如何制作?

?

任務(wù)二:我的使用者 pro1, pro2, pro3 是同一個(gè)項(xiàng)目計(jì)劃的開發(fā)人員,我想要讓這三個(gè)用戶在同一個(gè)目錄底下工作, 但這三個(gè)用戶還是擁有自己的家目錄與基本的私有群組。假設(shè)我要讓這個(gè)項(xiàng)目計(jì)劃在 /srv/projecta 目錄下開發(fā), 可以如何進(jìn)行?

?

          # 1. 假設(shè)這三個(gè)賬號(hào)都尚未創(chuàng)建,可先創(chuàng)建一個(gè)名為 projecta 的群組,
#    再讓這三個(gè)用戶加入其次要群組的支持即可:
[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)建此項(xià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
        
?

?

由于此項(xiàng)目計(jì)劃只能夠給 pro1, pro2, pro3 三個(gè)人使用,所以 /srv/projecta 的權(quán)限配置一定要正確才行! 所以該目錄群組一定是 projecta ,但是權(quán)限怎么會(huì)是 2770 呢還記得 第七章談到的 SGID 吧?為了讓三個(gè)使用者能夠互相修改對(duì)方的文件, 這個(gè) SGID 是必須要存在的喔!如果連這里都能夠理解,嘿嘿!您的賬號(hào)管理已經(jīng)有一定程度的概念啰! ^_^

?

但接下來有個(gè)困擾的問題發(fā)生了!假如任務(wù)一的 myuser1 是 projecta 這個(gè)項(xiàng)目的助理,他需要這個(gè)項(xiàng)目的內(nèi)容, 但是他『不可以修改』項(xiàng)目目錄內(nèi)的任何數(shù)據(jù)!那該如何是好?你或許可以這樣做:

  • 將 myuser1 加入 projecta 這個(gè)群組的支持,但是這樣會(huì)讓 myuser1 具有完整的 /srv/projecta 的權(quán)限, myuser1 是可以刪除該目錄下的任何數(shù)據(jù)的!這樣是有問題的;
  • 將 /srv/projecta 的權(quán)限改為 2775 ,讓 myuser1 可以進(jìn)入查閱數(shù)據(jù)。但此時(shí)會(huì)發(fā)生所有其他人均可進(jìn)入該目錄查閱的困擾! 這也不是我們要的環(huán)境。

真要命!傳統(tǒng)的 Linux 權(quán)限無法針對(duì)某個(gè)個(gè)人配置專屬的權(quán)限嗎?其實(shí)是可以啦!接下來我們就來談?wù)勥@個(gè)功能吧!

?

3. 主機(jī)的細(xì)部權(quán)限規(guī)劃:ACL 的使用

第六章 開始,我們就一直強(qiáng)調(diào) Linux 的權(quán)限概念是非常重要的! 但是傳統(tǒng)的權(quán)限僅有三種身份 (owner, group, others) 搭配三種權(quán)限 (r,w,x) 而已,并沒有辦法單純的針對(duì)某一個(gè)使用者或某一個(gè)群組來配置特定的權(quán)限需求,例如前一小節(jié)最后的那個(gè)任務(wù)! 此時(shí)就得要使用 ACL 這個(gè)機(jī)制啦!這玩意挺有趣的,底下我們就來談一談:


小標(biāo)題的圖示 什么是 ACL

ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統(tǒng)的 owner,group,others 的 read,write,execute 權(quán)限之外的細(xì)部權(quán)限配置。ACL 可以針對(duì)單一使用者,單一文件或目錄來進(jìn)行 r,w,x 的權(quán)限規(guī)范,對(duì)于需要特殊權(quán)限的使用狀況非常有幫助。

那 ACL 主要可以針對(duì)哪些方面來控制權(quán)限呢?他主要可以針對(duì)幾個(gè)項(xiàng)目:

  • 使用者 (user):可以針對(duì)使用者來配置權(quán)限;
  • 群組 (group):針對(duì)群組為對(duì)象來配置其權(quán)限;
  • 默認(rèn)屬性 (mask):還可以針對(duì)在該目錄下在創(chuàng)建新文件/目錄時(shí),規(guī)范新數(shù)據(jù)的默認(rèn)權(quán)限;

好了,再來看看如何讓你的文件系統(tǒng)可以支持 ACL 吧!


小標(biāo)題的圖示 如何啟動(dòng) ACL

由于 ACL 是傳統(tǒng)的 Unix-like 操作系統(tǒng)權(quán)限的額外支持項(xiàng)目,因此要使用 ACL 必須要有文件系統(tǒng)的支持才行。目前絕大部分的文件系統(tǒng)都有支持 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。在我們的 CentOS 5.x 當(dāng)中,默認(rèn)使用 Ext3 是啟動(dòng) ACL 支持的!至于察看你的文件系統(tǒng)是否支持 ACL 可以這樣看:

?

          [root@www ~]# mount  <==直接查閱掛載參數(shù)的功能
/dev/hda2 on / type ext3 (rw)
/dev/hda3 on /home type ext3 (rw)
# 其他項(xiàng)目鳥哥都將他省略了!假設(shè)我們只要看這兩個(gè)裝置。但沒有看到 acl 喔!

[root@www ~]# dumpe2fs -h /dev/hda2  <==由 superblock 內(nèi)容去查詢
....(前面省略)....
Default mount options:    user_xattr acl
....(后面省略)....
        
?

?

由 mount 單純?nèi)ゲ殚啿灰姷每梢钥吹綄?shí)際的項(xiàng)目,由于目前新的 distributions 常常會(huì)主動(dòng)加入某些默認(rèn)功能, 如上表所示,其實(shí) CentOS 5.x 在默認(rèn)的情況下 (Default mount options:) 就幫你加入 acl 的支持了! 那如果你的系統(tǒng)默認(rèn)不會(huì)幫你加上 acl 的支持呢?那你可以這樣做:

?

          [root@www ~]# mount -o remount,acl /
[root@www ~]# mount
/dev/hda2 on / type ext3 (rw,acl)
# 這樣就加入了!但是如果想要每次啟動(dòng)都生效,那就這樣做:

[root@www ~]# vi /etc/fstab
LABEL=/1   /   ext3    defaults,acl    1 1
        
?

?

如果你不確定或者是不會(huì)使用 dumpe2fs 觀察你的文件系統(tǒng),那么建議直接將上述的 /etc/fstab 里面的內(nèi)容修改一下即可!


小標(biāo)題的圖示 ACL 的配置技巧: getfacl, setfacl

好了,讓你的 filesystem 啟動(dòng) ACL 支持后,接下來該如何配置與觀察 ACL 呢? 很簡(jiǎn)單,利用這兩個(gè)命令就可以了:

  • getfacl:取得某個(gè)文件/目錄的 ACL 配置項(xiàng)目;
  • setfacl:配置某個(gè)目錄/文件的 ACL 規(guī)范。

先讓我們來瞧一瞧 setfacl 如何使用吧!


  • setfacl 命令用法
          [root@www ~]# setfacl [-bkRd] [{-m|-x} acl參數(shù)] 目標(biāo)文件名
選項(xiàng)與參數(shù):
-m :配置后續(xù)的 acl 參數(shù)給文件使用,不可與 -x 合用;
-x :刪除后續(xù)的 acl 參數(shù),不可與 -m 合用;
-b :移除所有的 ACL 配置參數(shù);
-k :移除默認(rèn)的 ACL 參數(shù),關(guān)于所謂的『默認(rèn)』參數(shù)于后續(xù)范例中介紹;
-R :遞歸配置 acl ,亦即包括次目錄都會(huì)被配置起來;
-d :配置『默認(rèn) acl 參數(shù)』的意思!只對(duì)目錄有效,在該目錄新建的數(shù)據(jù)會(huì)引用此默認(rèn)值
        
?

上面談到的是 acl 的選項(xiàng)功能,那么如何配置 ACL 的特殊權(quán)限呢?特殊權(quán)限的配置方法有很多, 我們先來談?wù)勛畛R姷模褪轻槍?duì)單一使用者的配置方式:

?

          # 1. 針對(duì)特定使用者的方式:
# 配置規(guī)范:『 u:[使用者賬號(hào)列表]:[rwx] 』,例如針對(duì) 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)限部分多了個(gè) + ,且與原本的權(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 了!
        
?

?

上述動(dòng)作為最簡(jiǎn)單的 ACL 配置,利用『 u:使用者:權(quán)限 』的方式來配置的啦!配置前請(qǐng)加上 -m 這個(gè)選項(xiàng)。 如果一個(gè)文件配置了 ACL 參數(shù)后,他的權(quán)限部分就會(huì)多出一個(gè) + 號(hào)了!但是此時(shí)你看到的權(quán)限與實(shí)際權(quán)限可能就會(huì)有點(diǎn)誤差! 那要如何觀察呢?就透過 getfacl 吧!


  • getfacl 命令用法
          [root@www ~]# getfacl filename
選項(xiàng)與參數(shù):
getfacl 的選項(xiàng)幾乎與 setfacl 相同!所以鳥哥這里就免去了選項(xiàng)的說明啊!

# 請(qǐng)列出剛剛我們配置的 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     <==針對(duì) vbird1 的權(quán)限配置為 rx ,與擁有者并不同!
group::r--          <==針對(duì)文件群組的權(quán)限配置僅有 r 
mask::r-x           <==此文件默認(rèn)的有效權(quán)限 (mask)
other::r--          <==其他人擁有的權(quán)限啰!
        
?

上面的數(shù)據(jù)非常容易查閱吧?顯示的數(shù)據(jù)前面加上 # 的,代表這個(gè)文件的默認(rèn)屬性,包括文件名、文件擁有者與文件所屬群組。 底下出現(xiàn)的 user, group, mask, other 則是屬于不同使用者、群組與有效權(quán)限(mask)的配置值。 以上面的結(jié)果來看,我們剛剛配置的 vbird1 對(duì)于這個(gè)文件具有 r 與 x 的權(quán)限啦!這樣看的懂嗎? 如果看的懂的話,接下來讓我們?cè)跍y(cè)試其他類型的 setfacl 配置吧!

?

          # 2. 針對(duì)特定群組的方式:
# 配置規(guī)范:『 g:[群組列表]:[rwx] 』,例如針對(duì) 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  <==這里就是新增的部分!多了這個(gè)群組的權(quán)限配置!
mask::r-x
other::r--
        
?

?

基本上,群組與使用者的配置并沒有什么太大的差異啦!如上表所示,非常容易了解意義。不過,你應(yīng)該會(huì)覺得奇怪的是, 那個(gè) mask 是什么東西啊?其實(shí)他有點(diǎn)像是『有效權(quán)限』的意思!他的意義是: 使用者或群組所配置的權(quán)限必須要存在于 mask 的權(quán)限配置范圍內(nèi)才會(huì)生效,此即『有效權(quán)限 (effective permission)』 我們舉個(gè)例子來看,如下所示:

?

          # 3. 針對(duì)有效權(quán)限 mask 的配置方式:
# 配置規(guī)范:『 m:[rwx] 』,例如針對(duì)剛剛的文件規(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 這個(gè)目錄,讓 myuser1 可以進(jìn)入查閱,但 myuser1 不具有修改的權(quán)力。
答:
由于 myuser1 是獨(dú)立的使用者與群組,而 /srv 是附屬于 / 之下的,因此 /srv 已經(jīng)具有 acl 的功能。 透過如下的配置即可搞定:
                    # 1. 先測(cè)試看看,使用 myuser1 能否進(jìn)入該目錄?
[myuser1@www ~]$ cd /srv/projecta
-bash: cd: /srv/projecta: Permission denied  <==確實(shí)不可進(jìn)入!

# 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 去測(cè)試看看結(jié)果!
[myuser1@www ~]$ cd /srv/projecta
[myuser1@www projecta]$ ll -a
drwxrws---+ 2 root projecta 4096 Feb 27 11:29 .  <==確實(shí)可以查詢檔名
drwxr-xr-x  4 root root     4096 Feb 27 11:29 ..

[myuser1@www projecta]$ touch testing
touch: cannot touch `testing': Permission denied <==確實(shí)不可以寫入!

                  
?
請(qǐng)注意,上述的 1, 3 步驟使用 myuser1 的身份,2步驟才是使用 root 去配置的!

上面的配置我們就完成了之前任務(wù)二的后續(xù)需求喔!這么簡(jiǎn)單呢!接下來讓我們來測(cè)試一下,如果我用 root 或者是 pro1 的身份去 /srv/projecta 添加文件或目錄時(shí),該文件或目錄是否能夠具有 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)限后面都沒有 + ,代表這個(gè) acl 屬性并沒有繼承喔!如果你想要讓 acl 在目錄底下的數(shù)據(jù)都有繼承的功能,那就得如下這樣做了!

?

          # 4. 針對(duì)默認(rèn)權(quán)限的配置方式:
# 配置規(guī)范:『 d:[ug]:使用者列表:[rwx] 』

# 讓 myuser1 在 /srv/projecta 底下一直具有 rx 的默認(rèn)權(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
# 看吧!確實(shí)有繼承喔!然后我們使用 getfacl 再次確認(rèn)看看!

[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::---
        
?

?

透過這個(gè)『針對(duì)目錄來配置的默認(rèn) ACL 權(quán)限配置值』的項(xiàng)目,我們可以讓這些屬性繼承到次目錄底下呢! 非常方便啊!那如果想要讓 ACL 的屬性全部消失又要如何處理?透過『 setfacl -b 檔名 』即可啦! 太簡(jiǎn)單了!鳥哥就不另外介紹了!請(qǐng)自行測(cè)試測(cè)試吧!

?

4. 使用者身份切換

什么?在 Linux 系統(tǒng)當(dāng)中還要作身份的變換?這是為啥?可能有底下幾個(gè)原因啦!

  • 使用一般賬號(hào):系統(tǒng)平日操作的好習(xí)慣
    事實(shí)上,為了安全的緣故,一些老人家都會(huì)建議你,盡量以一般身份使用者來操作 Linux 的日常作業(yè)!等到需要配置系統(tǒng)環(huán)境時(shí), 才變換身份成為 root 來進(jìn)行系統(tǒng)管理,相對(duì)比較安全啦!避免作錯(cuò)一些嚴(yán)重的命令,例如恐怖的『 rm -rf / 』(千萬作不得!)

  • 用較低權(quán)限啟動(dòng)系統(tǒng)服務(wù)
    相對(duì)于系統(tǒng)安全,有的時(shí)候,我們必須要以某些系統(tǒng)賬號(hào)來進(jìn)行程序的運(yùn)行。 舉例來說, Linux 主機(jī)上面的一套軟件,名稱為 apache ,我們可以額外創(chuàng)建一個(gè)名為 apache 的用戶來啟動(dòng) apache 軟件啊,如此一來,如果這個(gè)程序被攻破,至少系統(tǒng)還不至于就損毀了~

  • 軟件本身的限制
    在遠(yuǎn)古時(shí)代的 telnet 程序中,該程序默認(rèn)是不許使用 root 的身份登陸的,telnet 會(huì)判斷登陸者的 UID, 若 UID 為 0 的話,那就直接拒絕登陸了。所以,你只能使用一般使用者來登陸 Linux 服務(wù)器。 此外, ssh ( 注3 ) 也可以配置拒絕 root 登陸喔!那如果你有系統(tǒng)配置需求該如何是好啊?就變換身份啊!

由于上述考慮,所以我們都是使用一般賬號(hào)登陸系統(tǒng)的,等有需要進(jìn)行系統(tǒng)維護(hù)或軟件升級(jí)時(shí)才轉(zhuǎn)為 root 的身份來動(dòng)作。 那如何讓一般使用者轉(zhuǎn)變身份成為 root 呢?主要有兩種方式喔:

  • 以『 su - 』直接將身份變成 root 即可,但是 這個(gè)命令卻需要 root 的口令 ,也就是說,如果你要以 su 變成 root 的話,你的一般使用者就必須要有 root 的口令才行;

  • 以『 sudo 命令 』運(yùn)行 root 的命令串,由于 sudo 需要事先配置妥當(dāng),且 sudo 需要輸入用戶自己的口令, 因此多人共管同一部主機(jī)時(shí), sudo 要比 su 來的好喔!至少 root 口令不會(huì)流出去!

底下我們就來說一說 su 跟 sudo 的用法啦!


小標(biāo)題的圖示 su

su 是最簡(jiǎn)單的身份切換命令了,他可以進(jìn)行任何身份的切換唷!方法如下:

?

          [root@www ~]# su [-lm] [-c 命令] [username]
選項(xiàng)與參數(shù):
-   :?jiǎn)渭兪褂?- 如『 su - 』代表使用 login-shell 的變量文件讀取方式來登陸系統(tǒng);
      若使用者名稱沒有加上去,則代表切換為 root 的身份。
-l  :與 - 類似,但后面需要加欲切換的使用者賬號(hào)!也是 login-shell 的方式。
-m  :-m 與 -p 是一樣的,表示『使用目前的環(huán)境配置,而不讀取新使用者的配置文件』
-c  :僅進(jìn)行一次命令,所以 -c 后面可以加上命令喔!
        
?

?

上表的解釋當(dāng)中有出現(xiàn)之前 第十一章 談過的 login-shell 配置文件讀取方式,如果你忘記那是啥東西, 請(qǐng)先回去第十一章瞧瞧再回來吧!這個(gè) su 的用法當(dāng)中,有沒有加上那個(gè)減號(hào)『 - 』差很多喔! 因?yàn)樯婕?login-shell 與 non-login shell 的變量讀取方法。這里讓我們以一個(gè)小例子來說明吧!

?

          范例一:假設(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),...   <==確實(shí)是 root 的身份!
[root@www vbird1]# env | grep 'vbird1'
USER=vbird1
PATH=/usr/local/bin:/bin:/usr/bin:/home/vbird1/bin  <==這個(gè)影響最大!
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 的方式,這種方式很多原本的變量不會(huì)被改變 , 尤其是我們之前談過很多次的 PATH 這個(gè)變量,由于沒有改變成為 root 的環(huán)境 (一堆 /sbin, /usr/sbin 等目錄都沒有被包含進(jìn)來), 因此很多 root 慣用的命令就只能使用絕對(duì)路徑來運(yùn)行咯。其他的還有 MAIL 這個(gè)變量,你輸入 mail 時(shí), 收到的郵件竟然還是 vbird1 的,而不是 root 本身的郵件!是否覺得很奇怪啊!所以切換身份時(shí),請(qǐng)務(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 時(shí),記得最好使用 su - 喔!
[root@www ~]# exit   <==這樣可以離開 su 的環(huán)境!
        
?

?

上述的作法是讓使用者的身份變成 root 并開始操作系統(tǒng),如果想要離開 root 的身份則得要利用 exit 離開才行。 那我如果只是想要運(yùn)行『一個(gè)只有 root 才能進(jìn)行的命令,且運(yùn)行完畢就恢復(fù)原本的身份』呢?那就可以加上 -c 這個(gè)選項(xiàng)啰! 請(qǐng)參考底下范例三!

?

          范例三:vbird1 想要運(yùn)行『 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ù)使用舊的身份進(jìn)行系統(tǒng)操作!
        
?

?

由于 /etc/shadow 權(quán)限的關(guān)系,該文件僅有 root 可以查閱。為了查閱該文件,所以我們必須要使用 root 的身份工作。 但我只想要進(jìn)行一次該命令而已,此時(shí)就使用類似上面的語(yǔ)法吧!好,那接下來,如果我是 root 或者是其他人, 想要變更成為某些特殊賬號(hào),可以使用如下的方法來切換喔!

?

          范例四:原本是 vbird1 這個(gè)使用者,想要變換身份成為 dmtsai 時(shí)?
[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) ... <==確實(shí)有存在此人
[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ǎn)單的介紹完畢,總結(jié)一下他的用法是這樣的:

  • 若要完整的切換到新使用者的環(huán)境,必須要使用『 su - username 』或『 su -l username 』, 才會(huì)連同 PATH/USER/MAIL 等變量都轉(zhuǎn)成新用戶的環(huán)境;

  • 如果僅想要運(yùn)行一次 root 的命令,可以利用『 su - -c "命令串" 』的方式來處理;

  • 使用 root 切換成為任何使用者時(shí),并不需要輸入新用戶的口令;

雖然使用 su 很方便啦,不過缺點(diǎn)是, 當(dāng)我的主機(jī)是多人共管的環(huán)境時(shí),如果大家都要使用 su 來切換成為 root 的身份,那么不就每個(gè)人都得要知道 root 的口令 ,這樣口令太多人知道可能會(huì)流出去, 很不妥當(dāng)呢!怎辦?透過 sudo 來處理即可!


小標(biāo)題的圖示 sudo

相對(duì)于 su 需要了解新切換的用戶口令 (常常是需要 root 的口令), sudo 的運(yùn)行則僅需要自己的口令即可! 甚至可以配置不需要口令即可運(yùn)行 sudo 呢!由于 sudo 可以讓你以其他用戶的身份運(yùn)行命令 (通常是使用 root 的身份來運(yùn)行命令),因此 并非所有人都能夠運(yùn)行 sudo , 而是僅有規(guī)范到 /etc/sudoers 內(nèi)的用戶才能夠運(yùn)行 sudo 這個(gè)命令 喔!說的這么神奇,底下就來瞧瞧那 sudo 如何使用?


  • sudo 的命令用法

由于 一開始系統(tǒng)默認(rèn)僅有 root 可以運(yùn)行 sudo ,因此底下的范例我們先以 root 的身份來運(yùn)行,等到談到 visudo 時(shí),再以一般使用者來討論其他 sudo 的用法吧! sudo 的語(yǔ)法如下:

?

          [root@www ~]# sudo [-b] [-u 新使用者賬號(hào)]
選項(xiàng)與參數(shù):
-b  :將后續(xù)的命令放到背景中讓系統(tǒng)自行運(yùn)行,而不與目前的 shell 產(chǎn)生影響
-u  :后面可以接欲切換的使用者,若無此項(xiàng)則代表切換身份為 root 。

范例一:你想要以 sshd 的身份在 /tmp 底下創(chuàng)建一個(gè)名為 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
# 特別留意,這個(gè)文件的權(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 "一串命令" 來運(yùn)行的!
        
?

?

sudo 可以讓你切換身份來進(jìn)行某項(xiàng)任務(wù),例如上面的兩個(gè)范例。范例一中,我們的 root 使用 sshd 的權(quán)限去進(jìn)行某項(xiàng)任務(wù)! 要注意,因?yàn)槲覀儫o法使用『 su - sshd 』去切換系統(tǒng)賬號(hào) (因?yàn)橄到y(tǒng)賬號(hào)的 shell 是 /sbin/nologin), 這個(gè)時(shí)候 sudo 真是他 X 的好用了!立刻以 sshd 的權(quán)限在 /tmp 底下創(chuàng)建文件!查閱一下文件權(quán)限你就了解意義啦! 至于范例二則更使用多重命令串 (透過分號(hào) ; 來延續(xù)命令進(jìn)行),使用 sh -c 的方法來運(yùn)行一連串的命令, 如此真是好方便!

但是 sudo 默認(rèn)僅有 root 能使用啊!為什么呢?因?yàn)?sudo 的運(yùn)行是這樣的流程:

  1. 當(dāng)用戶運(yùn)行 sudo 時(shí),系統(tǒng)于 /etc/sudoers 文件中搜尋該使用者是否有運(yùn)行 sudo 的權(quán)限;
  2. 若使用者具有可運(yùn)行 sudo 的權(quán)限后,便讓使用者『輸入用戶自己的口令』來確認(rèn);
  3. 若口令輸入成功,便開始進(jìn)行 sudo 后續(xù)接的命令(但 root 運(yùn)行 sudo 時(shí),不需要輸入口令);
  4. 若欲切換的身份與運(yùn)行者身份相同,那也不需要輸入口令。

所以說,sudo 運(yùn)行的重點(diǎn)是:『 能否使用 sudo 必須要看 /etc/sudoers 的配置值, 而可使用 sudo 者是透過輸入用戶自己的口令來運(yùn)行后續(xù)的命令串 』喔!由于能否使用與 /etc/sudoers 有關(guān), 所以我們當(dāng)然要去編輯 sudoers 文件啦!不過,因?yàn)樵撐募膬?nèi)容是有一定的規(guī)范的,因此直接使用 vi 去編輯是不好的。 此時(shí),我們得要透過 visudo 去修改這個(gè)文件喔!


  • visudo 與 /etc/sudoers

從上面的說明我們可以知道, 除了 root 之外的其他賬號(hào),若想要使用 sudo 運(yùn)行屬于 root 的權(quán)限命令,則 root 需要先使用 visudo 去修改 /etc/sudoers ,讓該賬號(hào)能夠使用全部或部分的 root 命令功能 。為什么要使用 visudo 呢?這是因?yàn)?/etc/sudoers 是有配置語(yǔ)法的,如果配置錯(cuò)誤那會(huì)造成無法使用 sudo 命令的不良后果。因此才會(huì)使用 visudo 去修改, 并在結(jié)束離開修改畫面時(shí),系統(tǒng)會(huì)去檢驗(yàn) /etc/sudoers 的語(yǔ)法就是了。

一般來說,visudo 的配置方式有幾種簡(jiǎn)單的方法喔,底下我們以幾個(gè)簡(jiǎn)單的例子來分別說明:

  1. 單一用戶可進(jìn)行 root 所有命令,與 sudoers 文件語(yǔ)法:

    假如我們要讓 vbird1 這個(gè)賬號(hào)可以使用 root 的任何命令,那么可以簡(jiǎn)單的這樣進(jìn)行修改即可:
                  [root@www ~]# visudo
    ....(前面省略)....
    root    ALL=(ALL)       ALL  <==找到這一行,大約在 76 行左右
    vbird1  ALL=(ALL)       ALL  <==這一行是你要新增的!
    ....(前面省略)....
                
    ?有趣吧!其實(shí) visudo 只是利用 vi 將 /etc/sudoers 文件呼叫出來進(jìn)行修改而已,所以這個(gè)文件就是 /etc/sudoers 啦! 這個(gè)文件的配置其實(shí)很簡(jiǎn)單,如上面所示,如果你找到 76 行 (有 root 配置的那行) 左右,看到的數(shù)據(jù)就是:
                  使用者賬號(hào)  登陸者的來源主機(jī)名=(可切換的身份)  可下達(dá)的命令
    root                         ALL=(ALL)           ALL   <==這是默認(rèn)值
                
    ?上面這一行的四個(gè)組件意義是:

    1. 系統(tǒng)的哪個(gè)賬號(hào)可以使用 sudo 這個(gè)命令的意思,默認(rèn)為 root 這個(gè)賬號(hào);
    2. 當(dāng)這個(gè)賬號(hào)由哪部主機(jī)聯(lián)機(jī)到本 Linux 主機(jī),意思是這個(gè)賬號(hào)可能是由哪一部網(wǎng)絡(luò)主機(jī)聯(lián)機(jī)過來的, 這個(gè)配置值可以指定客戶端計(jì)算機(jī)(信任用戶的意思)。默認(rèn)值 root 可來自任何一部網(wǎng)絡(luò)主機(jī)
    3. 這個(gè)賬號(hào)可以切換成什么身份來下達(dá)后續(xù)的命令,默認(rèn) root 可以切換成任何人;
    4. 可用該身份下達(dá)什么命令? 這個(gè)命令請(qǐng)務(wù)必使用絕對(duì)路徑撰寫 。 默認(rèn) root 可以切換任何身份且進(jìn)行任何命令之意。
    那個(gè) ALL 是特殊的關(guān)鍵詞,代表任何身份、主機(jī)或命令的意思。所以,我想讓 vbird1 可以進(jìn)行任何身份的任何命令, 就如同上表特殊字體寫的那樣,其實(shí)就是復(fù)制上述默認(rèn)值那一行,再將 root 改成 vbird1 即可啊! 此時(shí)『vbird1 不論來自哪部主機(jī)登陸,他可以變換身份成為任何人,且可以進(jìn)行系統(tǒng)上面的任何命令』之意。 修改完請(qǐng)儲(chǔ)存后離開 vi,并以 vbird1 登陸系統(tǒng)后,進(jìn)行如下的測(cè)試看看:
                  [vbird1@www ~]$ tail -n 1 /etc/shadow  <==注意!身份是 vbird1
    tail: cannot open `/etc/shadow' for reading: Permission denied
    # 因?yàn)椴皇?root 嘛!所以當(dāng)然不能查詢 /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.  <==這里僅是一些說明與警示項(xiàng)目
        #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 輸入自己的口令就能夠運(yùn)行 root 的命令!所以,系統(tǒng)管理員當(dāng)然要了解 vbird1 這個(gè)用戶的『 操守 』才行!否則隨便配置一個(gè)用戶,他惡搞系統(tǒng)怎辦?另外,一個(gè)一個(gè)配置太麻煩了, 能不能使用群組的方式來配置呢?參考底下的方式吧。

  2. 利用群組以及免口令的功能處理 visudo

    我們?cè)诒菊虑懊嬖?jīng)創(chuàng)建過 pro1, pro2, pro3 ,這三個(gè)用戶能否透過群組的功能讓這三個(gè)人可以管理系統(tǒng)? 可以的,而且很簡(jiǎn)單!同樣我們使用實(shí)際案例來說明:
                  [root@www ~]# visudo  <==同樣的,請(qǐng)使用 root 先配置
    ....(前面省略)....
    %wheel     ALL=(ALL)    ALL <==大約在 84 行左右,請(qǐng)將這行的 # 拿掉!
    # 在最左邊加上 % ,代表后面接的是一個(gè)『群組』之意!改完請(qǐng)儲(chǔ)存后離開
    
    [root@www ~]# usermod -a -G wheel pro1 <==將 pro1 加入 wheel 的支持
                
    ?上面的配置值會(huì)造成『任何加入 wheel 這個(gè)群組的使用者,就能夠使用 sudo 切換任何身份來操作任何命令』的意思。 你當(dāng)然可以將 wheel 換成你自己想要的群組名。接下來,請(qǐng)分別切換身份成為 pro1 及 pro2 試看看 sudo 的運(yùn)行。
                  [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.
    # 仔細(xì)看錯(cuò)誤信息他是說這個(gè) pro2 不在 /etc/sudoers 的配置中!
                
    ?這樣理解群組了吧?如果你想要讓 pro3 也支持這個(gè) sudo 的話,不需要重新使用 visudo ,只要利用 usermod 去修改 pro3 的群組支持,讓 wheel 也支持 pro3 的話,那他就能夠進(jìn)行 sudo 啰! 簡(jiǎn)單吧!不過,既然我們都信任這些 sudo 的用戶了,能否提供『不需要口令即可使用 sudo 』呢? 就透過如下的方式:
                  [root@www ~]# visudo  <==同樣的,請(qǐng)使用 root 先配置
    ....(前面省略)....
    %wheel     ALL=(ALL)   NOPASSWD: ALL <==大約在 87 行左右,請(qǐng)將 # 拿掉!
    # 在最左邊加上 % ,代表后面接的是一個(gè)『群組』之意!改完請(qǐng)儲(chǔ)存后離開
                
    ?重點(diǎn)是那個(gè) NOPASSWD 啦!該關(guān)鍵詞是免除口令輸入的意思喔!

  3. 有限制的命令操作:

    上面兩點(diǎn)都會(huì)讓使用者能夠利用 root 的身份進(jìn)行任何事情!這樣總是不太好~如果我想要讓用戶僅能夠進(jìn)行部分系統(tǒng)任務(wù), 比方說,系統(tǒng)上面的 myuser1 僅能夠幫 root 修改其他用戶的口令時(shí),亦即『當(dāng)使用者僅能使用 passwd 這個(gè)命令幫忙 root 修改其他用戶的口令』時(shí),你該如何撰寫呢?可以這樣做:
                  [root@www ~]# visudo  <==注意是 root 身份
    myuser1	ALL=(root)  /usr/bin/passwd  <==最后命令務(wù)必用絕對(duì)路徑
                
    ?上面的配置值指的是『myuser1 可以切換成為 root 使用 passwd 這個(gè)命令』的意思。其中要注意的是: 命令字段必須要填寫絕對(duì)路徑 才行!否則 visudo 會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤的狀況發(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.  <==見鬼!怎么會(huì)去改 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
                
    ?由于屏幕一行寫不完,我將這行寫成兩行,所以上面第一行最后加上反斜杠啰。加上驚嘆號(hào)『 ! 』代表『不可運(yùn)行』的意思。 因此上面這一行會(huì)變成:可以運(yùn)行『 passwd 任意字符』,但是『 passwd 』與『 passwd root 』這兩個(gè)命令例外! 如此一來 myuser1 就無法改變 root 的口令了!這樣這位使用者可以具有 root 的能力幫助你修改其他用戶的口令, 而且也不能隨意改變 root 的口令!很有用處的!

  4. 透過別名建置 visudo:

    如上述第三點(diǎn),如果我有 15 個(gè)用戶需要加入剛剛的管理員行列,那么我是否要將上述那長(zhǎng)長(zhǎng)的配置寫入 15 行啊? 而且如果想要修改命令或者是新增命令時(shí),那我每行都需要重新配置,很麻煩ㄟ!有沒有更簡(jiǎn)單的方式? 是有的!透過別名即可!我們 visudo 的別名可以是『命令別名、帳戶別名、主機(jī)別名』等。不過這里我們僅介紹帳戶別名, 其他的配置值有興趣的話,可以自行玩玩!

    假設(shè)我的 pro1, pro2, pro3 與 myuser1, myuser2 要加入上述的口令管理員的 sudo 列表中, 那我可以創(chuàng)立一個(gè)帳戶別名稱為 ADMPW 的名稱,然后將這個(gè)名稱處理一下即可。處理的方式如下:
                  [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)建出一個(gè)新賬號(hào), 這個(gè)賬號(hào)名稱一定要使用大寫字符來處理,包括 Cmnd_Alias(命令別名)、Host_Alias(來源主機(jī)名別名) 都需要使用大寫字符的 !這個(gè) ADMPW 代表后面接的那些實(shí)際賬號(hào)。 而該賬號(hào)能夠進(jìn)行的命令就如同 ADMPWCOM 后面所指定的那樣!上表最后一行則寫入這兩個(gè)別名 (賬號(hào)與命令別名), 未來要修改時(shí),我只要修改 User_Alias 以及 Cmnd_Alias 這兩行即可!配置方面會(huì)比較簡(jiǎn)單有彈性喔!

  5. sudo 的時(shí)間間隔問題:

    或許您已經(jīng)發(fā)現(xiàn)了,那就是,如果我使用同一個(gè)賬號(hào)在短時(shí)間內(nèi)重復(fù)操作 sudo 來運(yùn)行命令的話, 在第二次運(yùn)行 sudo 時(shí),并不需要輸入自己的口令!sudo 還是會(huì)正確的運(yùn)行喔!為什么呢? 第一次運(yùn)行 sudo 需要輸入口令,是擔(dān)心由于用戶暫時(shí)離開座位,但有人跑來你的座位使用你的賬號(hào)操作系統(tǒng)之故。 所以需要你輸入一次口令重新確認(rèn)一次身份。

    兩次運(yùn)行 sudo 的間隔在五分鐘內(nèi),那么再次運(yùn)行 sudo 時(shí)就不需要再次輸入口令了, 這是因?yàn)橄到y(tǒng)相信你在五分鐘內(nèi)不會(huì)離開你的作業(yè),所以運(yùn)行 sudo 的是同一個(gè)人!呼呼!真是很人性化的設(shè)計(jì)啊~ ^_^。不過 如果兩次 sudo 操作的間隔超過 5 分鐘,那就得要重新輸入一次你的口令了 ( 注4 )

    另外要注意的是,因?yàn)槭褂靡话阗~號(hào)時(shí),理論上不會(huì)使用到 /sbin, /usr/sbin 等目錄內(nèi)的命令,所以 $PATH 變量不會(huì)含有這些目錄,因此很多管理命令需要使用絕對(duì)路徑來下達(dá)比較妥當(dāng)喔!

  6. sudo 搭配 su 的使用方式:

    很多時(shí)候我們需要大量運(yùn)行很多 root 的工作,所以一直使用 sudo 覺得很煩ㄟ!那有沒有辦法使用 sudo 搭配 su , 一口氣將身份轉(zhuǎn)為 root ,而且還用用戶自己的口令來變成 root 呢?是有的!而且方法簡(jiǎn)單的會(huì)讓你想笑! 我們創(chuàng)建一個(gè) ADMINS 帳戶別名,然后這樣做:
                  [root@www ~]# visudo
    User_Alias  ADMINS = pro1, pro2, pro3, myuser1
    ADMINS ALL=(root)  /bin/su -
                
    ?接下來,上述的 pro1, pro2, pro3, myuser1 這四個(gè)人,只要輸入『 sudo su - 』并且輸入『自己的口令』后, 立刻變成 root 的身份!不但 root 口令不會(huì)外流,用戶的管理也變的非常方便! 這也是實(shí)務(wù)上面多人共管一部主機(jī)時(shí)常常使用的技巧呢!這樣管理確實(shí)方便,不過還是要強(qiáng)調(diào)一下大前提, 那就是『 這些你加入的使用者,全部都是你能夠信任的用戶 』!

來源: http://vbird.dic.ksu.edu.tw/linux_basic/0410accountmanager_1.php

?

參考:Ubuntu用戶及用戶組管理命令

Linux 賬號(hào)管理與 ACL 權(quán)限配置


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 香港三级午夜理伦三级 | 久久精品免视看国产成人2021 | 天堂最新在线资源 | 欧美日韩视频 | 欧洲视频在线观看 | 午夜影院小视频 | 欧美日韩一二三区 | 看国产毛片 | 国产99精品 | 丝袜美腿一区二区三区 | 久久成人免费网 | 欧美在线播放一区 | 成人免费体验区福利云点播 | a毛片成人免费全部播放 | 国产中文字幕一区 | 色五月视频 | 欧美精品一区二区精品久久 | 一级片 在线播放 | 亚洲午夜久久久久久尤物 | 天天草天天爱 | 国产亚洲精品久久久久久线投注 | 国产sm主人调教女m视频 | 免费观看一区二区三区毛片 | 超碰综合 | 国产精品999| 天天激情 | 一级做a爰片性色毛片2021 | 欧美日韩视频 | 亚洲成人国产综合 | 成人日韩在线观看 | 欧美性高清视频免费看www | 国产欧美一区二区三区精品 | 免费高清成人啪啪网站 | 亚洲h视频 | 大片毛片| 久久精品国产99国产 | 成人精品鲁一区一区二区 | 手机在线观看亚洲国产精品 | 欧美激情精品久久久久久变态 | 国产成人免费 | 日本免费精品视频 |