Linux 帳號與身份管理
本文已不再更新,更新文章請參考此處
最近更新日期:2003/02/10
帳號管理groupadd, groupdel, useradd, userdel, chsh, chfn, userconf,
密碼管理與設定passwd,
使用者身份切換su, sudo, visudo,
使用者查詢id, finger, groups,
手動增加使用者一般使用者帳號, 僅開放 POP (郵件)帳號
本章習題練習

帳號管理
管理員的工作中,相當重要的一環就是『管理帳號』啦!因為整個系統都是你在管理的,並且所有的一般用戶的申請,都必須要透過你的協助才行!所以你就必須要瞭解一下如何管理好一個網站的帳號管理啦!在管理 Linux 主機的帳號時,我們必須先來瞭解一下 Linux 到底是如何辨別每一個使用者的! 大致上的情況就像這樣,所以呢,當你要登入你的 Linux 主機的時候,那個 /etc/passwd 與 /etc/shadow 就必須要讓系統讀取啦,(這也是很多攻擊者會將特殊帳號寫到 /etc/passwd 裡頭去的緣故!)所以呢,如果你要備份 Linux 的系統的帳號的話,那麼這兩個檔案就一定需要備份才行呦!
認識完了一些需要注意的東西之後,我們來研究一下如何以『指令』增加群組、使用者與變更密碼吧!在接下來的例子中,『您可以依照底下的案例直接下達指令去試看看!』實作是真的很重要的啦!

  • 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 這一項囉!在操作上,使用『上下鍵』移動反白的線條,而使用『Tab』鍵來使游標移動到底下的 Quit 及 Help 按鈕!底下我們提一提在帳號管理方面,最常使用的兩個功能,分別是『已存在帳號的修正與管理』,及『新增帳號!』

    密碼管理與設定:
    再來跟大家提一提那個重要的密碼概念!您得要特別留意的是,今天,您的主機若是遭到入侵,對方的第一個入侵點自然就是您主機上面帳號的『密碼』了,所以,如果您的密碼定義的比較嚴格的話,那麼自然對方就不容易猜到你的密碼,自然就會比較有保障啦!
     
    目前一些 Cracker 較常使用的密碼破解軟體,大抵是『字典攻擊法』及所謂的『暴力攻擊法』,就字面上的意義來說,『字典攻擊法』是將字典裡面所查的到的任何單字或片語都輸入的程式中,然後使用該程式一個一個的去嘗試破解你的密碼,不要覺得這樣的速度似乎很慢,實際上,現今的電腦運算速度太高了,字典攻擊法的操作效率基本上是很高的!另一個『暴力攻擊法』就是直接使用鍵盤上面任何可以使用的按鍵,然後依照組合,以 1 個, 2 個, 3 個…. 密碼組合的方式去破解你的密碼!這個方式就真的比較慢一點,如果你的密碼組合是 6~8 個字元以上,那麼暴力攻擊法還是需要好長一段時間才能夠破解的了的!
     
    由上面的『字典攻擊法』與『暴力攻擊法』猜測你的密碼的方式來說,您知道如何設定一個好的密碼了嗎?是的,您的密碼最好需要底下幾個特性: 這種密碼真的很不容易被破解,但是很不幸的,也很容易被你我忘記??所以呢,建議您常常使用一些對別人來說是沒有意義,但是對您確有特殊涵意的字眼!例如我常常提到的,我愛我老婆!『 I&Mywife*^』之類的密碼!不容易被猜,也挺容易被你自己記住的!那麼有沒有『很要命的密碼』呢?有的,底下幾種密碼就很要命: VBird 曾經見過直接以帳號做為密碼的狀況!真是要命??太好猜了?
     
    好了!知道了密碼的重要性,與基本的設定之後,接著下來我們談一談如何手動設定密碼吧!基本上, root 可以設定『任何樣式的密碼』,而且, root 也可以幫助 user 訂定他們的密碼!至於 user 僅能修改自己的密碼!那麼修改密碼使用什麼命令?就是 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 中,是不一樣的呦!搞清楚呦!

    使用者身份切換:
    這裡有個很有趣的問題要來跟大家分享一下,還記得在古老的年代裡面,還沒有 ssh 的時候,我們都是使用 telnet 登入系統的,偏偏系統預設是不開啟 root 以 telnet 登入,那麼好了!我們要怎樣遠端操控我們的 Linux 主機呀!?因為由前面的介紹我們不難發現,系統當中最特殊的帳號就是 UID 為 0 的使用者了,他具有至高無上的權力!而且是系統管理員必須要具備的身份,否則怎樣操控主機呢?您說是吧!好了,那麼 telnet 將 root 的登入權限關掉了,而如果我們在製作一個使用者,並將其 UID 變為 0 的話又如何?嘿嘿!很抱歉, telnet 就是認 UID 的,所以肯定還是進不了系統,這個時候要怎麼辦呀!?就是變換身份呀!將一般使用者的身份變成了 root 就行了!
     
    但是怎樣變換身份呀?怎麼說呢?就是說,一般而言,我們都不希望以 root 的身份登入主機,以避免被怪客入侵了!但是一部主機又不可能完全不進行修補或者是設定等動作!這個時候要如何將一般使用者的身份變成 root 呢?主要有兩種方式,分別是: 底下我們就來說一說 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 了!但是需要特別留意的是: 此外, 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 的檔案!
    說明

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

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


    本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
    2002/05/15:第一次完成
    2003/02/10:重新編排與加入 FAQ
    2005/08/25:加入一個大量建置帳號的實例,簡單說明一下而已!