Linux 基礎學習篇 - Mandrake 9

第十三章、帳號與身份管理 - for Mandrake 9

鳥哥的第一本書籍的主要內容,內容稍微與書籍不太一樣了!

最近更新時間: 2003/02/10

鳥哥的第一本書大約是在 2002 年的年底左右出版的,內容幾乎都是 Linux 基礎學習,一點也沒有談到伺服器的部份!這也是後來的雛型! 不過內容錯誤的地方很多,導致在 2003 年的年底推出了『基礎學習篇增訂版』的內容,大致上就是處理掉一些比較有嚴重錯誤的部份。 不過,因為 Linux 的版本變化非常快速,因此,寫完了這些文件之後,鳥哥還是持續在網站上更新文件內容,導致原本書籍內容的資料與網站資料差異太大! 這個問題直到鳥哥在 2008 年左右才發現!糟糕了!舊版的文件資料已經遺失~覺得相當扼腕~

因此,在底下的文件內容與當初的書籍內容雖然大同小異,不過章節的編排卻是有所不同!再花時間去一個一個處理,似乎也不太符合成本效益! 鳥哥僅是想要將自己以前的文件記錄下來而已,同時將過時的 big5 編碼改回 utf8 編碼,再加上可以支援 RWD 的樣式而已啦! 內容已經不多做編排~因此,如果內容文件你看不懂,那也是應該的! ^_^

建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。最新文章請前往鳥站首頁查閱囉!

帳號管理

管理員的工作中,相當重要的一環就是『管理帳號』啦!因為整個系統都是你在管理的,並且所有的一般用戶的申請,都必須要透過你的協助才行!所以你就必須要瞭解一下如何管理好一個網站的帳號管理啦!在管理 Linux 主機的帳號時,我們必須先來瞭解一下 Linux 到底是如何辨別每一個使用者的!
  • 使用者的 ID 與群組的 ID :

  • 其實 Linux 並不會直接認識你的『帳號名稱』,他認識的其實是你的『帳號 ID 』才是!如果你曾經以 tarball 安裝過軟體的話,那麼應該不難發現,在解壓縮之後的檔案,嘿?檔案擁有者竟然是『不明的數字』?奇怪吧?這沒什麼好奇怪的,因為 Linux 說實在話,他真的只認識代表你身份的號碼而已!而對應的號碼與帳號,則是記錄在 /etc/passwd 當中!
  • 怎樣登入 Linux 主機呀?

  • 好了,那麼我們再來談一談,到底我們是怎樣登入 Linux 主機的呢?其實也不難啦!當我們在主機前面或者是以 telnet 或者 ssh 登入主機時,系統會出現一個 login 的畫面讓你輸入帳號,這個時候當你輸入帳號與密碼之後, Linux 會:
     
    1. 先找尋 /etc/passwd 裡面是否有這個帳號?如果沒有則跳出,如果有的話則將該帳號對應的 UID ( User ID )與 GID ( Group ID )讀出來,另外,該帳號的家目錄與 shell 設定也一併讀出;
    2. 再來則是核對密碼表啦!這時 Linux 會進入 /etc/shadow 裡面找出對應的帳號與 UID,然後核對一下你剛剛輸入的密碼與裡頭的密碼是否相符?
    3. 如果一切都 OK 的話,就進入 Shell 控管的階段囉!
