歡迎您光臨本站 註冊首頁

Linux 賬號與身份管理(1)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  賬號管理:

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

  使用者的 ID 與群組的 ID :

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

  怎樣登入 Linux 主機呀?

  好了,那麼我們再來談一談,到底我們是怎樣登入 Linux 主機的呢?其實也不難啦!當我們在主機前面或者是以 telnet 或者 ssh 登入主機時,系統會出現一個 login 的畫面讓你輸入賬號,這個時候當你輸入賬號與密碼之後, Linux 會:

  先找尋 /etc/passwd 裡面是否有這個賬號?如果沒有則跳出,如果有的話則將該賬號對應的 UID ( User ID )與 GID ( Group ID )讀出來,另外,該賬號的家目錄與 shell 設定也一併讀出;

  再來則是核對密碼錶啦!這時 Linux 會進入 /etc/shadow 裡面找出對應的賬號與 UID,然後核對一下你剛剛輸入的密碼與裡頭的密碼是否相符?

  如果一切都 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 這個系統管理員這一行好了,你可以明顯的看出來,每一行使用『:』分隔開,共有七個咚咚,分別是

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

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

  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 檔案!

  GID:這個與 /etc/group 有關!其實 /etc/group 的觀念與 /etc/passwd 差不多,只是他是用來規範 group 的而已!

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

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

  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 的形式,也同樣的以『:』作為分隔的符號.數一數,共可以發現有九個欄位,分別給他說明如下:

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

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

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

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

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

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

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

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

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

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

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

  保留:一個欄位是保留的,看以後有沒有新功能加入.

  這個 /etc/shadow 是很重要的數據,千萬不能遺失也不能被 root 以外的人看到或修改!尤其是密碼欄,因為很早之前就已經發明了『暴力計算』密碼的程序,如果你的密碼被看過了,則別人可以利用該程序去演算出你的真實密碼,呵呵,到時候可就傷腦筋了!切記切記!

  這個 /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

  這個內容也說明如下:

  群組名稱:就是群組名稱啦!

  群組密碼:通常不需要設定,因為我們很少使用到群組登入!不過,同樣的,密碼也是被紀錄在 /etc/gshadow 當中啰!

  群組 ID:就是所謂的 GID 啦!

  支持的賬號名稱:這個群組裡面的所有的賬號,如上面所言,如果你想要讓 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 這個人的基本信息! 


[火星人 ] Linux 賬號與身份管理(1)已經有539次圍觀

http://coctec.com/docs/linux/show-post-51744.html