十二:群策群力但又各管東西,多用戶和權(quán)限
電腦,通常只有本人一個用戶,就算是在多用戶的環(huán)境下,比如你的爸爸媽媽需要使用電腦,一般也是使用你的賬戶來使用,而且也是你來教他們使用(開玩笑:0)。個人電腦在多用戶的情景下使用,并不多見,Windows中的Guest賬戶到底有什么用處真的是個謎,但是Linux通常作為服務(wù)器的操作系統(tǒng),一般來說會有多個管理員合作管理,那么賬戶和賬戶關(guān)系,賬戶的權(quán)限就顯得非常的重要了。
對于權(quán)限,在之前我們已經(jīng)有過接觸,查看目錄的時候,我們使用長格式查看目錄信息,會打印出文件的權(quán)限信息


一個用戶可以擁有多個文件,一個用戶可以屬于多個用戶組,用戶和用戶組的信息可以分別查看/etc/passwd和/etc/group文件。/etc/shadow文件保存著用戶的密碼信息,當(dāng)然了,是加過密的。
圖上的藍色框里代表的是文件模式,也就是權(quán)限信息,只有文件的所有者和超級用戶才能更改文件模式。
第一種:數(shù)字權(quán)限表示

chmod:更改文件模式
chmod支持兩種修改文件模式的方式
第一種:數(shù)字權(quán)限表示
文件模式分成了三組,每組都有讀權(quán)限,寫權(quán)限,執(zhí)行權(quán)限,每一組的權(quán)限如果用二進制的數(shù)字表示,可以寫為111,1代表有該權(quán)限,0代表沒有,權(quán)限設(shè)置為111-110-110則意味著文件擁有者擁有讀,寫和執(zhí)行三個權(quán)限,而用戶組成員和其他人只擁有對文件讀和寫的權(quán)限。但是用二進制來設(shè)定很麻煩,所以,實際使用數(shù)字設(shè)置權(quán)限的時候,使用八進制,比如設(shè)置一個文件的權(quán)限為只有擁有者可以讀寫,那么二進制寫作110 000 000,在使用chmod命令的時候?qū)懽鱟hmod 600。
示例,修改一個文件的權(quán)限

*使用數(shù)字修改權(quán)限的時候注意不要缺少位數(shù),如果缺少,那么執(zhí)行“chmod 60 文件名”會發(fā)生什么?他會認(rèn)為文件擁有者對該文件沒有任何權(quán)限,所在用戶組有讀和寫的權(quán)限,其他人沒有權(quán)限,這太可笑了;要是執(zhí)行“chmod 6 文件名”會發(fā)生什么?他會認(rèn)為文件擁有者和所屬用戶組對該文件沒有任何權(quán)限,其他人反而有讀和寫的權(quán)限,笑哭…


第二種:字符權(quán)限表示
相比數(shù)字權(quán)限表示,字符權(quán)限表示更直觀一些,控制的更細(xì)膩一些。
示例:
chmod [u|g|o|a][+|-|=][r|w|x] 文件
u:所有者
g:所屬用戶組
o:其他人
a:以上全部
+/-/=:代表添加,撤銷和重設(shè)
r/w/x:分別代表讀權(quán)限,寫權(quán)限和執(zhí)行權(quán)限

umask:默認(rèn)文件模式
umask命令用來設(shè)置文件的掩碼,剛聽起來可能比較生澀,說白一點就是設(shè)置或者查看默認(rèn)的文件模式。

顯示為0002,什么意思呢?好,我們先新建一個文件test

我們看到,新建文件test的文件模式為rw- rw- r–

1:setuid位,他在掩碼的第一位,如果開啟,那么文件權(quán)限的掩碼應(yīng)該是4000。setuid有什么作用呢?如果某個文件開啟了setuid位,那么該文件執(zhí)行的時候,該文件具有文件所有者的權(quán)限,比如你是一個一般用戶,你執(zhí)行了一個root用戶的文件,并且該文件設(shè)置了setuid位,那么文件執(zhí)行的時候是擁有root權(quán)限的,所以對于setuid位的設(shè)置要慎重。
2:和setuid位類似,他在掩碼的第二位,開啟的話,掩碼的設(shè)置是2000。setgid表示操作一個文件的時候,操作文件的用戶組會由當(dāng)前組變?yōu)槲募诮M的權(quán)限。對于文件所屬組不是文件創(chuàng)造者所在組的情況,可能會帶來權(quán)限的變化。
3:sticky位,掩碼中的第三位,開啟時,掩碼設(shè)置是1000,這個權(quán)限位通常用來限制訪問,如果它開啟,那么它能阻止用戶刪除或重命名文件,除非用戶是這個文件所有者,或是超級用戶。
如何確定某個文件是否開啟了setuid位,segid位呢?當(dāng)某個文件開啟了某個特殊權(quán)限位,那么在對應(yīng)的權(quán)限分組中,該組的執(zhí)行權(quán)限會顯示s。
su:使用替代用戶執(zhí)行命令