大致上的情況就像這樣,所以呢,當你要登入你的 Linux 主機的時候,那個 /etc/passwd 與 /etc/shadow 就必須要讓系統讀取啦,(這也是很多攻擊者會將特殊帳號寫到 /etc/passwd 裡頭去的緣故!)所以呢,如果你要備份 Linux 的系統的帳號的話,那麼這兩個檔案就一定需要備份才行呦!
  • 認識 UID、GID、SUID與SGID:

  • 還記得我們在『檔案系統與檔案屬性』那一篇文章的時候有提到每一個檔案都具有『擁有人與擁有群組』的屬性嗎?那麼檔案如何判別他的擁有者與群組呢?其實就是利用 UID 與 GID 啦!每一個檔案都會有所謂的擁有者 ID 與擁有群組 ID ,亦即是 UID 與 GID ,然後系統會依據 /etc/passwd 的內容,去將該檔案的擁有者與群組名稱,使用帳號的形式來秀出來!我們可以作個小實驗,你可以以 root 的身份 vi /etc/passwd ,然後將你的一般身份的使用者的 ID 隨便改一個號碼,然後再到你的一般身份的目錄下看看原先該帳號擁有的檔案,你會發現該檔案的擁有人變成了『數字了』呵呵!這樣可以理解了嗎?
     
    [root @test /root]# vi /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
    test:x:500:500:test user:/home/test:/bin/bash  <==將 500 改成 510 
    [root @test /root]# cd /home/test
    [root @test test]# ll 
    -rw-rw-r--    1 500      test        12542 Apr 12 11:22 test
    看上面,擁有這變成了數字了~

    瞭解了之後,請趕快回到 /etc/passwd 裡面,將數字改回來喔!

  • 認識 /etc/passwd 檔案與 /etc/shadow 檔案:

  • 由上面的說明您大概已經知道,嘿嘿!帳號管理最重要的兩個檔案就是『 /etc/passwd 與 /etc/shadow 』了!這兩個檔案可以說是 Linux 裡頭最重要的檔案之一了!如果沒有這兩個檔案的話,呵呵!您可是無法登入 Linux 的呦!
     
    • passwd 的構造:

    • 這個檔案的構造是這樣的:每一行都代表一個帳號,有幾行就代表有幾個帳號在你的系統中!不過需要特別留意的是,裡頭很多帳號本來就是系統中必須要的(例如 bin, daemon, adm, nobody 等等),請不要隨意的殺掉他??;
       
      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

      上面是 Mandrake 9.0 預設的幾個帳號,這些帳號是系統在使用的呦!我們先來看一下 root 這個系統管理員這一行好了,你可以明顯的看出來,每一行使用『:』分隔開,共有七個咚咚,分別是
       

      1. 帳號名稱:就是帳號名稱啦!對應 UID 用的!例如 root 就是預設的系統管理員的帳號名稱;

      2.  
      3. 密碼:早期的 Unix 系統的密碼是放在這個檔案中的,不過由於這樣一來很容易造成資料的被竊取,所以後來就將資料給他改放到 /etc/shadow 中了,這一部份等一下再說,而這裡你會看到一個 x ,呵呵!別擔心密碼已經被移動到 shadow 這個加密過後的檔案囉;

      4.  
      5. UID:這個就是使用者識別碼(ID)囉!通常 Linux 對於 UID 有幾個限制需要說給您瞭解一下:
        • 0 系統管理員,所以當你要作另一個系統管理員帳號時,你可以將該帳號的 UID 改成 0 即可;
        • 1~500 保留給系統使用的ID,其實 1~65534 之間的帳號並沒有不同,也就是除了 0 之外,其他的 UID 並沒有不一樣,預設 500 以下給系統作為保留帳號只是一個習慣。這樣的好處是,以 named 為例,這個程式的預設所有人 named 的帳號 UID 是 25 ,當有其他的帳號同樣是 25 時,很可能會造成系統的一些小問題!為了杜絕這樣的問題,建議保留 500 以前的 UID 給系統吧!
        • 500~65535 給一般使用者用的!
        上面這樣說明可以瞭解了嗎?是的, UID 為 0 的時候,就是 root 呦!所以請特別留意一下你的 /etc/passwd 檔案!
         
      6. GID:這個與 /etc/group 有關!其實 /etc/group 的觀念與 /etc/passwd 差不多,只是他是用來規範 group 的而已!

      7.  
      8. 說明:這個欄位基本上並沒有什麼用途,只是用來解釋這個帳號的意義而已! 不過,如果您提供使用 finger 的功能時,這個欄位可以提供很多的訊息呢!底下的 chfn 可以解釋一下囉!

      9.  
      10. 家目錄:這是使用者的家目錄,以上面為例, root 的家目錄在 /root ,所以當 root 登入之後,馬上在的所在就是 /root 裡頭啦!呵呵!如果你有個帳號的使用空間特別的大,你想要將該帳號的家目錄移動到其他的硬碟去,沒有錯!可以在這裡進行修改呦!預設的使用者家目錄在 /home/yourIDname

      11.  
      12. Shell :所謂的 shell 是用來溝通人類下達的指令與硬體之間真正動作的界面!我們通常使用 /bin/bash 這個 shell 來進行指令的下達!關於 shell 的用法我們會在後面再提及的!這裡比較需要注意的是,有一個 shell 可以用來替代成讓帳號無法登入的指令!那就是 /bin/false 這個東西!這也可以用來製作純 pop 郵件帳號者的資料呢!
    • shadow 的構造:

    • 由於 /etc/passwd 並不安全,所以後來發展出將密碼移動到 /etc/shadow 這個檔案中分隔開來的技術!並且加入了很多的限制參數在 /etc/shadow 裡頭!我們來瞭解一下這個檔案的構造吧!
       
      root:$K.K2.hqu.QfV.dkjjteojiasdlkjeo:11661:0:99999:7:::
      bin:*:11661:0:99999:7:::
      daemon:*:11661:0:99999:7:::
      adm:*:11661:0:99999:7:::

      這是 shadow 的形式,也同樣的以『:』作為分隔的符號。數一數,共可以發現有九個欄位,分別給他說明如下:
       

      1. 帳號名稱:這個跟 passwd 需要對應!也就是跟 passwd 相同的意思啦!

      2.  
      3. 密碼:這個才是真正的密碼,而且是經過編碼過的密碼啦!你只會看到有一些特殊符號的字母就是了!需要特別留意的是,雖然這些加密過的密碼很難被解出來,但是『很難』不等於『不會』,所以,這個檔案的預設屬性是『-rw-------』亦即只有 root 才可以讀寫就是了!你得隨時注意,不要不小心更動了這個檔案的屬性呢!另外,如果是在密碼欄的第一個字元為『 * 』表示這個帳號並不會被用來登入的意思。所以萬一哪一天你的某個使用者不乖時,可以先在這個檔案中,將他的密碼多加一個 * !嘿嘿!他就無法使用該帳號囉!直到他變乖了,再給他啟用啊!

      4.  
        注意事項:密碼忘記或者被更動了?

        有的時候會發生這樣的情況,就是說,你的 root 密碼忘記了!要怎麼辦?重新安裝嗎?另外,有的時候是被入侵了, root 的密碼被更動過,該如何是好?

        這個時候就必須要使用到 /etc/shadow 這個資料了!我們剛剛知道密碼是存在這個檔案中的,所以只要你能夠以軟碟開機,進入『單人維護系統』,那麼就可以不用輸入密碼來以 root 的身份登入(通常就是在 boot: 時輸入 linux single 就是了!)然後進入 /etc/shadow 這個檔案中,將 root 的密碼這一欄全部清空!然後再登入 Linux 一次,這個時候 root 將不需要密碼(有的時候需要輸入空白字元)就可以登入了!這個時候請趕快以 passwd 設定 root 密碼即可!

         
      5. 上次更動密碼的日期:這個欄位記錄了『更動密碼的那一天』的日期,不過,很奇怪呀!在我的例子中怎麼會是 11979 呢?呵呵,這個是因為計算 Linux 日期的時間是以 1970 年 1 月 1 日作為 1 ,而 1971 年 1 月 1 日則為 366 啦!所以這個日期是累加的呢!得注意一下這個資料呦!那麼最近的 2002 年 1 月 1 日就是 11689 啦,瞭解了嗎?

      6.  
      7. 密碼不可被更動的天數:第四個欄位記錄了這個帳號的密碼需要經過幾天才可以被變更!如果是 0 的話,表示密碼隨時可以更動的意思。這的限制是為了怕密碼被某些人一改再改而設計的!如果設定為 20 天的話,那麼當你設定了密碼之後, 20 天之內都無法改變這個密碼呦!

      8.  
      9. 密碼需要重新變更的天數:由於害怕密碼被某些『有心人士』竊取而危害到整個系統的安全,所以有了這個欄位的設計。你必須要在這個時間之內重新設定你的密碼,否則這個帳號將會暫時失效。而如果像上面的 99999 的話,那就表示,呵呵,密碼不需要重新輸入啦!不過,如果是為了安全性,最好可以設定一段時間之後,嚴格要求使用者變更密碼呢!

      10.  
      11. 密碼需要變更期限前的警告期限:當帳號的密碼失效期限快要到的時候,系統會依據這個欄位的設定,發出『警告』言論給這個帳號,提醒他『再過 n 天你的密碼就要失效了,請盡快重新設定你的密碼呦!』,如上面的例子,則是密碼到期之前的 7 天之內,系統會警告該用戶。

      12.  
      13. 帳號失效期限:如果用戶過了警告期限沒有重新輸入密碼,使得密碼失效了,而該用戶在這個欄位限定的時間內又沒有跟 root 反應,讓帳號重新啟用,那麼這個帳號將暫時的失效!

      14.  
      15. 帳號取消日期:這個日期跟第三個欄位一樣,都是使用 1970 年以來的日期設定。這個欄位表示:這個帳號在此欄位規定的日期之後,將無法再使用。這個欄位會被使用通常應該是在『收費服務』的系統中,你可以規定一個日期讓該帳號不能再使用啦!

      16.  
      17. 保留:最後一個欄位是保留的,看以後有沒有新功能加入。
       
      這個 /etc/shadow 是很重要的資料,千萬不能遺失也不能被 root 以外的人看到或修改!尤其是密碼欄,因為很早之前就已經發明了『暴力計算』密碼的程式,如果你的密碼被看過了,則別人可以利用該程式去演算出你的真實密碼,呵呵,到時候可就傷腦筋了!切記切記!那麼什麼是 SUID 與 SGID 呢?前面有說過了!跟檔案屬性比較有相關, 點這裡  去看看吧!
  • 認識 /etc/group 與 /etc/gshadow 檔案:

  • 認識帳號與密碼是使用 /etc/passwd 與 /etc/shadow ,那麼認識 group 就是 /etc/group 與 /etc/gshadow 囉!OK!我們也來看看這兩個檔案的構造吧!
     
    • 認識 /etc/group

    • 這個檔案可以讓你直接將帳號所要支援的群組加進來!例如你有一個帳號名稱為 myaccount ,你想要讓這個帳號可以支援 root 這個群組,則你可以直接在 /etc/group 裡面加入呢!很方便,不需要動用的指令呦!
       
      root:x:0:root
      bin:x:1:root,bin,daemon
      daemon:x:2:root,bin,daemon
      sys:x:3:root,bin,adm
      adm:x:4:root,adm,daemon

      這個內容也說明如下:
       

      1. 群組名稱:就是群組名稱啦!
      2. 群組密碼:通常不需要設定,因為我們很少使用到群組登入!不過,同樣的,密碼也是被紀錄在 /etc/gshadow 當中囉!
      3. 群組 ID:就是所謂的 GID 啦!
      4. 支援的帳號名稱:這個群組裡面的所有的帳號,如上面所言,如果你想要讓 mysccount 也屬於 root 這個群組的話,那麼就將上面的第一行最後面加上 ,myaccount (不要有空格)使成為『root:x:0:root,myaccount』就可以啦。
    • /etc/gshadow 的構造:

    •  
      root:::root
      bin:::root,bin,daemon
      daemon:::root,bin,daemon
      sys:::root,bin,adm
      adm:::root,adm,daemon

      一般來說,group password 是用來讓那些不在 group 中的成員,臨時加入 group 用的,有興趣的話可以使用 man newgrp 瞭解一下他的用法!不過,因為牽涉到 "密碼",不好管理,因此很少用。真想讓對方加入,不如將對方加入該群組,用密碼反而不方便。

  • 增加使用者的一般步驟:

  • 新增使用者的時候,如果該使用者所屬的群組不存在,則得(1)先新增群組;然後(2)再新增使用者帳號。當然,如果要刪除群組時,則必須要反過來,先刪除使用者才能刪除群組!這點請大家留意囉!
