免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1009 | 回复: 0
打印 上一主题 下一主题

Linux 的帳號與群組一 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-08 20:02 |只看该作者 |倒序浏览

要登入 Linux 系統一定要有帳號與密碼才行,否則怎麼登入,您說是吧?!不過, 不同的使用者應該要擁有不同的權限才行吧?我們還可以透過 user/group 的特殊權限設定, 來規範出不同的群組開發專案呢~在 Linux 的環境下,我們可以透過很多方式來限制使用者能夠使用的系統資源, 包括
bash shell
章節提到的 ulimit 限制、還有特殊權限限制,如 umask 等等。 透過這些舉動,我們可以規範出不同使用者的使用資源。另外,還記得系統管理員的帳號嗎?對! 就是 root 。請問一下,除了 root 之外,是否可以有其他的系統管理員帳號? 為什麼大家都要盡量避免使用數字型態的帳號?如何修改使用者相關的資訊呢?這些我們都得要瞭解瞭解的!
1.
Linux 的帳號與群組
  1.1
使用者識別: UID 與 GID
  1.2
使用者帳號:/etc/passwd, /etc/shadow
  1.3
關於群組

有效與初始群組

groups
,
newgrp
2.
帳號管理:
  2.1
新增與移除使用者

useradd
,
相關設定檔
,
passwd
,
usermod
,
userdel
  2.2
使用者功能

chsh
,
chfn
,
finger
,
id
  2.3
新增與移除群組

groupadd
,
groupmod
,
groupdel
,
gpasswd
,
newgrp
  2.4
密碼管理

passwd
3.
使用者身份切換:
  3.1
su
  3.2
sudo
,
visudo (/etc/sudoers)
4.
使用者的特殊 shell 與 PAM 模組
  4.1
特殊的 shell , /sbin/nologin
  4.2