3,只變更所屬組
*我對一個文件有寫權(quán)限,我就可以刪除這個文件嗎?答案是否定的,寫權(quán)限僅僅是修改文件的內(nèi)容而已,如果你需要刪除這個文件,你需要擁有對這個文件所在目錄的寫權(quán)限才行。
我們修改一下umask的值,再新建一個文件試試

umask顯示的值是文件模式的掩碼,是一個八進制的數(shù)字。先撇開掩碼的第一位,初始后三位是002,變成二進制數(shù)就是000 000 010,這個掩碼對應(yīng)的權(quán)限就是rw- rw- r–,之后我們修改掩碼,變?yōu)?00 000 000,這時候掩碼對應(yīng)的權(quán)限就是rw- rw- rw-,是不是已經(jīng)能看出倪端了?對,當(dāng)我們將二進制格式的掩碼某一位設(shè)置為0,實際上是打開了該位置的權(quán)限(但是執(zhí)行權(quán)限無法開啟,這也是處于安全考慮,新建的文件沒有執(zhí)行權(quán)限)
那么第一個八進制的0是什么含義?
除了常用的讀權(quán)限,寫權(quán)限和執(zhí)行權(quán)限,還有一些特別的權(quán)限。
1:setuid位,他在掩碼的第一位,如果開啟,那么文件權(quán)限的掩碼應(yīng)該是4000。setuid有什么作用呢?如果某個文件開啟了setuid位,那么該文件執(zhí)行的時候,該文件具有文件所有者的權(quán)限,比如你是一個一般用戶,你執(zhí)行了一個root用戶的文件,并且該文件設(shè)置了setuid位,那么文件執(zhí)行的時候是擁有root權(quán)限的,所以對于setuid位的設(shè)置要慎重。
如何開啟setuid位呢
chmod u+s 文件,表示開啟setuid
2:和setuid位類似,他在掩碼的第二位,開啟的話,掩碼的設(shè)置是2000。setgid表示操作一個文件的時候,操作文件的用戶組會由當(dāng)前組變?yōu)槲募诮M的權(quán)限。對于文件所屬組不是文件創(chuàng)造者所在組的情況,可能會帶來權(quán)限的變化。
開啟setgid
chmod g+s 文件,開啟setgid位
3:sticky位,掩碼中的第三位,開啟時,掩碼設(shè)置是1000,這個權(quán)限位通常用來限制訪問,如果它開啟,那么它能阻止用戶刪除或重命名文件,除非用戶是這個文件所有者,或是超級用戶。
開啟sticky位
chmod +t 文件
如何確定某個文件是否開啟了setuid位,segid位呢?當(dāng)某個文件開啟了某個特殊權(quán)限位,那么在對應(yīng)的權(quán)限分組中,該組的執(zhí)行權(quán)限會顯示s。
比如某個文件開啟了setuid位,那么他的權(quán)限是rws r– r–;開啟了setgid位,則是rw- rws r–;sticky位則在其他人組中體現(xiàn),rw- rw- rwt
su/sudo 身份的切換
除非是root用戶,否則一般用戶在很多情況下都會有對系統(tǒng)進行操作的限制。如果一個一般用戶進行某個操作,比如執(zhí)行某個文件,但是他沒有這個文件的執(zhí)行權(quán)限,那么該怎么辦呢?最簡單粗暴的方式就是注銷,使用root用戶登錄進行操作。雖然可行,但是不可取,畢竟太不方便了。
su:使用替代用戶執(zhí)行命令
這個命令不太好記,全稱是run a command with substitute user and group ID,看起來是substitute user的縮寫。作用就是使用替代用戶來執(zhí)行操作。
示例:切換一個用戶,如果不指定用戶,那么默認(rèn)切換到root
su [用戶]

直接使用su之后,系統(tǒng)提示我們輸入密碼,注意,這里輸入的是root用戶的密碼,而不是當(dāng)前用戶的密碼。之后,我們會發(fā)現(xiàn)shell提示符酉“$”變成了“#”
有一個常用選項是”-l”(他有一個別名是“-”),添加“-l”會出現(xiàn)一個需要登錄的shell,加載替代用戶的shell環(huán)境。我們看到,添加“-l”之后登錄,初始目錄定位到了root用戶的家目錄