認識完了一些需要注意的東西之後,我們來研究一下如何以『指令』增加群組、使用者與變更密碼吧!在接下來的例子中,『您可以依照底下的案例直接下達指令去試看看!』實作是真的很重要的啦!

  • groupadd

  • 語法
    [root @test /root ]# groupadd [-g GID] groupname
    參數說明:
    -g GID :自行設定 GID 的大小
    範例:
    [root @test /root]# groupadd -g 55 testing<==設定一個群組,GID為  55 
    說明
    這個指令會增加群組呢!而作用到的檔案只有『/etc/group 與 /etc/gshadow』這兩個檔案,說實在的,你也可以直接修改這兩個檔案就好了,根本不需要使用到這個指令的!使用 vi 修改上面兩個檔案還比較簡單呢!另外,如果你要新增的使用者所要的群組並不存在於系統中,那麼您在增加使用者帳號之前,就必須要先新增群組囉!

  • groupdel

  • 語法
    [root @test /root ]# groupdel groupname
    參數說明:
    範例:
    [root @test /root]# groupdel testing
    說明
    這很簡單的,就是將 group ID 給他殺掉去!不過,有一點必須要特別留意,就是『在殺掉群組之前,請先將該群組的 primary 使用者刪除!』才好!那什麼是 Primary 的使用者呢?說穿了也很簡單啦!就是 /etc/passwd 裡面,那個 GID 設定為這個群組的 GID 的那個使用者就對啦!

  • useradd

  • 語法
    [root @test /root ]# useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] username
    參數說明:
    -u   :直接給予一個 UID
    -g   :直接給予一個 GID (此 GID 必須已經存在於 /etc/group 當中)
    -d   :直接將他的家目錄指向已經存在的目錄(系統不會再建立)
    -M   :不建立家目錄
    -s   :定義其使用的 shell
    範例:
    [root @test /root]# useradd testing    <==直接以預設的資料建立一個名為 testing 的帳號
    [root @test /root]# useradd -u 720 -g 100 -M -s /bin/bash testing   <==以自己的設定建立帳號
    說明
    這個指令能夠變更的檔案可多了!包括了底下的各個檔案:
     
    • /etc/passwd
    • /etc/shadow
    • /etc/group
    • /etc/gshadow
    • /etc/skel
    • /etc/default/useradd
    • /etc/login.defs
    建立預設的帳號:
    建立帳號的時候,如果沒有特殊的設定,通常我們只使用『 useradd username 』就可以建立一個名為 username 的帳號了!不過你知道預設的帳號的基本設定嗎?嘿嘿嘿嘿!基本設定就在 /etc/login.defs/etc/default/useradd 這兩個檔案中!在 login.defs 裡頭有點像底下這樣:
    MAIL_DIR        /var/spool/mail  <==郵件預設目錄擺放處
    PASS_MAX_DAYS   99999           <==密碼需要變更的時間
    PASS_MIN_DAYS   0            <==密碼多久需要變更
    PASS_MIN_LEN    5            <==密碼的最小長度(這個可以改大一些吧!)
    PASS_WARN_AGE   7            <==密碼快要失效之前幾天發警告訊息?
    UID_MIN                   500    <==預設帳號最小起算的 UID 數目(最小為 500
    UID_MAX                 60000    <==最大的 UID 限制
    GID_MIN                   500    <==GID 限制
    GID_MAX                 60000    <==GID 限制
    CREATE_HOME     yes            <==是否建立家目錄,預設是要建立家目錄(若為 mail server 可以取消此項目)
    幾乎可以設定的都在這裡設定了!所以需要瞭解一下這個檔案!另外,如果你是專門開啟 mail server 的,那麼由於使用者帳號不需要登入主機,所以也就不需要給予家目錄,這個時候最後一項 GREATE_HOME 或者可以設定為 no !此外,當你以預設的資料建立帳號時,該帳號的 UID 將會取目前在 /etc/passwd 當中『最大的(其實是小於 60000)』那一個 UID + 1 即是預設帳號的 UID 囉!
    而至於 useradd 內容則為:
    GROUP=100      <==預設的使用者群組為 100 ,查看一下 /etc/group 時,這個群組名稱為 users 呢!
    HOME=/home     <==預設使用者的家目錄建立的目錄
    INACTIVE=-1    <==是否不啟動,設定為 -1 自然就是啟動啦!
    EXPIRE=        <==是否需要設定『死亡』時間?如果你希望該用戶在期限到之後就不許登入,此項可以設定天數。
    SHELL=/bin/bash <==預設的 Shell 為何?
    SKEL=/etc/skel <==使用者家目錄的內容!
    在這個項目中,最需要瞭解的就是 SKEL 啦!當你建立一個名為 testing 的帳號時,預設的家目錄會是『 /home/testing 』這個目錄,而這個目錄的內容就是由 /etc/skel 所 copy 過去的!所以『當你想要讓使用者的預設家目錄內容更動時,可以直接將要更動的資料寫在 /etc/skel 當中!
      以自己的條件建立帳號:
      如果要以自己的條件建立帳號的時候,一般我都是喜歡手動的增加啦!不然就是先以上面的那一個例子增加一個帳號之後,在去手動修改 /etc/passwd 等等的檔案!

  • userdel

  • 語法
    [root @test /root ]# userdel [-r] username
    參數說明:
    -r  :將該帳號的[home directory]與[/var/spool/mail/username]一併刪除!
    範例:
    [root @test /root]# userdel testing     <==只有砍掉 /etc/passwd 與 /etc/shadow 的該帳號內容;
    [root @test /root]# userdel -r testing<==連該帳號的 /home/testing 與 /var/spool/mail/testing 都砍掉!
    說明
    這個指令下達的時候要小心了!通常我們要移除一個帳號的時候,你可以手動的將 /etc/passwd 與 /etc/shadow 裡頭的該帳號取消即可!一般而言,如果該帳號只是『暫時不啟用』的話,那麼將 /etc/shadow 裡頭最後倒數一個欄位設定為 0 就可以讓該帳號無法使用,但是所有跟該帳號相關的資料都會留下來!使用 userdel 的時機通常是『你真的確定不要讓該用戶在主機上面使用任何資料了!』

  • chsh

  • 語法
    [root @test /root ]# chsh [-l] [-s shellname]
    參數說明:
    -l   :列出目前這部機器上面的能用的 shell 名稱
    -s   :改變目前的 shell 成為 shellname
    範例:
    [test @test /root]# chsh -l          <==列出本機上所有能用的 shell 名稱
    /bin/sh
    /bin/bash
    /bin/ash
    /bin/bsh
    /bin/csh
    [test @test /root]# chsh -s /bin/csh  <==test 這個用戶自行改變自己的預設 shell 
    說明
    這是用來改變使用者自己的 shell 的指令!要注意呦,由於這個檔案能夠改變 /etc/passwd 的內容,所以他的預設屬性就有 SUID 的屬性了!通常 VBird 也都不會使用這個指令,因為直接改 /etc/passwd 就可以啦!

  • chfn

  • 語法
    [root @test /root ]# chfn
    參數說明:
    範例:
    [test@test test]$ chfn
    Changing finger information for test.
    Password:                    <==這裡輸入新的密碼
    Name [Testing]: Testing      <==這裡輸入你要顯示的『暱稱』
    Office []: 
    Office Phone []:
    Home Phone []:
    Finger information changed.
    說明
    這個指令說實在的,除非是你的主機有很多的用戶,否則倒真是用不著這個程式!這就有點像是 bbs 裡頭更改你『個人屬性』的那一個資料啦!這個程式主要都是搭配 finger 這支程式在運作的!不過,由於 finger 這支程式不是很安全,所以預設是沒有安裝他的!如果您想要玩一下 finger 的話,那麼請先參考 RPM 套件安裝內容後,在安裝 finger 的 RPM 檔案,然後再來玩吧!底下這裡鳥哥還是先簡單的介紹一下就好了!
    使用 chfn 這個指令之後,程式會要求您輸入許多的資訊,包含了:
    密碼
    暱稱
    辦公室號碼
    辦公室電話
    家裡電話
    這幾個咚咚給他設定好之後,你的 /etc/passwd 會變成怎樣呢?我們以管線命令,配合正規表示法,捉出 test 這個人的資訊如下:
    [root @test root]# more /etc/passwd | grep test
    test:x:501:501:Testing user,06-123-1234,06-123-1234,06-123-1234:/home/test:/bin/bash
    嘿嘿!多出了一些逗點分隔在第三欄囉!那個就是 chfn 改的資訊囉!只有改這個地方就是了!所以你也可以自行修改呢!那麼再來你可以使用 finger test 來看一下 test 這個人的基本資訊!

  • userconf

  • 不論怎麼說,以 useradd 與 groupadd 這兩個指令來增加群組與帳號總是不太方便!那麼有沒有比較類圖形界面的方式可以來新增使用者呢?哈哈!當然有,在 Mandrake 與 Red Hat 當中那就是使用 userconf 就可以啦!假設您已經安裝了 Linuxconf 這個套件,所以自然也就含有 userconf 這個咚咚!因此,直接以 root 的身份在指令列模式輸入 userconf 就會出現下圖:
     
     
    在這個畫面中,目前我們所要使用到的功能只有:
    • User accounts
    • Group definitions
    • Change root password
    當然,其實我們關心的只有 User accounts 這一項囉!在操作上,使用『上下鍵』移動反白的線條,而使用『Tab』鍵來使游標移動到底下的 Quit 及 Help 按鈕!底下我們提一提在帳號管理方面,最常使用的兩個功能,分別是『已存在帳號的修正與管理』,及『新增帳號!』
    • 察看已存在帳號的內容、修正與管理:

    • 在上圖當中,以上下按鍵移動游標到 User accounts 部分上去,然後按下 Enter 吧!會顯示如下的畫面:
       

       
      在上面這個畫面當中,我們可以發現到每一個有用的帳號都在上頭,而他的主要資訊也都列示在上頭了!當然啦,這些資訊『全部都在 /etc/passwd 裡面!』沒錯!所以你只要知道 passwd 這個檔案裡面的代表意義,這裡就很容易瞭解他的意思啦!好了,假設我要修改 test 這個已經存在的使用者資訊,那麼就直接將游標移動到 test 上面,然後按下 Enter 鍵,會出現如下的圖示:
       

       
      您會發現到你的游標是在右邊的 Base info 裡面,你可以移動游標,並且去修改他呢!例如你要修改 group 的話,就直接移動到 users 上面去,修修改改即可!同樣的, HOME( 家目錄 )與 shell ( 就是 Command interpreter 那一欄 )的修改都是直接移動游標再來修訂即可!這個應該不難啦!不過,如果要修改密碼呢?那麼你就必需使用 <Tab> 按鍵,移動到 Passwd 那個按鈕上面,按下他之後,就可以設定密碼了!
       

       
      修改完畢之後,會回到帳號圖示的畫面,這個時候您可以繼續的觀察其他的帳號呢!
    • 新增帳號:

    • 再來則是新增帳號的部分!在帳號圖示畫面中按兩下『Tab』 鍵將游標移動至 Add 這一項,按 Enter,會出現:
       

       
      在這個畫面中,你所需要輸入的其實只有 Login name 就可以了,其他的東西系統會自動幫你設定(有 (opt) 的都是系統會自行依照 /etc/login.defs 與 /etc/defaults/useradd 的內容自行加以設定的!)。不過,如果你需要將使用者分門別類的話,最好還是設定一下比較好!咦!什麼叫做分門別類?以我為例,我們單位的主機有分對自己研究室的成員還有外面的朋友開放帳號服務,由於對外的帳號僅提供 mail 的服務,而自己的研究室成員則包含了所有主機上面可以進行的工作!為了防止未來不當的管理,對於兩邊的人員的身份管制( 最簡單的方法就是以 UID 或 Group 來分辨 )就顯的重要的多了!好了!那麼什麼東西在 userconf 這支程式裡面需要特別瞭解一下的呢?
       
      1. Login name:輸入要新增的使用者的帳號(就是 ID 啦),盡量不要使用大寫字元啦!;
      2. Full name :這是這個帳號的使用者全名,這個地方是可有可無的,不會影響!
      3. group :用來指定這一個 ID 的所屬群組,通常鳥哥都會將在我機器上的使用者分成幾各類別,而分別給予不同的群組,好方便管控!
      4. Supplementary groups:除了主要的群組之外,Linux 還提供你其他的支援群組!不過通常不用設定就可以了。如果設定的話,修改的檔案其實就是 /etc/group 囉;
      5. Home directory(opt) :這是用來設定這個帳號使用者的家目錄。通常如果不設定的話,預設的使用者家目錄都在 /home/userID ,但是當你的硬碟容量不夠大的時候,或者想將某人移動到某一個目錄的話,就可以直接在這邊改一改囉!
      6. Command interpreter(opt) :這是使用者預設的 Shell ,通常在 Linux 下,我們都使用 BASH ,所以不用改啦;
      7. User ID(opt) :注意喔,這個 ID 可不是前面的 login 的 ID ,這個 ID 是前面說的 Uid 編號,你可以自己設定一個大於 500 且不與其他帳號重複的 ID,也可以交由系統自動設定;
       
      OK!設定完成之後,按下 『Tab』 鍵,選擇 Accept 按 Enter,這時會出現要你輸入密碼的畫面,就如同上圖 13-1-4 。請輸入這個帳號所想要的密碼。請注意,通常密碼的限制是:
       
      • 密碼不能與帳號相同;
      • 密碼盡量不要選用字典裡面會出現的字串;
      • 密碼需要超過 8 個字元;
       
      這是主要的限制,不過,由於你是『權力無限大的管理員』,所以密碼的形式是『不限的』(雖然沒有照規矩來時,在設定中會出現一些錯誤訊息,不過並不會影響你的設定!)。輸入完畢之後會出現在輸入一次的畫面,再次輸入一次密碼之後,那就新增完成了!
       
      基本上, userconf 的功能是很多啦!但是,他也只是將我們的 /etc/passwd 這個檔案進行圖表顯是的樣子而已!並沒有什麼新奇的事物呢!所以囉,如果你已經很熟悉該檔案了,那麼根本使用 vi 也就可以啦! Userconf 還用不上呢!

    密碼管理與設定:

    再來跟大家提一提那個重要的密碼概念!您得要特別留意的是,今天,您的主機若是遭到入侵,對方的第一個入侵點自然就是您主機上面帳號的『密碼』了,所以,如果您的密碼定義的比較嚴格的話,那麼自然對方就不容易猜到你的密碼,自然就會比較有保障啦!
     
    目前一些 Cracker 較常使用的密碼破解軟體,大抵是『字典攻擊法』及所謂的『暴力攻擊法』,就字面上的意義來說,『字典攻擊法』是將字典裡面所查的到的任何單字或片語都輸入的程式中,然後使用該程式一個一個的去嘗試破解你的密碼,不要覺得這樣的速度似乎很慢,實際上,現今的電腦運算速度太高了,字典攻擊法的操作效率基本上是很高的!另一個『暴力攻擊法』就是直接使用鍵盤上面任何可以使用的按鍵,然後依照組合,以 1 個, 2 個, 3 個…. 密碼組合的方式去破解你的密碼!這個方式就真的比較慢一點,如果你的密碼組合是 6~8 個字元以上,那麼暴力攻擊法還是需要好長一段時間才能夠破解的了的!
     
    由上面的『字典攻擊法』與『暴力攻擊法』猜測你的密碼的方式來說,您知道如何設定一個好的密碼了嗎?是的,您的密碼最好需要底下幾個特性:
    • 密碼中含有數個特殊字元,例如 $#@^&* 及數字鍵等等:如同上面提到的,您的按鍵越奇怪,那麼對方就越不容易使用既有的軟體來破解!
    • 英文字母大小寫混合使用;
    • 密碼長度至少要到 6 ~ 8 個以上才好;
    • 沒有特殊意義的字母或數字組合,並且夾著很多的特殊字元!
    這種密碼真的很不容易被破解,但是很不幸的,也很容易被你我忘記??所以呢,建議您常常使用一些對別人來說是沒有意義,但是對您確有特殊涵意的字眼!例如我常常提到的,我愛我老婆!『 I&Mywife*^』之類的密碼!不容易被猜,也挺容易被你自己記住的!那麼有沒有『很要命的密碼』呢?有的,底下幾種密碼就很要命:
    • 常用的英文單字:例如 party, park, andyliu, linux, paper 等等,都不好!容易被字典攻擊法破解!
    • 身邊人物的名字,例如配偶、小孩的名字等等, Tom, andy, eric 等等,都不好!
    • 單純的日期:例如您的生日啦!等等的,都不夠好!
    • 任何與您相關的數字或其他資訊,例如身份證號、銀行帳號等;
    VBird 曾經見過直接以帳號做為密碼的狀況!真是要命??太好猜了?
     
    好了!知道了密碼的重要性,與基本的設定之後,接著下來我們談一談如何手動設定密碼吧!基本上, root 可以設定『任何樣式的密碼』,而且, root 也可以幫助 user 訂定他們的密碼!至於 user 僅能修改自己的密碼!那麼修改密碼使用什麼命令?就是 passwd 這個命令啦!咦!這裡突然給他想到幾個重要資訊,大家趕緊複習一下:
    • 如何尋找 passwd 這個指令?

    • 使用 which passwd 即可
    • 如何察看 passwd 這個檔案的屬性?並請說明他的屬性為何?

    • 使用 ls –l `which passwd` 即可!他具有 SUID 的屬性!
    • 什麼是 SUID ?

    • 就是該程式在被執行的過程中,具有程式擁有者的權限!
    • 我該如何查詢 /etc/passwd 與 /usr/bin/passwd 的用法與架構?

    • 分別使用 man passwd 及 man 5 passwd
    這些指令與意義如果都還沒有忘記!恭喜您了!真是不錯!好了,還記得我們密碼放在哪裡嗎?對啦!就是 /etc/shadow 裡面,那個檔案的權限是 –rw------- 所以只有 root 可以修改,因此, passwd 必需要具有 SUID 才能讓一般使用者修改他們的密碼囉!

  • passwd

  • 語法
    [root @test /root]# passwd [username]
    [test @test /root]# passwd
    [root @test /root]# passwd test
    Changing password for user test
    New password:     <==輸入密碼
    BAD PASSWORD: it is based on a dictionary word
    Retype new password:   <==再輸入一次!
    passwd: all authentication tokens updated successfully
    說明
    這個指令可以修改使用者的密碼!要注意的是,這個指令在 /bin/passwd 中,而帳號所存放的地方在 /etc/passwd 中,是不一樣的呦!搞清楚呦!
    • 一般使用者的用法是直接輸入 passwd 即可;
    • root 可以使用 passwd [username] 來替 username 這個帳號取一個新的密碼!

    使用者身份切換:

    這裡有個很有趣的問題要來跟大家分享一下,還記得在古老的年代裡面,還沒有 ssh 的時候,我們都是使用 telnet 登入系統的,偏偏系統預設是不開啟 root 以 telnet 登入,那麼好了!我們要怎樣遠端操控我們的 Linux 主機呀!?因為由前面的介紹我們不難發現,系統當中最特殊的帳號就是 UID 為 0 的使用者了,他具有至高無上的權力!而且是系統管理員必須要具備的身份,否則怎樣操控主機呢?您說是吧!好了,那麼 telnet 將 root 的登入權限關掉了,而如果我們在製作一個使用者,並將其 UID 變為 0 的話又如何?嘿嘿!很抱歉, telnet 就是認 UID 的,所以肯定還是進不了系統,這個時候要怎麼辦呀!?就是變換身份呀!將一般使用者的身份變成了 root 就行了!
     
    但是怎樣變換身份呀?怎麼說呢?就是說,一般而言,我們都不希望以 root 的身份登入主機,以避免被怪客入侵了!但是一部主機又不可能完全不進行修補或者是設定等動作!這個時候要如何將一般使用者的身份變成 root 呢?主要有兩種方式,分別是:
    • 以 su 直接將身份變成 root 即可,但是這個指令卻需要 root 的密碼,也就是說,如果你要以 su 變成 root 的話,你的一般使用者就必須要有 root 的密碼才行;
    • 所以當有很多人同時管理一部主機的時候,那麼 root 的密碼不就很多人知道了?不是很好吧?所以,如果不想要將 root 的密碼流出去呢?呵呵!可以使用 sudo 來進行工作呦!
    底下我們就來說一說 su 跟 sudo 的用法啦!

  • su

  • 語法
    [root @test /root ]# su
    參數說明:
    範例:
    [test@test test]$ su
    Password:          <==輸入 root 的密碼
    [root@test test]#       <==身份變成 root 了!
    [test@test test]$ su -  <==連環境參數檔案都是讀取 root 的!
    [root@test root]# su test  <==將 root 的身份改為 test ,且不需要輸入密碼喔!
    說明
    這個指令很有用呦!這是用來將『一般身份轉換成 super user 』的指令!通常為了安全的考量, telnet 與 ssh 盡量不要以 root 的身份來登入!但是有時後我們又要在外頭以 root 的身份來修改系統設定,這個時候 su 就很有用了!su 的使用真的很簡單,輸入 su 之後,直接給他輸入 root 的密碼,此時您就是 root 了!但是需要特別留意的是:
    • 雖然您已經是 root 的身份,但是您的環境當中,還是屬於當初登入的那個使用者!例如我以 test 登入 Linux ,再以 su 切換身份成為 root ,但是我的 mail, PATH 及其他一些相關的環境變數,都還是 test 這個身份呢!
    • 至於環境變數當中,最麻煩的當屬 PATH 這個東西,因為為了避免一般使用者使用了 root 的管理指令,所以通常 Linux 都會將指令分類放在兩個主要的目錄,分別是 /bin 與 /sbin !那個 /sbin 大多是 super user 就是 root 用來管理系統的指令啦!所以,可能的話,將 test 的 PATH 重新設定成為 root 的 PATH ,這樣也比較方便呀!
    • 如果要全部的環境變數均使用 root 的設定檔,這個時候必需使用『 su - 』來下達命令喔!
    此外, su 也可以將您的身份轉換成為其他身份的使用者,而,如果您是 root ,那麼轉換為其他身份的使用者,將不需要輸入密碼喔!很過癮吧!例如上面的最後一個例子!

  • sudo

  • 語法
    [root @test /root ]# sudo [-u username] [command]
    參數說明:
    -u  :將身份變成 username 的身份
    範例:
    [test@test test]$ sudo mkdir /root/testing
    Password:          <==輸入 test 自己的密碼
    [root@test test]$ sudo -u test touch test <==root 可以執行 test 這個使用者的指令,建立 test 的檔案!
    說明
    • 如果單純的使用 su 來變換成 root 的身份,最大的好處是可以直接下達我們慣用的指令,但是,還是會有問題的,就是如果主機是由多人共管的時候,由於所有的人都必須要知道 root 的密碼,如此一來,呵呵!很麻煩的啦!因為怕被入侵嘛!而且只要 root 改變了密碼,那麼所有人都必需要通知一次!很麻煩,加上,如果管理群中的一個人不小心洩出了 root 的密碼,不就完蛋了??那麼有沒有可以不需要 root 的密碼,卻還是可以執行 root 的工具呢?呵呵!這個時候就有 sudo 的出現了!
    • sudo 的基本語法就是在 sudo 後頭直接加上指令,例如上面的例子中, mkdir /root/testing 就是命令啦!那麼就可以來執行 root 身份可以動作的事情!此外,由於執行 root 身份的工作時,『輸入的密碼是使用者的密碼,而不是 root 的密碼,所以可以減少 root 密碼外流的問題!』如此 root 的密碼將不會流出去了!但是 sudo 在使用的時候請小心,就是要在 /etc/sudoers 裡頭設定該有的事項!在預設情況下,只有 root 才能使用 sudo !那有什麼用!我們是一般使用者,想要使用的是 sudo 來變成 root 的身份呀!呵呵!沒關係!可以使用 visudo 來編輯 /etc/sudoers 這個檔案即可!在 Mandrake 9.0 與 Red Hat 的 Linux 版本之的預設情況中,使用『 visudo 』才能編輯 /etc/sudoers 這個檔案,此外,編輯者的身份必須要 root 才行!如何編輯呢?在預設的情況中,我們會希望將可以執行 root 動作的人的 group 設定為 wheel ,然後:

    •  
      [root@est /root]# visudo
      # sudoers file.
      #
      # This file MUST be edited with the 'visudo' command as root.
      #
      # See the sudoers man page for the details on how to write a sudoers file.
      #
      # Host alias specification
      # User alias specification
      # Cmnd alias specification
      # Defaults specification
      # User privilege specification
      root    ALL=(ALL) ALL
      test    ALL=(ALL) ALL                  <==這一行可以加入,使 test 這個人可以使用 sudo
      # Uncomment to allow people in group wheel to run all commands
      # %wheel        ALL=(ALL)       ALL    <==將這一行註解符號取消
      # Same thing without a password
      # %wheel        ALL=(ALL)       NOPASSWD: ALL
      # Samples
      # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
      # %users  localhost=/sbin/shutdown -h now
       
      如果如同上面的方式,將黃色字體那一行 /etc/sudoers 裡頭將
       
        # %wheel        ALL=(ALL)       ALL
       
      這一行的註解符號取消,如此一來,則群組為 wheel 的人就可以進行 root 的身份工作!這個 wheel 是系統預設的 group 呢!因此,如果您想要讓這部主機裡頭的一般身份使用者具有 sudo 的使用權限,那麼您就必需將該 user 放入支援 wheel 這個群組裡頭!如何加入?呵呵!剛剛上面不是介紹了 /etc/group 嗎?趕緊去看看!那麼萬一我想要讓『單獨的個人可以使用 sudo 的功能』呢?呵呵!那就直接以 visudo 加上這一行
       
        test ALL=(ALL) ALL
       
      即可!那麼 test 即可使用 sudo 的功能囉!很簡單吧!但是請記得不要以 vi 直接修改 sudoers 呦!會有問題!
    • sudo 除了變成 root 的功能之外!嘿嘿!他還可以變成『任何人』的功能呦!舉個簡單的例子來說好了,我們都知道啟動程序的時候最好不要使用 root 來啟動,因為如此一來當該程序被接管時,接管者(或者說是入侵者)將擁有 root 的權限了!所以近來我們都希望不要以 root 來啟動一些程序啦!會比較安全!那麼我們要以 root 來啟動成為 test (例如常用的 nobody 這個帳號)要如何作?很簡單,就使用上面的第二個例子來看:

    •  
        sudo -u test touch test
        
      root 可以改變身份成為 test 來建立檔案!嘿嘿!還不需要輸入密碼!很棒吧!這個動作我曾經在 squid 這個執行程序上面做過,這樣一來,即使我的 squid 被利用了,那麼該怪客只能擁有 nobody 的權限,嘿嘿!該權限是很小很小的!所以可以達到保護主機的部分功能呦!

    使用者查詢:

    好了,知道了 UID,GID 以及與帳號有關的一些資訊之後,我們要來瞧瞧,那麼如何知道哪一個使用者的 UID 與 GID ,以及他們所能夠提供的支援的群組呢?可能的話,當然可以直接到 /etc/passwd 及 /etc/group 裡面去查看囉!但是還有更簡單的方法呢,那就是使用簡單的指令工具呀!有哪些簡便的工具呢?就是底下這幾個:
    • id  查詢使用者的 UID, GID 及所擁有的群組;
    • groups 查詢使用者能夠支援的群組;
    • finger  查詢使用者的一些相關訊息,例如電話號碼等。

    • id

    • 語法
      [root @test root]# id [username]
      範例:
      [root @test root]# id
      uid=0(root) gid=0(root) groups=0(root)
      [root @test root]# id test
      uid=501(test) gid=501(test) groups=501(test)
      說明
      直接輸入 id 就可以知道目前這個帳號的 UID, GID 與所屬的群組!當然囉,如果想要知道某個使用者的相關資訊,就直接使用 id username ,例如 id test 就可以知道 test 這個使用者的相關資訊囉!很方便吧!不需要去查看 /etc/passwd 及 /etc/group !
       

    • finger

    • 語法
      [root @test root]# finger [-s] username
      參數說明:
      -s  :長的列出
      範例:
      [root @test root]# finger test
      Login: test                             Name: Testing user
      Directory: /home/test                   Shell: /bin/bash
      Office: 06-123-1234, 06-123-1234        Home Phone: 06-123-1234
      Never logged in.
      No mail.
      No Plan.

      [root @test root]# finger –s test
      Login     Name           Tty      Idle  Login Time   Office     Office Phone
      test      Testing user    *     *  No logins    06-123-123 06-123-1234

      說明
      finger 的用法也是真的很簡單,就是直接給他 finger username 就可以知道任何一個人的相關資訊了!而這個相關的訊息基本上都是寫在 /etc/passwd 裡面,當然,裡面還搜尋了 /var/spool/mail 這個郵件放置的地點,所以還會顯示出是否有郵件的訊息呢!相當的方便吧!不過,這個 finger 通常必需要配合 chfn 這個指令,亦即是 13-1-6 的內容提到的那個指令,才能夠顯示出比較多的資訊呢!另外,其實 finger 不是個很安全的指令,因此, Mandrake 系統預設是不安裝這個套件的!如果您想要試試看 finger 的話,那麼請依照第二篇教導的內容,將 Mandrake 安裝光碟第二塊放入 CDROM 當中,然後 mount cdrom 之後呢,再以『 rpm –ivh finger* 』來安裝 finger 吧!至於 rpm  的用法,我們會在第十八章的時候在進行說明呦!
       

    • groups

    • 直接輸入 groups 就可以顯示出目前的使用者的所屬群組了!包含了 Primary 與其他相關的群組都會被顯示出來呢!

    手動增加使用者

    好了,那麼我們已經知道如何新增帳號與刪除甚至是修改帳號了,呵呵!是否從此之後,天下太平呢?當然不是了!為什麼呢?假設您今天要新增帳號的內容是『數字帳號』的話,那麼是否可以使用 useradd 新增帳號呢?例如:
    useradd 1234567
    很抱歉?useradd 並不允許這樣的帳號設定的!唉?真難過,難道沒有其他的方法可以新增這樣的使用者帳號了嗎?咦!剛剛不是說過,其實我們都是使用 /etc/passwd 及 /etc/shadow 這幾個檔案來設定帳號的嗎?那麼使用手動的方式是否就可以解決這樣的困擾了!Bingo !沒錯!就是這樣!所以底下我們嘗試使用手動的方式來新增帳號,試試看能不能成功的增加一個使用者 1234 呢?
    • 一般使用者帳號的增加:

    • 好了,現在我們知道其實使用 userconf 、 useradd 與 groupadd 其實會用到的檔案最鮮明的就是 /etc/passwd 與 /etc/shadow 囉!那麼如何手動的增加一個使用者呢?最大的困擾在於 passwd 與 shadow 的同步啦!OK!大致的步驟可以這樣說:
      1. 先建立所需要的群組( vi /etc/group )
      2. 建立帳號的各個屬性( vi /etc/passwd )
      3. 將 passwd 與 shadow 同步化 ( pwconv )
      4. 建立該帳號的密碼 ( passwd acount )
      5. 建立使用者家目錄 ( cp -r /etc/skel /home/account )
      6. 更改家目錄屬性 ( chown -R account.group /home/account )
      這樣就 OK 啦!實地的來新增一個 test 群組與帳號來試試看:
       
      建立新的群組 test ,設其 GID 為 520
      [root @test /root ]# vi /etc/group
      ----略
      test:x:520:test               <==新增群組,且群組的人為 test ,GID 為 520

      建立 test 的各個屬性
      [root @test /root ]# vi /etc/passwd
      ----略
      test:x:520:520:testing account:/home/test:/bin/bash   <==建立各個屬性

      同步化 /etc/passwd 與 /etc/shadow
      [root @test /root ]# pwconv         <==將 passwd 的資料轉入 /etc/shadow 中!

      建立密碼
      [root @test /root ]# passwd test    <==建立使用者 test 密碼
      Changing password for user test
      New password:
      Retype new password:
      passwd: all authentication tokens updated successfully

      建立家目錄並轉化家目錄的擁有者
      [root @test /root ]# cp -r /etc/skel /home/test
      [root @test /root ]# chown -R test:test /home/test

      這樣就建立完畢囉!!很簡單吧!而由上面的例子,其實您也可以依據此而使用 scripts 來新增使用者,詳細的步驟等以後 VBird 真的開發出來了,再來跟大家報告。(如果沒記錯的話,目前很多網頁都已經有提供相關的大量建立帳號的方式了!)

    • POP3 郵件帳號的增加:

    • 好啦!如果我是一個郵件主機,我不要使用者使用 ftp, telnet, ssh 的話,只允許對方使用 POP3 而已,該怎麼辦?呵呵!其實也是很簡單的,除了 userconf 可以進行之外,你也可以手動達到此一目的呦!
      基本上的原理是這樣的:
      • 由於不需要讓這個帳號由其他的服務登入主機,所以在 shell 的地方則改成了 /bin/false 囉!
      • 由於不需要這個帳號的登入,所以家目錄也可以不用建立!!
      所以整個建立的步驟就可以簡化為:
      1. 建立帳號的各個屬性( vi /etc/passwd )
      2. 將 passwd 與 shadow 同步化 ( pwconv )
      3. 建立該帳號的密碼 ( passwd acount )
      這樣就可以啦!我們實地的來建立一個名為 poptest 的帳號試試看:
       
      建立帳號 poptest
      [root @test /root ]# vi /etc/passwd
      ---略
      poptest:x:530:45:testing pop account:/home/poptest:/bin/false<==家目錄先設定也沒關係!
      注意:群組必需要先存在,通常不知道什麼 group 好的時候,可以直接使用 100 這個預設的 group 來替代!而 shell 則需要為 /bin/false 才行!

      同步化 passwd 與 shadow
      [root @test /root ]# pwconv

      建立密碼
      [root @test /root ]# passwd poptest
      Changing password for user poptest
      New password:
      Retype new password:
      passwd: all authentication tokens updated successfully

      很簡單吧!這樣就建立好 poptest 這一個郵件 POP3 的帳號了!這個帳號將僅可以使用 pop3 與 smtp 來收發信件呢!!
      那麼如何砍到剛剛建立的帳號呢?很簡單的啦!
      1. 就是將 /etc/passwd 與 /etc/shadow 裡面的相關資訊都殺掉,
      2. 然後再到 /home 底下去將該 account 的家目錄整個殺掉就是了!
      3. 此外,你也需要到 /var/spool/mail 底下去殺掉該帳號的郵件呦!
    一個簡單的大量建置帳號的實例!
    #!/bin/bash
    accountfile="user.passwd"
    read -p "Input title name:  " filename
    read -p "How much accounts: " number
    [ -f "$accountfile" ] && mv $accountfile "$accountfile"`date +%Y%m%d`
    
    # 1. create the account and password file
    for ((i=1; i<=$number; i++ ))
    do
            account="$filename""$i"
            echo "$account":"$account""xx" | tee -a "$accountfile"
    done
    
    # 2. create the account from useradd
            cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd -m
            chpasswd < "$accountfile"
            pwconv
            pwck
    

    本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看)

    • root 的 UID 與 GID 是多少?而基於這個理由,我要讓 test 這個帳號具有 root 的權限,應該怎麼作?

    • 答:
        root 的 UID 與 GID 均為 0 ,所以要讓 test 變成 root 的權限,那麼就將 /etc/passwd 裡面, test 的 UID 與 GID 欄位變成 0 即可!
         
    • 假設我是一個系統管理員,我有一個用戶最近不乖,所以我想暫時將他的帳號停掉,讓他近期無法進行任何動作,等到未來他乖一點之後,我再將他的帳號啟用,請問:我可以怎麼作比較好??

    • 答:
        由於這個帳號是暫時失效的,所以不能使用 userdel 來刪除,否則很麻煩!那麼應該如何設定呢?再回去瞧一瞧 /etc/shadow 的架構,可以知道有這幾個可使用的方法:
        • 將 /etc/passwd 的 shell 欄位寫成 /sbin/nologin ,即可讓該帳號暫時無法登入主機;
        • 將 /etc/shadow 內的密碼欄位,增加一個 * 號在最前面,這樣該帳號亦無法登入!
        • 將 /etc/shadow 的第八個欄位關於帳號取消日期的那個,設定小於目前日期的數字,那麼他就無法登入系統了!
         
    • 在設定密碼的時候,是否可以隨便設定呢?

    • 答:
        最好不要隨便設定密碼!最好可以仔細的參考一下 13-2 節提到的內容!
         
    • 我在使用 useradd 的時候,新增的帳號裡面的 UID, GID 還有其他相關的密碼控制,都是在哪幾個檔案裡面設定的?

    • 答:
        在 /etc/login.defs 還有 /etc/defaults/useradd 裡面規定好的!
         
    • 我希望我在設定每個帳號的時候( 使用 useradd ),預設情況中,他們的家目錄就含有一個名稱為 www 的子目錄,我應該怎麼作比較好?

    • 答:
        由於使用 useradd 的時候,會自動以 /etc/skel 做為預設的家目錄,所以,我可以在 /etc/skel 裡面新增加一個名稱為 www 的目錄即可!
         
    • pwconv 這個指令有什麼功能呢?

    • 答:
        pwconf 可以讓 passwd 裡面的帳號,設定一份密碼到 /etc/shadow 當中!
    修改歷史:
    • 2002/05/15:第一次完成
    • 2003/02/10:重新編排與加入 FAQ
    • 2005/08/25:加入一個大量建置帳號的實例,簡單說明一下而已!
    伺服器篇文件
    各版本彙整說明
    CentOS 6.x