Linux账号与群组系统介绍
一、使用者辨別碼:UID與GID
雖然我們使用賬號(一個(gè)字符串)登入Linux主機(jī),但是Linux主機(jī)并不會(huì)直接識(shí)別我們的賬號,而是識(shí)別ID(一組數(shù)字)。賬號僅僅是為了讓我們方便記憶,賬號與對應(yīng)的ID存儲(chǔ)在/etc/passwd文件中。
在Linux系統(tǒng)中,每個(gè)登陸的使用者至少會(huì)取得兩個(gè)ID,一個(gè)是使用者ID(UserID,簡稱UID),而另一個(gè)是群組ID(Group ID,簡稱GID)。每個(gè)Linux文件也具有擁有人和擁有群組這兩個(gè)屬性,這利用的就是UID和GID。當(dāng)我們有要顯示文件屬性的需求時(shí),系統(tǒng)會(huì)依據(jù)/etc/passwd與/etc/group的內(nèi)容,找到UID/GID對應(yīng)的賬號與群組名,然后顯示出來。
二、使用者賬號
當(dāng)Linux系統(tǒng)的使用者要登入主機(jī)以取得shell的環(huán)境來工作時(shí),他首先要通過某個(gè)登陸界面輸入賬號密碼(本地的Linux主機(jī)一般會(huì)提供一個(gè)login界面,而遠(yuǎn)程主機(jī)可以使用ssh進(jìn)行連接)。輸入了賬號密碼后,系統(tǒng)會(huì)進(jìn)行如下的操作:
由上面的流程我們可以知道,如果我們要登入Linux主機(jī),/etc/passwd和/etc/shadow這兩個(gè)文件就必須要讓系統(tǒng)讀取(這是很多攻擊者將特殊賬號寫到/etc/passwd里面的原因)。這兩個(gè)文件都是和使用者賬號有關(guān),且非常重要。/etc/passwd用來管理使用者UID/GID重要參數(shù),/etc/shadow用來管理賬號密碼資料。接下來簡單的介紹這兩個(gè)文件:
2.1 /etc/passwd文件
這個(gè)文件的構(gòu)造如下:每一行都代表一個(gè)賬號,有幾行就代表有幾個(gè)賬號在我們的系統(tǒng)中。不過需要特別留意的是,里面很多賬號是系統(tǒng)正常運(yùn)作所需要的,我們可以稱這些賬號為系統(tǒng)賬號,例如bin、daemon、adm和nobody等等,這個(gè)文件的內(nèi)容如下:
以輸出內(nèi)容的第一行(也就是root這行)為例進(jìn)行解釋,可以看到,每一行使用:分開,總共有七個(gè)部分,分別是:
| id范圍 | 該ID使用者特性 |
| 0(系統(tǒng)管理員) | 當(dāng)UID為0時(shí),代表這個(gè)賬號是系統(tǒng)管理員。所以當(dāng)我們要讓其他的賬號名稱也具有root的權(quán)限時(shí),將該賬號的UID改為0即可。這也就是說,一個(gè)系統(tǒng)上面的管理員并不是只有root。但是,我們并不建議有多個(gè)賬號的UID為0,這樣容易讓系統(tǒng)管理員混亂 |
| 1-999(系統(tǒng)賬號) | 保留給系統(tǒng)使用的ID,除了0之外,其他的UID權(quán)限與特性都是相同的,預(yù)設(shè)1000以下的數(shù)字讓給系統(tǒng)作為保留賬號只是一種習(xí)慣。 由于系統(tǒng)上面啟動(dòng)的網(wǎng)絡(luò)服務(wù)或背景服務(wù)希望使用較小的權(quán)限去運(yùn)作,所以系統(tǒng)不希望使用root的身份去執(zhí)行這些服務(wù),因此我們就需要這些權(quán)限較小的賬號。這些系統(tǒng)賬號通常是不可登陸的,所以會(huì)有/bin/nologin這個(gè)特殊的shell存在 根據(jù)系統(tǒng)賬號的由來,可以將它們分為兩類: 1~200:由distributions自行建立的系統(tǒng)賬號 201~999:若使用者有系統(tǒng)賬號需求時(shí),可以使用的賬號UID |
| 1000~60000(可登入賬號) | 給一般使用者使用的,事實(shí)上,目前的Linux核心已經(jīng)可以支持到2^32-1這么大的UID號碼了 |
2.2 /etc/shadow文件
我們知道很多程序的運(yùn)行都與權(quán)限有關(guān),而權(quán)限與UID/GID有關(guān)。因此各個(gè)程序需要讀取/etc/passwd來了解不同賬號的權(quán)限。因此/etc/passwd的權(quán)限需要設(shè)定為-rw-r--r--,雖然早期的密碼也有加密,但是這個(gè)密碼放在了/etc/passwd的第二部分。這樣一來很容易被竊取,加密過的密碼也能夠通過暴力破解法來找出來。
因?yàn)檫@樣的關(guān)系,后來發(fā)展出將密碼移動(dòng)到/etc/shadow這個(gè)文件里面的技術(shù),而且/etc/shadow里面還有很多的密碼限制參數(shù)。首先我們了解下/etc/shadow文件的結(jié)構(gòu):
可以看到/etc/shadow同樣以:作為分隔符,仔細(xì)數(shù)可以發(fā)現(xiàn)共有九個(gè)部分,這九個(gè)部分的用途是這樣的:
另外,由于各種密碼編碼的技術(shù)不一樣,因此不同的編碼系統(tǒng)會(huì)造成這個(gè)部分的長度不相同,舉例來說,舊式的DES,MD5編碼系統(tǒng)產(chǎn)生的密碼長度就與目前使用的SHA不同,SHA的密碼長度明顯比較長,由于固定的編碼系統(tǒng)產(chǎn)生的密碼長度必須一致,因此,當(dāng)我們讓這個(gè)部分的長度改變后,該密碼就會(huì)失效(算不出來)。很多軟件通過這個(gè)功能,在這個(gè)欄位前加上!或*改變密碼部分長度,就會(huì)使密碼暫時(shí)失效了
這個(gè)部分的用處就是,在密碼過期幾天后,如果使用者還是沒有登陸更改密碼,那么這個(gè)賬號的密碼將會(huì)“失效”,亦即該賬號再也無法使用這個(gè)密碼登陸了。要注意密碼過期與密碼失效是不同的
舉個(gè)例子來說明,假如dmtsai這個(gè)使用者的密碼欄如下所示:
dmtsai:$6$M4IphgNP2TmlXaSS$B418YFroYxxmm....:16559:5:60:7:5:16679:注意16659代表2015/05/04,所以dmtsai這個(gè)使用者的相關(guān)信息意義是:
- 由于密碼幾乎僅僅能單向運(yùn)算(由明碼計(jì)算成為密碼,無法由密碼反推回明碼),因此由上表的信息我們幾乎無法得知dmtsai的實(shí)際密碼
- 這個(gè)賬號最近一次更改密碼的日期是2015/05/04(16559)
- 能夠再次修改密碼的時(shí)間是5天后,也就是2015/05/09以前dmtsai不能修改自己的密碼;如果使用者還是嘗試要更改自己的密碼,系統(tǒng)就會(huì)出現(xiàn)這樣的信息:
You must wait longer to change your password
passwd: Authentication token manipulation error - 密碼過期日期設(shè)定為60天后,亦即2015/07/03。這表示使用者必須要在2015/05/09(前五天不能修改)到2015/07/03之間的60天內(nèi)去修改自己的密碼,若2015/07/03之后還是沒有更改密碼,那么這個(gè)密碼就過期了
- 警告日期設(shè)定為7天,即密碼過期日前的7天,在本例中代表2015/06/26~2015/07/03這七天。如果使用者一直沒有更改密碼,那么在這七天中,只要dmtsai登入系統(tǒng)就會(huì)出現(xiàn)如下的信息:
Warning: your password will expire in 5 days - 如果該賬號一直到2015/07/03都沒有更改密碼,那么密碼就過期了。但是由于有五天的寬限天數(shù),因此dmtsai在2015/07/08前都還可以使用舊密碼登陸主機(jī)。不過登陸的時(shí)候會(huì)出現(xiàn)強(qiáng)制更改密碼的情況,輸出類似如下信息:
You are required to change your password immediately (password aged)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user dmtsai.
Changing password for dmtsai
(current) UNIX password:
我們必須要輸入一次舊密碼及兩次新密碼后,才能夠開始使用系統(tǒng)的各項(xiàng)資源。如果我們在2015/07/08以后嘗試以dmtsai登陸的話,那么就會(huì)出現(xiàn)如下的錯(cuò)誤信息并且無法登陸,因此此時(shí)我們的密碼已經(jīng)完全失效:
Your account has expired; please contact your system administrator - 如果使用者在2015/07/03以前變更過密碼,那么第三部分的那個(gè)16559的天數(shù)就會(huì)跟著改變,因此,所有的限制日期也會(huì)跟著相對變動(dòng)
- 無論使用者如何操作,到了16679(大約是2015/09/01左右)賬號就失效了
三、有效與初始群組、groups、newgrp
3.1 /etc/group:
這個(gè)文件記錄了GID與群組名稱的對應(yīng),測試輸出如下:
這個(gè)文件的每一行都代表一個(gè)群組,同樣以:作為每部分的分隔符,一共分為四部分:
我們可以使用一個(gè)簡單的圖示來了解下UID/GID與密碼之間的關(guān)系:
可以看到重點(diǎn)是/etc/passwd,其他相關(guān)的信息都是根據(jù)這個(gè)文件去尋找的。下圖中,root的UID為0,而GID也是0,去找/etc/group就可以知道GID為0時(shí)的群組名稱就是root。至于密碼的尋找,Linux會(huì)找到/etc/shadow與/etc/passwd里面同賬號名稱的那一行,就是密碼相關(guān)數(shù)據(jù)。
在/etc/group里面比較重要的是第四部分,每個(gè)使用者都可以擁有多個(gè)支持的群組,這就好比我們在學(xué)??梢约尤攵鄠€(gè)社團(tuán)。但這樣有一個(gè)問題:假如我們同時(shí)加入多個(gè)群組,那么我們在進(jìn)行工作時(shí),到底是以哪個(gè)群組為準(zhǔn)?接下來我們介紹下有效群組的概念。
3.2 初始群組(initial group)
每個(gè)使用者在他的/etc/passwd里面的第四部分存儲(chǔ)GID,這個(gè)GID指代初始群組,也就說,當(dāng)使用者一登入系統(tǒng),就立刻擁有這個(gè)群組的相關(guān)權(quán)限(需要注意一點(diǎn),初始群組的用戶不會(huì)寫在/etc/group的第四部分里面)。舉例來說,dmtsai這個(gè)使用者的/etc/passwd與/etc/group還有/etc/gshadow相關(guān)的內(nèi)容如下:
[root@study ~]# usermod -a -G users dmtsai <==先設(shè)定好次要群組 [root@study ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow /etc/passwd:dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash /etc/group:wheel:x:10:dmtsai <==次要群組的設(shè)定、安裝時(shí)指定的 /etc/group:users:x:100:dmtsai <==次要群組的設(shè)定 /etc/group:dmtsai:x:1000: <==因?yàn)槭浅跏既航M,所以第四欄位不需要填入賬號 /etc/gshadow:wheel:::dmtsai <==次要群組的設(shè)定 /etc/gshadow:users:::dmtsai <==次要群組的設(shè)定 /etc/gshadow:dmtsai:!!::注意在/etc/passwd里面,dmtsai這個(gè)使用者所屬的群組的GID為1000,搜索/etc/group可以發(fā)現(xiàn)1000就是名為dmtsai的群組,這就是初始群組。因?yàn)槭浅跏既航M,使用者一登陸就會(huì)主動(dòng)獲得,所以不需要在/etc/group的第四部分寫入該賬號
但是非初始群組的其他群組就不同了,舉上面的例子,我們將dmtsai加入users這個(gè)群組當(dāng)中,由于users這個(gè)群組并非是dmtsai的初始群組,因此,我們必須要在/etc/group這個(gè)文件中,找到users那一行,并且將dmtsai這個(gè)賬號加入第四部分,這樣dmtsai才能夠加入users這個(gè)群組。
在上面的例子中,dmtsai賬號同時(shí)支持dmtsai,wheel與usrs這三個(gè)群組,因此,在讀取/寫入/執(zhí)行文件時(shí),針對群組部分,只要是users,shell與dmtsai這三個(gè)群組擁有的功能,dmtsai這個(gè)使用者都能夠擁有。但是假如我們要建立一個(gè)新的文件或者是新的目錄,那么這個(gè)文件的群組是dmtsai,wheel還是users呢?這時(shí)就需要檢查下它的有效群組。
3.3 groups:查看有效與支持群組
如果我們以dmtsai這個(gè)使用者的身份登入,那么該如何知道所有我們支持的群組呢?這很簡單,直接輸入groups就可以了,注意s,結(jié)果類似這樣:
[dmtsai@study ~]$ groups dmtsai wheel users在輸出的信息中,我們可以知道dmtsai這個(gè)用戶同時(shí)屬于dmtsai,wheel及users這三個(gè)群組,而且,第一個(gè)輸出的群組即為有效群組。也就是說,我們的有效群組為dmtsai,此時(shí),如果我們以touch去建立一個(gè)新文件,例如touch test,那么這個(gè)文件的擁有者為dmtsai,而且群組也是dmtsai:
[dmtsai@study ~]$ touch test [dmtsai@study ~]$ ll test -rw-rw-r--. 1 dmtsai dmtsai 0 Jul 20 19:54 test此時(shí)就可以了解什么是有效群組了,通常有效群組的作用是新建文件。
3.4 newgrp:有效群組的切換
使用newgrp可以變更有效群組,但是newgrp是有限制的,那就是我們想要切換的群組必須是賬號已經(jīng)支持的群組。舉例來說,dmtsai可以在dmtsai/wheel/users這三個(gè)群組間切換有效群組,但是dmtsai無法切換有效群組成為sshd。具體的使用方式如下所示:
[dmtsai@study ~]$ newgrp users [dmtsai@study ~]$ groups users wheel dmtsai [dmtsai@study ~]$ touch test2 [dmtsai@study ~]$ ll test* -rw-rw-r--. 1 dmtsai dmtsai 0 Jul 20 19:54 test -rw-r--r--. 1 dmtsai users 0 Jul 20 19:56 test2 [dmtsai@study ~]$ exit # 離開newgrp的環(huán)境此時(shí)dmtsai的有效群組就變成了users了。newgrp指令變更目前使用者的有效群組,是以另外一個(gè)shell來提供這個(gè)功能的。以上面的例子來說,dmtsai這個(gè)使用者目前是以另一個(gè)shell登陸的,而且新的shell給予dmtsai有效GID為users。以圖示來看如下所示:
雖然使用者的環(huán)境設(shè)定(例如環(huán)境變量等其他信息)不會(huì)有影響,但是使用者的群組權(quán)限將會(huì)被重新計(jì)算。但是需要注意,由于是新取得一個(gè)shell,因此如果我們想要回到原本的環(huán)境中,要輸入exit來回到原本的shell中。
因此,只要賬號加入的群組就能夠切換為有效群組,現(xiàn)在問題就是如何讓一個(gè)賬號加入群組,這有兩個(gè)方式:第一種是通過系統(tǒng)管理員(root)利用usermod來幫助我們加入,另一種是通過群組管理員利用gpasswd來幫助我們加入。
3.5 /etc/gshadow
輸出文件的部分內(nèi)容,如下所示:
[root@study ~]# head -n 4 /etc/gshadow root::: bin::: daemon::: sys:::可以看到這個(gè)文件內(nèi)部同樣使用:來做為分割每部分的標(biāo)識(shí),而且我們可以發(fā)現(xiàn),這個(gè)文件和/etc/group幾乎一摸一樣。我們需要注意的是第二部分,這里存儲(chǔ)密碼,如果這部分內(nèi)容為空或者為!時(shí),表明該群組沒有群組管理員。第四部分存儲(chǔ)群組支持的賬號名稱,這四個(gè)部分的含義分別是:
總結(jié)
以上是生活随笔為你收集整理的Linux账号与群组系统介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实验六 移位寄存器及其应用
- 下一篇: 漂亮的红色玫瑰花——情人节-圣诞节专属-