其實有時候我們并不需要切換用戶,只是需要使用個別用戶的權(quán)限來做一些操作罷了,還有一個常用選項是“-c”,執(zhí)行一個命令。比如一個一般用戶希望查看一下root用戶的家目錄

只執(zhí)行單個命令,而不是啟動一個新的可交互的 shell,使用“-c”選項,命令將傳遞到一個新的shell中執(zhí)行,所以命令參數(shù)需要單引號引起作為一個參數(shù)。
sudo:使用替代用戶去執(zhí)行操作,但是提供靈活的配置
sudo和su類似,都是以另一個身份去執(zhí)行某些操作,但是sudo允許管理員進行靈活的配置,比如某些操作只允許特定用戶來執(zhí)行,在經(jīng)過配置之后,特定用戶不需要管理員的密碼,只需要輸入自己的密碼就可以使用管理員權(quán)限來執(zhí)行特定操作。通常情況下,sudo并不會啟動一個新的shell,也不會加載其他用戶的shell環(huán)境。
除了切換當(dāng)前的用戶,獲取root權(quán)限等,我們還需要更改文件的所有者,所屬組
chown:更改文件的所有者和所屬組
這個命令可以同時修改兩個所屬關(guān)系,也可以單獨修改。
命令格式:chown [OPTION]… [OWNER][:[GROUP]] FILE…,這是文檔的原話,我們添點料
最簡單的使用:chown alvindu327 a.txt,把a.txt文件的所有者從原所有者變?yōu)閍lvindu327

然后,說一下比較全面的用法
1,同時變更所屬用戶和所屬組。chown alvindu327: a.txt,剛才的命令我們可以看到,a.txt的所屬組依然屬于root,在所屬用戶之后添加“:”,意為著將文件原所屬組變更為新用戶登陸時的所屬組

2,單獨變更所屬用戶和所屬組。
chown alvindu327:demonuser a.txt,將a.txt的所屬用戶變?yōu)閍lvindu327,所屬組變更為demonuser
3,只變更所屬組
chown :onlygrp a.txt,將a.txt的所屬組變更為onlygrp,所屬者不變
接下來還剩下不少命令需要了解,比如新建用戶,新建組,修改密碼等等,但是一一列舉出來沒什么意思,為什么不用apropos去模糊查詢一下呢,新建用戶,或許會是adduser吧,要不createuser?猜測和搜索也是很好的學(xué)習(xí)方式。
喔,最后幾乎忘了一個重要的內(nèi)容,雖然常用權(quán)限有讀,寫,和執(zhí)行,看起來很簡單,但是你真正明白他們的含義嗎?
對于文件而言
- 讀權(quán)限:表示可以查看這個文件的內(nèi)容(可以使用cat,less,more等命令進行查看)
- 寫權(quán)限:表示可以修改這個文件的內(nèi)容(可以使用編輯器修改這個文件)
- 執(zhí)行權(quán)限:表示該文件(可能是命令,或者腳本)可以執(zhí)行
對于目錄而言(雖然目錄也是文件,但是這里做一個區(qū)分)
- 讀權(quán)限:表示可以列出目錄內(nèi)的內(nèi)容(使用ls可以查看文件的內(nèi)容)
- 寫權(quán)限:表示可以在目錄中創(chuàng)建,刪除文件(touch文件,mkdir目錄,或者rm文件)
- 執(zhí)行權(quán)限:表示可以進入到這個目錄中
對于常用讀寫執(zhí)行權(quán)限,我本來也和很多人一樣,認(rèn)為很簡單,但是其中真的有幾個誤區(qū)需要掃盲:
*我對一個文件有寫權(quán)限,我就可以刪除這個文件嗎?答案是否定的,寫權(quán)限僅僅是修改文件的內(nèi)容而已,如果你需要刪除這個文件,你需要擁有對這個文件所在目錄的寫權(quán)限才行。
*我對一個目錄有讀權(quán)限,我就可以查看這個目錄的內(nèi)容嗎(雖然聽起來沒什么不對)?答案是否定的,對一個目錄有讀權(quán)限,僅僅是讓你能看到這個目錄的存在,而查看目錄的內(nèi)容,你需要目錄的執(zhí)行權(quán)限,所以,目錄的讀權(quán)限和執(zhí)行權(quán)限一般都是同時存在的,倘若一個目錄只有讀權(quán)限,那就是耍流氓,知道有,看不了;倘若只有執(zhí)行權(quán)限,那就是特供情報,雖然“沒有”,但是能查看…
posted on 2015-07-12 10:49 都較瘦 閱讀(114) 評論(0) 編輯 收藏 所屬分類: Linux