PAM 模組: /etc/nologin, /etc/securetty, /etc/security/*
5.
Linux 系統上使用者的對談與 mail 的使用:
  4.1
查詢使用者: w, who, last, lastlog
  4.2
使用者對談: talk, mesg, wall
  4.3
使用者郵件信箱: mail
6.
手動新增使用者:
  5.1
一些檢查工具

pwck
,
pwconv
,
pwunconv
,
chpasswd
  5.2
特殊帳號,如純數字帳號的建立:
  5.3
不開放終端機登入的帳號 (ex>mail acccount)
  5.4
一個大量建置帳號的範例:
7.
本章習題練習
8.
針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23887



Linux 的帳號與群組

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

使用者識別: UID 與 GID

雖然我們登入 Linux 主機的時候,輸入的是我們的帳號,但是,其實 Linux 主機並不會直接認識你的『帳號名稱』的,他僅認識 ID 啊~ID 就是一組號碼啦~ 主機對於數字比較有概念的,帳號只是為了讓人們容易記憶而已。 而您的 ID 與帳號的對應就在 /etc/passwd 當中哩。
Tips:
如果你曾經以 tarball 安裝過軟體的話,那麼應該不難發現,在解壓縮之後的檔案, 檔案擁有者竟然是『不明的數字』?奇怪吧?這沒什麼好奇怪的,因為 Linux 說實在話,他真的只認識代表你身份的號碼而已!

那麼到底有幾種 ID 呢?還記得我們在『
檔案屬性與目錄配置
』 那一篇文章的時候有提到每一個檔案都具有『擁有人與擁有群組』的屬性嗎? 沒錯啦~每個登入的使用者至少都會取得兩個 ID ,一個是使用者 ID (User ID ,簡稱 UID)、 一個是群組 ID (Group ID ,簡稱 GID)。
那麼檔案如何判別他的擁有者與群組呢?其實就是利用 UID 與 GID 啦! 每一個檔案都會有所謂的擁有者 ID 與擁有群組 ID ,亦即是 UID 與 GID ,然後系統會依據 /etc/passwd 的內容,去將該檔案的擁有者與群組名稱, 使用帳號的形式來秀出來!我們可以作個小實驗,你可以以 root 的身份 vi /etc/passwd ,然後將你的一般身份的使用者的 ID 隨便改一個號碼, 然後再到你的一般身份的目錄下看看原先該帳號擁有的檔案,你會發現該檔案的擁有人變成了 『數字了』呵呵!這樣可以理解了嗎?
[root@linux ~]# vi /etc/passwd
.....(前面省略).....
dmtsai:x:501:501::/home/dmtsai:/bin/bash  
[root@linux ~]# ls -ld /home/
drwxr-xr-x   3   501 dmtsai 4096 Aug 30 10:37 dmtsai
# 瞧!這裡就能夠知道,其實檔案記錄的是 UID 啦~
你一定要瞭解的是,上面的例子僅是在說明 UID 與帳號的對應性, 在一部正常運作的 Linux 主機環境下,上面的動作不可隨便進行, 這是因為系統上已經有很多的資料在運行了,隨意修改系統上某些帳號的 UID 很可能會導致某些程序無法進行,這將導致系統無法順利運作的結果。 因為權限的問題啊!所以,瞭解了之後,請趕快回到 /etc/passwd 裡面,將數字改回來喔!
  • 如何登入 Linux 取得 UID/GID
    好了,那麼我們再來談一談,到底我們是怎樣登入 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 的系統的帳號的話, 那麼這兩個檔案就一定需要備份才行呦!

    使用者帳號:/etc/passwd, /etc/shadow

    由上面的說明您大概已經知道,嘿嘿!帳號管理最重要的兩個檔案就是『 /etc/passwd 與 /etc/shadow 』了!這兩個檔案可以說是 Linux 裡頭最重要的檔案之一了! 如果沒有這兩個檔案的話,呵呵!您可是無法登入 Linux 的呦!所以,底下我們先針對這兩個檔案來進行說明。 當然囉,更詳細的資料您可以自行 man 5 passwd 及 man 5 shadow 的啦~
  • /etc/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
    我們先來看一下每個 Linux 系統都會有的第一行,就是 root 這個系統管理員那一行好了, 你可以明顯的看出來,每一行使用『:』分隔開,共有七個咚咚,分別是:
  • 帳號名稱:就是帳號名稱啦!對應 UID 用的!例如 root 就是預設的系統管理員的帳號名稱;
  • 密碼:早期的 Unix 系統的密碼是放在這個檔案中的, 但是因為這個檔案的特性是所有的程序都能夠讀取,所以,這樣一來很容易造成資料的被竊取, 因此後來就將這個欄位的密碼資料給他改放到 /etc/shadow 中了,關於 /etc/shadow 這一部份等一下再說。而這裡你會看到一個 x ,呵呵!別擔心,這表示密碼已經被移動到 shadow 這個加密過後的檔案囉;
  • UID:這個就是使用者識別碼 (ID) 囉!通常 Linux 對於 UID 有幾個限制需要說給您瞭解一下:
    id 範圍
    該 ID 使用者特性
    0
    當 UID 是 0 時,代表這個帳號是『系統管理員』!所以當你要作另一個系統管理員帳號時, 你可以將該帳號的 UID 改成 0 即可;這也就是說,一部系統上面的系統管理員不見得只有 root 喔! 不過,不很建議有多個帳號的 UID 是 0 啦~
    1~499
    保留給系統使用的 ID,其實 1~65534 之間的帳號並沒有不同, 也就是除了 0 之外,其他的 UID 並沒有不一樣,預設 500 以下給系統作為保留帳號只是一個習慣。這樣的好處是,以有名的 DNS 伺服器的啟動服務『 named 』為例,這個程式的預設所有人 named 的帳號 UID 是 25 ,當有其他的帳號同樣是 25 時,很可能會造成系統的一些小問題!為了杜絕這樣的問題,建議保留 500 以前的 UID 給系統吧!
    不過,一般來說, 1~99 會保留給系統預設的帳號,另外 100~499 則保留給一些服務來使用。
    500~65535
    給一般使用者用的。事實上,目前的 linux 核心 (2.6.x 版)已經可以支援到 4294967295 (2^32-1) 這麼大的 UID 號碼喔!
    上面這樣說明可以瞭解了嗎?是的, 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 來進行指令的下達!嘿嘿!發現了吧?我們在
    bash
    章節裡面提到很多次,登入 Linux 時為何預設是 bash 呢?就是這裡設定的啦~ 這裡比較需要注意的是,有一個 shell 可以用來替代成讓帳號無法登入的指令!那就是 /sbin/nologin 這個東西!這也可以用來製作純 pop 郵件帳號者的資料呢!
  • /etc/shadow
    上面約略提到,由於每個程序都需要取得 uid 與 gid 來判斷權限的問題,所以, /etc/passwd 的權限必須要設定成為 -rw-r--r-- 這樣的權限,在這樣的情況下, 使用者的密碼不就任何人都可以看到嗎?即使這個檔案內的密碼欄是加密的, 壞心腸的朋友也可能利用暴力破解法去 try and error 找出您的密碼資料......
    因為這樣的關係,所以後來發展出將密碼移動到 /etc/shadow 這個檔案分隔開來的技術, 而且還加入很多的密碼限制參數在 /etc/shadow 裡頭呢!我們先來瞭解一下這個檔案的構造吧! 我的 /etc/shadow 檔案有點像這樣:
    root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::
    bin:*:12959:0:99999:7:::
    daemon:*:12959:0:99999:7:::
    adm:*:12959:0:99999:7:::
    基本上, shadow 同樣以『:』作為分隔符號,如果數一數,會發現共有九個欄位啊, 這九個欄位的用途是這樣的:
  • 帳號名稱:由於密碼也需要與帳號對應啊~因此, 這個檔案的第一欄就是帳號,必須要與 /etc/passwd 相同才行!
  • 密碼:這個才是真正的密碼,而且是 經過編碼過的密碼啦! 你只會看到有一些特殊符號的字母就是了!需要特別留意的是, 雖然這些加密過的密碼很難被解出來,但是『很難』不等於『不會』,所以, 這個檔案的預設屬性是『-rw-------』或者是『-r--------』,亦即只有 root 才可以讀寫就是了!你得隨時注意,不要不小心更動了這個檔案的屬性呢!另外, 如果是在密碼欄的第一個字元為『 * 』或者是『 ! 』,表示這個帳號並不會被用來登入的意思。 所以萬一哪一天你的某個使用者不乖時,可以先在這個檔案中,將他的密碼欄位的最前面多加一個 * !嘿嘿!他就無法使用該帳號囉!直到他變乖了,再給他啟用啊!
  • 最近更動密碼的日期:這個欄位記錄了『更動密碼的那一天』的日期, 不過,很奇怪呀!在我的例子中怎麼會是 12959 呢?呵呵,這個是因為計算 Linux 日期的時間是以 1970 年 1 月 1 日作為 1 ,而 1971 年 1 月 1 日則為 366 啦! 所以這個日期是累加的呢!得注意一下這個資料呦!那麼最近的 2005 年 1 月 1 日就是 12784 啦,瞭解了嗎?
  • 密碼不可被更動的天數: 第四個欄位記錄了這個帳號的密碼需要經過幾天才可以被變更!如果是 0 的話, 表示密碼隨時可以更動的意思。這的限制是為了怕密碼被某些人一改再改而設計的!如果設定為 20 天的話,那麼當你設定了密碼之後, 20 天之內都無法改變這個密碼呦!
  • 密碼需要重新變更的天數: 由於害怕密碼被某些『有心人士』竊取而危害到整個系統的安全,所以有了這個欄位的設計。 你必須要在這個時間之內重新設定你的密碼,否則這個帳號將會暫時失效。 而如果像上面的 99999 的話,那就表示,呵呵,密碼不需要重新輸入啦! 不過,如果是為了安全性,最好可以設定一段時間之後,嚴格要求使用者變更密碼呢!
  • 密碼需要變更期限前的警告期限:當帳號的密碼失效期限快要到的時候, 就是上面那個『必須變更密碼』的那個時間時, 系統會依據這個欄位的設定,發出『警告』言論給這個帳號,提醒他『再過 n 天你的密碼就要失效了,請盡快重新設定你的密碼呦!』,如上面的例子,則是密碼到期之前的 7 天之內,系統會警告該用戶。
  • 密碼過期的恕限時間:如果用戶過了警告期限沒有重新輸入密碼, 使得密碼失效了,也就是說,你在『必須變更密碼的期限前,並沒有變更你的密碼!』 那麼該組密碼就稱為『失效的密碼』囉~怎麼辦?沒關係,還有這個欄位的天數設計啊~ 意思就是說,當密碼失效後,你還可以用這個密碼在 n 天內進行登入的意思。 而如果在這個天數後還是沒有變更密碼,呵呵!那麼您的帳號就失效了!無法登入!
  • 帳號失效日期:這個日期跟第三個欄位一樣,都是使用 1970 年以來的總日數設定。這個欄位表示: 這個帳號在此欄位規定的日期之後,將無法再使用。 這個欄位會被使用通常應該是在『收費服務』的系統中, 你可以規定一個日期讓該帳號不能再使用啦!
  • 保留:最後一個欄位是保留的,看以後有沒有新功能加入。 舉個例子來說好了,假如我的 dmtsai 這個使用者的密碼欄如下所示:
    dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:
    這表示什麼呢?要注意的是, 13025 是 2005/08/30 ,所以, dmtsai 這個使用者他的密碼相關意義是:

    • 最近一次更動密碼的日期是 2005/08/30 (13025);
    • 能夠修改密碼的時間是 5 天以後,也就是 2005/09/04 以前 dmtsai 不能修改自己的密碼; 如果使用者還是嘗試要更動自己的密碼,系統就會出現這樣的訊息:
      You must wait longer to change your password
      passwd: Authentication token manipulation error
    • 使用者必須要在 2005/09/04 到 2005/10/29 之間的 60 天限制內去修改自己的密碼,若 2005/10/29 之後還是沒有變更密碼時,該帳號就會宣告失效;
    • 如果使用者一直沒有更改密碼,那麼在 2005/10/29 之前的 7 天內,系統會警告 dmtsai 應該修改密碼的相關資訊;例如當 dmtsai 登入時,系統會主動提示如下的資訊:
      Warning: your password will expire in 5 days
    • 如果該帳號一直到 2005/10/29 都沒有更改密碼,由於還有兩天的恕限時間,因此, dmtsai 還是可以在 2005/10/31 以前繼續登入;
    • 如果使用者在 2005/10/29 以前變更過密碼,那麼那個 13025 的日期就會跟著改變,因此, 所有的限制日期也會跟著相對變動喔!^_^
    • 無論使用者如何動作,到了 13125 ,大約是 2005/12/8 左右,該帳號就失效了~
    透過這樣的說明,您應該會比較容易理解了吧?! ^_^
    Tips:
    常常聽到:我的密碼忘記或者被更動了?怎麼辦?
    有的時候會發生這樣的情況,就是說,你的 root 密碼忘記了!要怎麼辦?重新安裝嗎?另外, 有的時候是被入侵了, root 的密碼被更動過,該如何是好?
    這個時候就必須要使用到 /etc/shadow 這個資料了!我們剛剛知道密碼是存在這個檔案中的, 所以只要你能夠以各種可行的方法開機進入 Linux ,例如單人維護模式,或者是以 live CD (KNOPPIX) 來進入 Linux 系統。之後,將硬碟順利掛載,然後進入 /etc/shadow 這個檔案中,將 root 的密碼這一欄全部清空!然後再登入 Linux 一次,這個時候 root 將不需要密碼 (有的時候需要輸入空白字元) 就可以登入了!這個時候請趕快以 passwd 設定 root 密碼即可。


    關於群組: 有效與初始群組、groups, newgrp
    認識了帳號相關的兩個檔案 /etc/passwd 與 /etc/shadow 之後,您或許還是會覺得奇怪, 那麼群組的設定檔在哪裡?還有,在 /etc/passwd 的第四欄不是所謂的 GID 嗎?那又是啥? 呵呵~此時就需要瞭解 /etc/group 與 /etc/gshadow 囉~
  • /etc/group
    這個檔案就是在記錄 GID 與群組名稱的對應了~我的 /etc/group 內容有點像這樣:
    root:x:0:root
    bin:x:1:root,bin,daemon
    daemon:x:2:root,bin,daemon
    sys:x:3:root,bin,adm
    也是以冒號『:』作為欄位的分隔符號,共分為四欄,每一欄位的意義是:
  • 群組名稱:就是群組名稱啦!
  • 群組密碼:通常不需要設定,因為我們很少使用到群組登入! 不過,同樣的,密碼也是被紀錄在 /etc/gshadow 當中囉!
  • GID:就是群組的 ID 啊~
  • 支援的帳號名稱:加入這個群組裡面的所有的帳號, 我們知道,一個使用者是可以加入多個群組的。舉例來說,如果我想要讓 dmtsai 也加入 root 這個群組,那麼在第一行的最後面加上『,dmtsai』,注意不要有空格, 使成為『 root:x:0:root,dmtsai』就可以囉~比較重要的特色在於第四欄啦,因為每個使用者都可以擁有多個支援的群組, 這就好比在學校唸書的時候,我們可以加入多個社團一樣! ^_^。 不過這裡您或許會覺得奇怪的,那就是:『假如我同時加入多個群組, 那麼我在作業的時候,到底是以那個群組為準?』底下我們就來談一談這個『有效群組』的概念。
  • 有效群組(effective group)與初始群組(initial group)
    還記得每個使用者在他的 /etc/passwd 裡面的第四欄有所謂的 GID 吧?那個 GID 就是所謂的『初始群組 ( initial group ) 』了!也就是說,當使用者一登入系統,立刻就擁有這個群組的相關權限的意思。 舉例來說,我們上面提到 dmtsai 這個使用者的 /etc/passwd 與 /etc/group 還有 /etc/gshadow 相關的內容如下:
    [root@linux ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow
    /etc/passwd:dmtsai:x:501:501::/home/dmtsai:/bin/bash
    /etc/group:users:x:100:dmtsai
    /etc/group:dmtsai:x:501:
    /etc/gshadow:users:::dmtsai
    /etc/gshadow:dmtsai:!::
    仔細看到上面這個表格,在 /etc/passwd 裡面,dmtsai 這個使用者所屬的群組為 GID=501 , 也就是 /etc/group 裡頭 dmtsai 那個群組啦~因為這是 initial group ,所以, 使用者一登入就會主動取得,不需要在 /etc/group 的第四個欄位寫入該帳號的!
    但是非 initial group 的其他群組可就不同了。舉上面這個例子來說,我將 dmtsai 加入 users 這個群組當中,由於 users 這個群組並非是 dmtsai 的初始群組,因此, 我必須要在 /etc/group 這個檔案中,找到 users 那一行,並且將 dmtsai 這個帳號加入第四欄, 這樣 dmtsai 才能夠支援 users 這個群組啊。
    那麼在這個例子當中,因為我的 dmtsai 這個帳號同時支援 dmtsai 與 users 這兩個群組, 因此,在讀取/寫入/執行檔案時,針對群組部分,只要是 users 與 dmtsai 這兩個群組擁有的功能, 我 dmtsai 這個使用者都能夠擁有喔!這樣瞭呼?不過,這是針對已經存在的檔案而言, 如果今天我要建立一個新的檔案或者是新的目錄,請問一下,新檔案的群組是 dmtsai 還是 users ? 呵呵!這就得要檢查一下當時的有效群組了 (effective group)。
    如果我以 dmtsai 這個使用者的身份登入後,該如何知道我所有支援的群組呢? 很簡單啊,直接輸入 groups 就可以了!注意喔,是 groups 有加 s 呢!結果像這樣:
    [dmtsai@linux ~]$ groups
    dmtsai users
    在這個輸出的訊息中,我知道我同時屬於 dmtsai 及 users 這個兩個群組,而且, 第一個輸出的群組即為有效群組 (effective group) 了。 也就是說,我的有效群組為 dmtsai 啦~此時,如果我以 touch 去建立一個新檔,例如: touch test ,那麼這個檔案的擁有者為 dmtsai ,而且群組也是 dmtsai 的啦。 這樣是否可以瞭解什麼是有效群組了?
    那麼如何變更有效群組呢?這個有兩個方法,不論是那個方法,都是以 newgrp 達成的! 以上面這個例子來說,因為我的 dmtsai 使用者同時擁有 dmtsai 與 users 兩個群組,因此, dmtsai 當然可以隨時切換 dmtsai/users 成為有效群組囉。所以,我可以下達:
    [dmtsai@linux ~]$ newgrp users
    [dmtsai@linux ~]$ groups
    users dmtsai
    此時,我的有效群組就成為 users 了。當然,要能夠順利切換有效群組的話,還需要 /etc/gshadow 的輔助才行~這個等一下我們會說明的。好了,那麼如果你開始在 /home/dmtsai 這個家目錄底下嘗試建立一個檔案,例如『 touch test2 』好了,會發生什麼狀態呢? 呵呵!那個檔案的群組竟然變成 users 了!這樣更清楚有效群組的意義了吧?!
    我們額外的來討論一下 newgrp 這個指令,這個指令可以變更目前使用者的有效群組, 而且是另外以一個 shell 來提供登入的喔,所以,以上面的例子來說, dmtsai 這個使用者目前是以另一個 shell 登入的,而且新的 shell 給予 dmtsai 有效 GID 為 users 就是了。當直接執行『 newgrp groupname 』時,使用者的有效群組會成為 groupname , 此時雖然使用者的環境設定(例如環境變數等等其他資料)不會有影響,但是使用者的『權限』將會重新被計算。 舉例來說, dmtsai 此時建立的新檔案群組是 users 了~
    鳥哥的這個例子當中,要注意的是, dmtsai 這個使用者本來就屬於 users 與 dmtsai 這兩個群組, 所以他可以直接使用 newgrp 來切換有效群組,而要離開新的有效群組時,輸入『 exit 』即可。 假設我的 Linux 系統當中還有另一個群組,名稱為 vbird,那麼 dmtsai 是否可以登入 vbird 這個群組? 在某些前提下是可以的:

    • vbird 這個群組在 /etc/gshadow 的密碼欄為合法的(不具有 ! 開頭!);
    • dmtsai 必須讓 root 或群組管理員 (group administrator) 加入到 vbird 群組中。
    這兩個大前提缺一不可喔!好了,假設我已經使用 gpasswd 建立了 vbird 這個群組的密碼, 而 dmtsai 也被加入群組成員當中了,那麼當 dmtsai 輸入 『newgrp vbird』時, 嘿嘿! dmtsai 這個使用者的有效群組就能夠變成 vbird 囉~
  • /etc/gshadow
    剛剛講了很多關於『有效群組』的概念,另外,也提到 newgrp 這個指令的用法, 但是,如果 /etc/gshadow 這個設定沒有搞懂得話,那麼 newgrp 是無法動作的呢! 我的 /etc/gshadow 的內容有點像這樣:
    root:::root
    bin:::root,bin,daemon
    daemon:::root,bin,daemon
    sys:::root,bin,adm
    同樣還是使用冒號『:』來作為欄位的分隔字元,而且你會發現,這個檔案幾乎與 /etc/group 一模一樣啊!是這樣沒錯~不過,要注意的大概就是第二個欄位吧~第二個欄位是密碼欄, 如果密碼欄上面是『!』時,表示該群組不能使用密碼來登入呢! 至於第四個欄位也就是支援的帳號名稱囉~
  • 群組名稱
  • 密碼欄,同樣的,開頭為 ! 表示無法登入;
  • 群組管理員的帳號 (相關資訊在後續介紹)
  • 該群組的所屬帳號 (與 /etc/group 內容相同!)不過,就以系統的操作來說,事實上,這個 /etc/gshadow 的密碼提供,最大的功能是在於『 讓那些不在群組中的成員,臨時加入該群組用的。 』 實際上使用的情況是很少的~而如果真的要操作這樣的環境,那就得要熟悉 newgrp 的用法囉! 而且還要提供某個群組的密碼出來,真是不好管理。所以,若真的想要讓某個使用者利用該群組的功能時, 還是直接將對方加入群組的支援就好了!省得麻煩~

    帳號管理

    好啦!既然要管理帳號,當然是由新增與移除使用者開始的囉~底下我們就分別來談一談如何新增、 移除與更改使用者的相關資訊吧~

    新增與移除使用者: useradd, 相關設定檔, passwd, usermod, userdel

    要如何在 Linux 的系統新增一個使用者啊?呵呵~真是太簡單了~直接利用 useradd 這個指令即可! 他的指令下達方法如下:
  • useradd
    [root@linux ~]# useradd [-u UID] [-g initial_group] [-G other_group] \
    > -[Mm] [-c 說明欄] [-d home] [-s shell] username
    參數:
    -u  :後面接的是 UID ,是一組數字。直接指定一個特定的 UID 給這個帳號;
    -g  :後面接的那個群組名稱就是我們上面提到的 initial group 啦~
          該 group ID (GID) 會被放置到 /etc/passwd 的第四個欄位內。
    -G  :後面接的群組名稱則是這個帳號還可以支援的群組。
          這個參數會修改 /etc/group 內的相關資料喔!
    -M  :強制!不要建立使用者家目錄
    -m  :強制!要建立使用者家目錄!
    -c  :這個就是 /etc/passwd 的第五欄的說明內容啦~可以隨便我們設定的啦~
    -d  :指定某個目錄成為家目錄,而不要使用預設值;
    -r  :建立一個系統的帳號,這個帳號的 UID 會有限制 (/etc/login.defs)
    -s  :後面接一個 shell ,預設是 /bin/bash 的啦~
    範例:
    範例一:完全參考預設值建立一個使用者,名稱為 vbird1
    [root@linux ~]# useradd vbird1
    [root@linux ~]# ls -l /home
    drwxr-xr-x   3 vbird1 vbird1 4096 Aug 30 17:33 vbird1
    [root@linux ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
    /etc/passwd:vbird1:x:502:502::/home/vbird1:/bin/bash
    /etc/shadow:vbird1:!!:13025:0:99999:7:::
    /etc/group:vbird1:x:502:
    # 做這個範例只是想要讓您瞭解,其實系統已經規範好了一些新增使用者時的參數了!
    # 因此,當我們使用 useradd 時,系統會主動的去修改 /etc/passwd 與 /etc/shadow,
    # 而這兩個檔案內的相關欄位參考值,則會以一些設定檔的內容來規範喔!
    # 同時也要注意到,使用 useradd 新增使用者時,這個使用者的 /etc/shadow
    # 密碼欄會是不可登入的 (以 !! 為開頭),因此還需要使用 passwd
    # 來給予 vbird1 密碼後,才算新增完畢!
    範例二:我知道我的系統當中有個群組名稱為 users ,且 UID 700 並不存在,
            請用這兩個參數給予 vbird2 建立一個帳號!
    [root@linux ~]# useradd -u 700 -g users vbird2
    [root@linux ~]# ls -l /home
    drwxr-xr-x   3 vbird2 users  4096 Aug 30 17:43 vbird2
    [root@linux ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
    /etc/passwd:vbird2:x:700:100::/home/vbird2:/bin/bash
    /etc/shadow:vbird2:!!:13025:0:99999:7:::
    # 看一下,UID 與 initial group 確實改變成我們需要的了!
    範例三:建立一個系統帳號,名稱為 vbird3
    [root@linux ~]# usradd -r vbird3
    [root@linux ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
    /etc/passwd:vbird3:x:101:102::/home/vbird3:/bin/bash
    /etc/shadow:vbird3:!!:13025::::::
    /etc/group:vbird3:x:102:
    # 很重要喔!您會發現, UID 竟然是 101 ,而 GID 怎麼會是 102,
    # 並且與 /etc/group 有對應的關係喔!有沒有加 -r 差很多ㄟ!
    我的天吶!這個指令更動的檔案怎麼怎麼多啊?對啊!你才知道啊~ 這也是為啥我們說帳號管理是很複雜的啦~而且他參考的設定檔才更多哩! 這個指令至少可能會更動到的地方有:

    • /etc/passwd
    • /etc/shadow
    • /etc/group
    • /etc/gshadow
    • /home/username
    那請教一下,您有沒有想過,以上述的第一個範例一好了,為何 useradd vbird1 他會主動在 /home/vbird1 建立起使用者的家目錄?家目錄內有什麼資料且來自哪裡? 為何預設使用的是 /bin/bash 這個 shell ?呵呵!這就得要說明一下 useradd 所使用的參考檔案囉!
  • 相關設定檔
    我們使用 useradd 去新增使用者時,一些在 /etc/passwd 當中的值會去參考『 /etc/default/useradd 』 ,這個檔案的內容有點像這樣:
    GROUP=100               
    HOME=/home               
    INACTIVE=-1               
    EXPIRE=                       
    SHELL=/bin/bash               
    SKEL=/etc/skel               
    關於群組的建立機制:
    當我們直接使用 useradd 來新增帳號時,在預設的情況下,相關的資訊都是參考 /etc/default/useradd 這個檔案內容的設定的。不過,對於使用者群組的建立機制中, 則有兩種不一樣的機制存在的:

    • 以 FC4 為代表,新建使用者時,若無指定 initial group , 則系統會主動建立一個與帳號相同的群組名稱,以該群組作為使用者的 initial group;
    • 以 SuSE 9 為代表,新建使用者時,預設不會建立新群組,而以 /etc/default/useradd 內的 GROUP 設定值作為使用者的 initial group 。
    這應該是很容易理解才是~如果看不懂,請回去前一小節查閱一下 /etc/passwd, /etc/shadow 的相關內容架構。
    關於使用者家目錄的參考:/etc/skel/*
    在這個檔案當中,比較奇怪的是 SKEL 這個玩意兒了,他是啥? 其實,這個咚咚就是使用者家目錄的參考目錄囉~舉我們的範例一為例,我利用 useradd vbird1 時,他在 /home/vbird1 這個使用者家目錄內的各項資料,都是由 /etc/skel 所複製過去的~所以呢,未來如果我想要讓新增使用者時,該使用者的環境變數 ~/.bashrc 就設定妥當的話,您可以到 /etc/skel/.bashrc 去編輯一下,也可以建立 /etc/skel/public_html 這個目錄,那麼未來新增使用者後,在他的家目錄下就會有 public_html 那個目錄了!這樣瞭呼?
    關於使用者 UID/GID 的設定:
    另外,與密碼還有 UID/GID 有關的設定檔則是在 /etc/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_MAX       60000       
    GID_MIN         500       
    GID_MAX       60000       
    CREATE_HOME     yes       
    看到這個檔案後,您應該曉得的是,為何新建的使用者的 UID 都會大於 500 了吧? 而且某些版本的 distributions (例如 SuSE server 9) 則是將 UID_MIN 設定為 1000 , 所以,他的一般身份使用者的 UID 就會從 1000 起跳囉~這樣瞭解嗎?!
    那如果我現在新增一個使用者,這個使用者的 UID 會是多少?答案是:『 如果 /etc/passwd 裡面的帳號所屬的 UID 沒有大於 /etc/login.defs 裡頭的 UID_MIN (在本例中是 500)時,則以 UID 500 來作為一個新帳號的 UID。 如果 /etc/passwd 已有大於 500 以上的 UID 時,則取 /etc/passwd 內最大的那個 UID + 1 作為新設帳號的 UID。』而如果我是想要建立系統用的帳號,所以使用 useradd -r sysaccount 這個 -r 的參數時,就會找『比 500 小的最大的那個 UID + 1 』就是了。 ^_^
    關於家目錄預設是否建立:
    另外也要注意那個 CREATE_HOME 的設定值,這個設定值也很重要。一般來說,在 FC4 的環境下, 我們使用 useradd useraccount 時,預設是會主動的建立家目錄的,除非使用 -M 這個參數~ 至於 SuSE server 9 這個版本來說,嘿嘿!他預設是不建立家目錄的,除非使用 -m 這個參數呢! 因此,在這裡鳥哥也要建議您,如果肯定要建立家目錄的話,不論在那個版本, 你最好還是加上 -m 這個參數來強制建立家目錄吧! ^_^
    那麼您就能知道囉, useradd 這支程式在建立 Linux 上的帳號時,至少會參考:

    • /etc/default/useradd
    • /etc/login.defs
    • /etc/skel/*
    這些檔案,不過,最重要的其實是建立 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 還有使用者家目錄就是了~所以,如果您瞭解整個系統運作的狀態, 也是可以手動直接修改這幾個檔案就是了。
  • passwd
    剛剛我們講到了,使用 useradd 建立了帳號之後,在預設的情況下,該帳號是暫時被封鎖的, 也就是說,該帳號是無法登入的,你可以去瞧一瞧 /etc/shadow 內的第二個欄位就曉得囉~ 那該如何是好?怕什麼?直接給他設定新密碼就好了嘛!對吧~設定密碼就使用 passwd 囉!
    [root@linux ~]# passwd [useraccount]
    範例一:如果 root 要幫 dmtsai 修改密碼時?
    [root@linux ~]# passwd dmtsai
    Changing password for user dmtsai.
    New UNIX password:  
    BAD PASSWORD: it is based on a dictionary word  
    Retype new UNIX password:  
    passwd: all authentication tokens updated successfully.  
    範例二: dmtsai 這個使用者想要修改自己的密碼時
    [dmtsai@linux ~]$ passwd
    Changing password for user dmtsai.
    Changing password for dmtsai
    (current) UNIX password:
    New password:
    BAD PASSWORD: it is based on your username
    New password:
    BAD PASSWORD: it is based on your username
    New password:
    BAD PASSWORD: it is based on a dictionary word
    passwd: Authentication token manipulation error
    先來談一談上面的兩個範例。要注意的是, passwd 這個指令由於使用者的身份而有兩種用法, 如果是 root ,由於 root 具有至高無上的權力,所以 root 可以利用 passwd [username] 來幫使用者修改他們的密碼!因此,『如果使用者的密碼不見了, root 是可以幫他們進行密碼的修改,而不需要知道舊密碼。』另外,也只有 root 可以隨便設定密碼,即使該密碼並不符合系統的密碼驗證要求~ @_@。例如上面的範例一, 我幫 dmtsai 建立的密碼太簡單,所以其實系統是『警告』過 root 的。 但在重複輸入兩次密碼後,嘿嘿!您還是會看到 successfully 這個成功的字樣呢!
    那麼如果是一般身份使用者,或者是 root 想要修改自己的密碼時,直接輸入『 passwd 』, 就能夠修改自己的密碼了。一般身份使用者輸入的密碼會經過系統的驗證, 驗證的機制除了 /etc/login.defs 裡頭規定的最小密碼字元數之外,還會受到 /etc/pam.d/passwd 這個 PAM 模組的檢驗呢!一般來說,您輸入的密碼最好要符合底下的要求:

    • 密碼不能與帳號相同;
    • 密碼盡量不要選用字典裡面會出現的字串;
    • 密碼需要超過 8 個字元;
    如果無法經過驗證,那麼該密碼就不被接受,當然還是只能使用舊密碼囉! 此外,僅能接受三次密碼輸入,如果輸入的密碼都不被接受,那只好....重新執行一次 passwd 啊!而, 經過這個 passwd [username] 的動作後,您的帳號就會有密碼囉,此時, 如果察看一下 /etc/shadow ,你就會知道密碼內容被改過囉~ ^_^
  • usermod
    所謂這『人有失手,馬有亂蹄』,您說是吧?所以囉,當然有的時候會『不小心』在 useradd 的時候加入了錯誤的設定資料。或者是,在使用 useradd 後,發現某些地方還可以進行細部修改。 此時,當然我們可以直接到 /etc/passwd 或 /etc/shadow 去修改相對應欄位的資料, 不過,Linux 也有提供相關的指令讓大家來進行帳號相關資料的微調呢~那就是 usermod 囉~
    [root@linux ~]# usermod [-cdegGlsuLU] username
    參數:
    -c  :後面接帳號的說明,即 /etc/passwd 第五欄的說明欄,可以加入一些帳號的說明。
    -d  :後面接帳號的家目錄,即修改 /etc/passwd 的第六欄;
    -e  :後面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 內的第八個欄位資料啦!
    -g  :後面接 group name,修改 /etc/passwd 的第四個欄位,亦即是 GID 的欄位!
    -G  :後面接 group name,修改這個使用者能夠支援的群組,修改的是 /etc/group 囉~
    -l  :後面接帳號名稱。亦即是修改帳號名稱, /etc/passwd 的第一欄!
    -s  :後面接 Shell 的實際檔案,例如 /bin/bash 或 /bin/csh 等等。
    -u  :後面接 UID 數字啦!即 /etc/passwd 第三欄的資料;
    -L  :暫時將使用者的密碼凍結,讓他無法登入。其實僅改 /etc/shadow 的密碼欄。
    -U  :將 /etc/shadow 密碼欄的 ! 拿掉,解凍啦!
    範例:
    範例一:修改使用者 dmtsai 的說明欄,加上『VBird's test』的說明。
    [root@linux ~]# usermod -c "VBird's test" dmtsai
    [root@linux ~]# grep dmtsai /etc/passwd
    dmtsai:x:501:501:VBird's test:/home/dmtsai:/bin/bash
    範例二:使用者 dmtsai 密碼在 2006/01/01 失效。
    [root@linux ~]# usermod -e "2006-01-01" dmtsai
    [root@linux ~]# grep dmtsai /etc/shadow
    dmtsai:$1$24ISJM4K$bbdijdreoieaVaBMAHsm6.:13026:0:99999:7::13149:
    範例三:暫時凍結 dmtsai 的密碼!
    [root@linux ~]# usermod -L dmtsai
    [root@linux ~]# grep dmtsai /etc/shadow
    dmtsai:!$1$24ISJM4K$bbdijdreoieaVaBMAHsm6.:13026:0:99999:7::13149:
    # 注意到,密碼欄(第二欄)多了一個 ! 號!那個驚嘆號會讓密碼無效喔!
    [root@linux ~]# usermod -U dmtsai  
    範例四:萬一 dmtsai 這個傢伙被建立時忘記建立家目錄,該如何是好?
    [root@linux ~]# usermod -d /home/dmtsai2 -m dmtsai
    # 如果僅是 -d /home/dmtsai2 表示僅修改 /etc/passwd 第六欄的內容而已,
    # 如果加上 -m 這個參數,則表示新建一個家目錄的意思!
    # 另外,如果原本的家目錄是 /home/dmtsai ,那 -d /home/dmtsai2 -m
    # 會將原本的 /home/dmtsai 更名為 /home/dmtsai2 喔!
    usermod 是系統管理員 root 用來管理帳號身份的相關資料的,不過,這個 usermod 程式的功能其實也被很多其他的指令所取代喔!例如 chfn 與 chsh 等等的~ 不過,無論如何,您還是可以用 usermod 來微調使用者帳號的相關資料啦!
  • userdel
    這個功能就太簡單了~目的在刪除使用者啦~與他相關的檔案有:

    • /etc/passwd
    • /etc/shadow
    • /home/username
    整個指令的語法是:
    [root@linux ~]# userdel [-r] username
    參數:
    -r  :連同使用者的家目錄也一起刪除
    範例:
    範例一:刪除 vbird2 ,連同家目錄一起刪除
    [root@linux ~]# userdel -r vbird2
    這個指令下達的時候要小心了!通常我們要移除一個帳號的時候,你可以手動的將 /etc/passwd 與 /etc/shadow 裡頭的該帳號取消即可!一般而言,如果該帳號只是『 暫時不啟用』的話,那麼將 /etc/shadow 裡頭最後倒數一個欄位設定為 0 就可以讓該帳號無法使用,但是所有跟該帳號相關的資料都會留下來! 使用 userdel 的時機通常是『 你真的確定不要讓該用戶在主機上面使用任何資料了!』
    另外,其實使用者如果在系統上面操作過一陣子了,那麼該使用者其實在系統內可能會含有其他檔案的。 舉例來說,他的郵件信箱 (mail box) 或者是例行性命令 (crontab) 之類的檔案。 所以,如果想要完整的將某個帳號完整的移除,最好可以在下達 userdel -r username 之前, 先以『 find / -user username 』查出整個系統內屬於 username 的檔案, 然後再加以刪除吧!

    使用者功能:chfn, chsh

    不論是 useradd/usermod/userdel ,都是系統管理員所能夠使用的指令, 如果我是一般身份使用者,那麼我是否除了密碼之外,就無法更改其他的資料呢? 當然不是啦!這裡我們介紹兩個一般身份使用者常用的帳號資料變更指令囉!
  • chsh
    [dmtsai@linux ~]$ chsh [-ls]
    參數:
    -l  :列出目前系統上面可用的 shell ,其實就是 /etc/shells 的內容!
    -s  :設定修改自己的 Shell 囉
    範例:
    範例一:列出目前系統上面所以的 shell ,並且指定 csh 為自己的 shell
    [dmtsai@linux ~]$ chsh -l
    /bin/sh
    /bin/bash
    /sbin/nologin
    /bin/ksh
    /bin/tcsh
    /bin/csh
    /bin/zsh
    [dmtsai@linux ~]$ chsh -s /bin/csh; grep dmtsai /etc/passwd
    Password:  
    Shell changed.
    dmtsai:x:501:501::/home/dmtsai:/bin/csh
    這個指令重點就是在更改使用者的 shell 囉~如上所述,我就可以修訂好 dmtsai 的 shell 啦!
  • chfn
    [root@linux ~]# chfn [-foph]
    參數:
    -f  :後面接完整的大名;
    -o  :您辦公室的房間號碼;
    -p  :辦公室的電話號碼;
    -h  :家裡的電話號碼!
    範例:
    範例一:我用 dmtsai 這個使用者來更改一下自己的相關資訊!
    [dmtsai@linux ~]$ chfn
    Changing finger information for dmtsai.
    Password:
    Name []: VBird' Test account
    Office []: Tainan office 1
    Office Phone []: 06-1234567
    Home Phone []: 06-7654321
    Finger information changed.
    [dmtsai@linux ~]$ grep dmtsai /etc/passwd
    dmtsai:x:501:501:VBird' Test account,Tainan office 1,06-1234567,06-7654321:
    /home/dmtsai:/bin/bash
    這個指令說實在的,除非是你的主機有很多的用戶,否則倒真是用不著這個程式!這就有點像是 bbs 裡頭更改你『個人屬性』的那一個資料啦!這個程式主要都是搭配 finger 這支程式在運作的!不過,由於 finger 這支程式不是很安全,所以預設是沒有安裝他的! 如果您想要玩一下 finger 的話,那麼請先參考 RPM 套件安裝內容後,在安裝 finger 的 RPM 檔案,然後再來玩吧!底下這裡鳥哥還是先簡單的介紹一下就好了!
    使用 chfn 這個指令之後,程式會要求您輸入許多的資訊,包含了:

    • 密碼
    • 暱稱
    • 辦公室號碼
    • 辦公室電話
    • 家裡電話
    不過,這些資訊其實更改的都是原本的 /etc/passwd 裡面的第五欄說明資料啦! 每個資訊中間都以逗號『,』分隔開來而已。如上所示, dmtsai 的說明欄救被更動過囉! ^_^
  • finger
    finger 的中文字面意義是:『手指』,嘿嘿!這個 finger 可以查閱的資料可就多了! 剛剛我們不是使用 chfn 來修改 dmtsai 這個使用者的相關資訊嗎?那些個相關資訊就可以利用 finger 來查閱出來的!他的查詢方法如下:
    [root@linux ~]# finger [-s] username
    參數:
    -s  :使用長串資料輸出格式。
    範例:
    範例一:將剛剛 dmtsai 建立的一些使用者資訊呼叫出來視察!
    [root@linux ~]# finger dmtsai
    Login: dmtsai                           Name: VBird's Test account
    Directory: /home/dmtsai                 Shell: /bin/bash
    Office: Tainan office 1, 06-1234567     Home Phone: 06-7654321
    Last login Tue Aug 30 15:01 (CST) on tty1 from localhost
    No mail.
    No Plan.
    有趣吧!這個 finger 還可以用來查詢別部主機的帳號呢!不過,目前通常用在本機帳號的查詢。 因為 finger 算是比較危險的指令,所以,有些 linux distributions 預設是不安裝他的, 不過,如果您按照鳥哥說明的方式來完整安裝 FC4 的話,那就沒有問題的啦!可以操作的。
    不過,你或許會覺得有趣的是,怎麼 finger 的結果最底下顯示『No mail. No Plan.』呢? 呵呵! finger 會主動去 /var/spool/mail 查詢看看有沒有該帳號的郵件信箱 (mailbox), 而且還會去查詢 ~/.plan 那個檔案,那就是計畫檔啦~比如說,我在 dmtsai 家目錄底下建立 .plan 這個檔案,他的內容是『DmTsai will write something....』,結果使用 finger 時, 嘿嘿!您可以自行看看結果會怎樣啊! ^_^
  • id
    id 這個指令則可以查詢某人或自己的相關 UID/GID 等等的資訊,他的參數也不少,不過, 都不需要記~反正使用 id 就全部都列出囉~ ^_^
    [root@linux ~]# id [username]
    範例一:查閱自己的相關資訊!
    [root@linux ~]# id
    uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),10(wheel)
    範例二:查閱一下 dmtsai 吧~
    [root@linux ~]# id dmtsai
    uid=501(dmtsai) gid=501(dmtsai) groups=501(dmtsai),100(users)
    再次強調一下,那個 groups 指的是目前該使用者所屬的所有群組,但是您必須要瞭解什麼是『 初始群組與有效群組 』的差異喔!

    新增與移除群組

    OK!瞭解了帳號的新增、刪除、更動與查詢後,再來我們可以聊一聊群組的相關內容了。 基本上,群組的內容都與這兩個檔案有關:

    • /etc/group
    • /etc/gshadow
    群組的內容其實很簡單,都是上面兩個檔案的新增、修改與移除而已, 不過,如果再加上有效群組的概念,那麼 newgrp 與 gpasswd 則不可不知呢!
  • groupadd
    [root@linux ~]# groupadd [-g gid] [-r]
    參數:
    -g  :後面接某個特定的 GID ,用來直接給予某個 GID ~
    -r  :建立系統群組啦!與 /etc/login.defs 內的 GID_MIN 有關。
    範例:
    範例一:新建一個群組,名稱為 group1
    [root@linux ~]# groupadd group1
    [root@linux ~]# grep group1 /etc/group /etc/gshadow
    /etc/group:group1:x:502:
    /etc/gshadow:group1:!::
    # 注意注意!在 /etc/gshadow 裡面可以發現,密碼是不許登入的喔!
    範例二:新建一個系統群組,名稱為 group2
    [root@linux ~]# groupadd -r group2
    [root@linux ~]# grep group2 /etc/group /etc/gshadow
    /etc/group:group2:x:101:
    /etc/gshadow:group2:!::
    瞭解 -r 有沒有的差異了嗎?!是的~結果會跟 /etc/login.defs 裡面的設定有關喔! 而且以 groupadd 新增的帳號,預設都不能使用密碼的方式登入的~ 也就是說,預設是私有群組,並無法使用 newgrp 來登入的呢!
  • groupmod
    跟 usermod 類似的,這個指令僅是在進行 group 相關參數的修改而已。
    [root@linux ~]# groupmod [-g gid] [-n group_name]
    參數:
    -g  :修改既有的 GID 數字;
    -n  :修改既有的群組名稱
    範例:
    範例一:將剛剛上個指令建立的 group2 名稱改為 groupname , GID 為 103
    [root@linux ~]# groupmod -g 103 -n groupname group2
    [root@linux ~]# grep groupname /etc/group /etc/gshadow
    /etc/group:groupname:x:103:
    /etc/gshadow:groupname:!::
    不過,還是那句老話,不要隨意的更動 GID ,容易造成系統資源的錯亂喔!
  • groupdel
    呼呼! groupdel 自然就是在刪除群組的囉~用法很簡單:
    [root@linux ~]# groupdel [groupname]
    範例一:將剛剛的 groupname 刪除!
    [root@linux ~]# groupdel groupname
    範例二:若要刪除 dmtsai 這個群組的話??
    [root@linux ~]# groupdel dmtsai
    groupdel: cannot remove user's primary group.
    為什麼 groupname 可以刪除,但是 dmtsai 就不能刪除呢?原因很簡單, 『有某個帳號 (/etc/passwd) 的 initial group 使用該群組!』 如果查閱一下,你會發現在 /etc/passwd 內的 dmtsai 第四欄的 GID 就是 /etc/group 內的 dmtsai 那個群組的 GID ,所以囉,當然無法刪除~否則 dmtsai 這個使用者登入系統後, 就會找不到 GID ,那可是會造成很大的困擾的!那麼如果要刪除 dmtsai 這個群組呢? 你『必須要確認 /etc/passwd 內的帳號沒有任何人使用該群組作為 initial group 』才行喔!所以,你可以:

    • 修改 dmtsai 的 GID ,或者是:
    • 刪除 dmtsai 這個使用者。

  • gpasswd
    除了設定群組之外,我們還可以針對系統上面有的群組進行一些『密碼』的給予喔! 這個密碼給予之後,該群組就能夠讓某些人登入成為有效群組呢!挺有趣的。 另外,如果系統管理員太忙了,無法針對每個群組來管理,那麼『 系統管理員還可以將某位使用者設定成為該群組的團長喔!』 很有趣吧~雖然目前比較少人這麼玩了,不過,鳥哥在這裡還是跟大家介紹介紹吧!
    關於系統管理員(root)做的動作:
    [root@linux ~]# gpasswd groupname
    [root@linux ~]# gpasswd [-A user1,...] [-M user3,user4...] groupname
    [root@linux ~]# gpasswd [-rR] groupname
    參數:
        :若沒有任何參數時,表示給予 groupname 一個密碼(/etc/gshadow)
    -A  :將 groupname 的主控權交由後面的使用者管理(該群組的管理員)
    -M  :將某些帳號加入這個群組當中!
    -r  :將 groupname 的密碼移除
    -R  :讓 groupname 的密碼欄失效,所以 newgrp 就不能使用了!
    關於群組管理員(Group administrator)做的動作:
    [someone@linux ~]$ gpasswd [-ad] user groupname
    參數:
    -a  :將某位使用者加入到 groupname 這個群組當中!
    -d  :將某位使用者移除出 groupname 這個群組當中。
    範例一:建立一個新群組,名稱為 testgroup 且群組交由 dmtsai 管理:
    [root@linux ~]# groupadd testgroup
    [root@linux ~]# gpasswd testgroup
    Changing the password for group testgroup
    New Password:
    Re-enter new password:
    # 輸入兩次密碼就對了!
    [root@linux ~]# gpasswd -A dmtsai -M dmtsai,vbird testgroup
    [root@linux ~]# grep testgroup /etc/group /etc/gshadow
    /etc/group:testgroup:x:502:dmtsai,vbird
    /etc/gshadow:testgroup:1CEVbrcjxO6Ps:dmtsai:dmtsai,vbird
    # 很有趣吧!此時 dmtsai 則擁有 testgroup 的主控權喔!若以我們討論區 (
    #
    http://phorum.vbird.org
    的概念來說,群組管理員有點像『版主』啦!
    範例二:以 dmtsai 登入系統,並且讓他加入 vbird1 成為 testgroup 成員之一:
    [dmtsai@linux ~]$ gpasswd -a vbird1 testgroup
    Adding user vbird1 to group testgroup
    很有趣的一個小實驗吧!我們可以讓 testgroup 成為一個可以公開的群組, 然後建立起群組管理員,群組管理員可以有多個。在這個案例中, 我將他設定為 dmtsai ,所以, dmtsai 就可以自行增加群組成員囉~ 呼呼!然後,該群組成員就能夠使用 newgrp 囉~
  • newgrp
    還有印象嗎?我們前面談到 /etc/gshadow 時就提過這個指令了! 『newgrp 會額外以另一個 login 來提供使用者登入到另一個 shell 中, 並且將有效群組改為 newgrp 後面接的那個群組,若沒有接群組,則預設群組為 initial group

    密碼管理: passwd

    再來跟大家提一提那個重要的密碼概念!您得要特別留意的是,今天,您的主機若是遭到入侵, 對方的第一個入侵點自然就是您主機上面帳號的『密碼』了,所以, 如果您的密碼定義的比較嚴格的話,那麼自然對方就不容易猜到你的密碼,自然就會比較有保障啦!
    目前一些 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 談一下 passwd 還有什麼好功能??
  • passwd
    [root@linux ~]# passwd [-lunxwS] username
    參數:
    -l  :將 username 這個帳號的密碼鎖住 (lock),在 /etc/shadow 內的密碼欄修訂~
    -u  :將 -l 的 lock 解開!
    -n  :後面接天數 (數字) ,最短天數;亦即是 /etc/shadow 內的第四欄;
    -x  :後面接天數 (數字) ,最長天數;亦即是 /etc/shadow 內的第五欄;
    -w  :後面接天數 (數字) ,警告天數;亦即是 /etc/shadow 內的第六欄;
    -S  :顯示目前這個 username 的相關資訊。
    範例:
    範例一:將 dmtsai 這個使用者的密碼凍結,並觀察他!
    [root@linux ~]# passwd -l dmtsai
    Locking password for user dmtsai.
    passwd: Success
    [root@linux ~]# passwd -S dmtsai
    Password locked.
    [root@linux ~]# grep dmtsai /etc/shadow
    dmtsai:!!$1$TDy6D7eg$jVJV/FMaQn14v5Kl7sqw6/:13026:0:99999:7::13149:
    範例二:將上述密碼凍結解開
    [root@linux ~]# passwd -u dmtsai
    其實這個 passwd 指令還挺多用的~尤其很多功能僅有 root 才能執行。 您可以使用 passwd -l 及 passwd -u 來強制讓一個使用者『暫時』無法使用該帳號, 很方便的啦! ^_^



    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20647/showart_396888.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP