帳號管理: 管理員的工作中,相當重要的一環就是『管理帳號』啦!因為整個系統都是你在管理的,並且所有的一般用戶的申請,都必須要透過你的協助才行!所以你就必須要了解一下如何管理好一個網站的帳號管理啦!在管理 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: 還記得我們在『?n案系???n案?儺浴荒且黃?惱碌氖焙蠐刑岬矯懇桓齙蛋付季哂小河滌腥擻胗滌腥鶴欏壞氖糶月穡磕敲吹蛋溉綰聞斜鶿?撓滌姓哂餚鶴檳兀科涫稻褪搶? 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/shadow 檔案: 這兩個檔案可以說是 Linux 裡頭最重要的檔案之一了!如果沒有這兩個檔案的話,呵呵!您可是無法登入 Linux 的呦! o passwd 的構造: 這個檔案的構造是這樣的:每一行都代表一個帳號,有幾行就代表有幾個帳號在你的系統中!不過需要特別留意的是,裡頭很多帳號本來就是系統中必須要的(例如 bin, daemon, adm, nobody 等等),請不要隨意的殺掉他~~;
在這個畫面中,你所需要輸入的其實只有 Login name 就可以了,其它的東西系統會自動幫你設定(有 (opt) 的都是系統會自行依照 /etc/login.defs 與 /etc/defaults/useradd 的內容自行加以設定的!)。不過,如果你需要將使用者分門別類的話,最好還是設定一下比較好! · Login name:輸入要新增的使用者的帳號(就是 ID 啦); · Full name :這是這個帳號的使用者全名,這個地方是可有可無的,不會影響! · group :用來指定這一個 ID 的所屬群組,通常鳥哥都會將在我機器上的使用者分成幾各類別,而分別給予不同的群組,好方便管控! · Supplementary groups:除了主要的群組之外,Linux 還提供你其它的支持群組!不過通常不用設定就可以了; · Home directory(opt) :這是用來設定這個帳號使用者的家目錄。通常如果不設定的話,預設的使用者家目錄都在 /home/userID ,但是當你的硬碟容量不夠大的時候,或者想將某人移動到某一個目錄的話,就可以直接在這邊改一改?? · Command interpreter(opt) :這是使用者預設的 Shell ,通常在 Linux 下,我們都使用 BAShell ,所以不用改啦; · User ID(opt) :注意喔,這個 ID 可不是前面的 login 的 ID ,這個 ID 是前面說的 Uid 編號,你可以自己設定一個大於 500 且不與其它帳號重複的 ID,也可以交由系統自動設定; · 設定郵件別名(alias):基本上設定完這裡就可以了,其它的保持默認值即可。不過,如果你已經有開啟了 mail 服務,而雖然你的 ID 是 vbird ,但是也想要使用另一個 ID 為 dmtsai 的時候,其實不用再設定另一個帳號,只要使用 alias 的功能即可。將游標往下移動,可以看到如下的畫面:
在上面這個畫面中,將游標移動到 Email alias 這一項上面。輸入你要的別名(alias)即可。所謂的設定郵件別名 的意思是這樣的,當你想要讓 dmtsai 的郵件也傳遞到 vbird 這個帳號時,使用使用郵件別名,則系統在收到 dmtsai 這個 ID 的信件時,會將信直接傳送到 vbird 而不會使用 dmtsai。(這個項目會直接寫入 /etc/aliases 這個檔案中,我們會在後面的郵件主機裡頭再提到這個項目!) 最常使用 郵件別名 的時候是:當一群人都想要使用同一個帳號時。例如:你是一個系統管理員,若你要進行系統維修的時候,會在兩天前發 e-mail 向你的使用者通知。如果是一個小站的話,那你可以慢慢的發個幾封信也就是了,但是當你負責的是一個幾百甚至幾千人的企業時,這樣發信是否覺得很麻煩呢?這時就可以使用 mail alias 的功能了,每個使用者的 mail alias 都可以設定為同一個虛擬帳號,例如每個人都有一個叫做 piggg 的帳號,則你只要寄信給 piggg 這個帳號時,系統會自動幫你把信傳送給每一個人喔!好用吧!關於這部份,我們會在 mail server 中再次提到! OK!設定完成之後,按下 『Tab』 鍵,選擇 Accept 按 Enter,這時會出現要你輸入密碼的畫面:
3. 新增群組:新增群組的話請選擇 Cancel 跳出到最前面的畫面,選擇 Group definitions 這一項,就會出現 Group 的列表,基本上 Group 的增加與新增使用這是相同的方式,在此就不多說了!留給大家去嘗試嘗試吧! · 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 的密碼流出去呢?呵呵!可以使用 sudo 來進行工作呦! 底下我們就來說一說 su 跟 sudo 的用法啦! · su 語法: · [root @test /root ]# su 參數說明: 範例: [test@test test]$ su Password: <==輸入 root 的密碼 [root@test test]# <==身份變成 root 了 · 說明: 這個指令很有用呦!這是用來將『一般身份轉換成 super user 』的指令!通常為了安全的考量, telnet 與 ssh 盡量不要以 root 的身份來登入!但是有時后我們又要在外頭以 root 的身份來修改系統設定,這個時候 su 就很有用了! · 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 的密碼,不就完蛋了~~這個時候就有 sudo 的出現了! · sudo 的基本語法就是在 sudo 後頭直接加上指令,例如上面的例子中, mkdir /root/testing 就是命令啦!那麼就可以來執行 root 身份可以動作的事情!此外,由於執行 root 身份的工作時,『輸入的密碼是使用者的密碼,而不是 root 的密碼,所以可以減少 root 密碼外流的問題!』如此 root 的密碼將不會流出去了!但是 sudo 在使用的時候請小心,就是要在 /etc/sudoers 裡頭設定該有的事項!在預設情況下,只有 root 才能使用 sudo !那有什麼用!我們是一般使用者,想要使用的是 sudo 來變成 root 的身份呀!呵呵!沒關係!可以使用 visudo 來編輯 /etc/sudoers 這個檔案即可!在 Red Hat 的預設情況中,使用『 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 的身份工作!那麼萬一我想要讓『單獨的個人可以使用 sudo 的功能』呢?呵呵!那就直接以 visudo 加上這一行『test ALL=(ALL) ALL』即可!那麼 test 即可使用 sudo 的功能??『薌虻グ桑〉?喬爰塹貌灰? vi 直接修改 sudoers 呦!會有問題! · sudo 除了變成 root 的功能之外!嘿嘿!他還可以變成『任何人』的功能呦!舉個簡單的例子來說好了,我們都知道激活程序的時候最好不要使用 root 來激活,因為如此一來當該程序被接管時,接管者(或者說是入侵者)將擁有 root 的許可權了!所以近來我們都希望不要以 root 來激活一些程序啦!會比較安全!那麼我們要以 root 來激活成為 test (例如常用的 nobody 這個帳號)要如何作?很簡單,就使用上面的第二個例子來看, root 可以改變身份成為 test 來建立檔案!嘿嘿!還不需要輸入密碼!很棒吧!這個動作我曾經在 squid 這個執行續上面做過,這樣一來,即使我的 squid 被利用了,那麼該怪客只能擁有 nobody 的許可權,嘿嘿!該許可權是很小很小的!所以可以達到保護主機的部分功能呦!