一.預(yù)備知識(shí)
1.LInux用戶分類
一臺(tái)Linux機(jī)器的用戶分為兩類:
超級用戶和普通用戶。
注意我這里說的用戶的并不是一個(gè)固定的人,例如你本身就有root賬號(hào),但你也可以使用自己創(chuàng)建普通賬號(hào)。當(dāng)你使用root賬號(hào)時(shí),你就是一個(gè)超級用戶,當(dāng)你使用普通賬號(hào)時(shí),你就是一個(gè)普通用戶。更簡單地說,這里的用戶對應(yīng)的是正在使用的賬號(hào)。
root賬號(hào)無所不能,不受權(quán)限約束,而普通賬號(hào)則受權(quán)限約束。具體怎么一回事下面再說。
2.切換用戶的指令
當(dāng)你想切換到不同用戶時(shí),可以使用su指令,后面加上想要切換成哪個(gè)用戶,如果不加,默認(rèn)是root用戶
從普通用戶切換到超級用戶:
su
接下來會(huì)提示你輸入密碼,這里輸入的是root賬號(hào)的密碼。
從超級用戶切換到普通用戶:
su zhangsan
假設(shè)你添加了zhangsan這個(gè)用戶,就可以使用本條指令切換用戶,root用戶可以任意切換身份,不需要輸入密碼
從普通用戶切換到普通用戶
su lisi
假設(shè)你現(xiàn)在登錄的是張三的賬號(hào),你想要切換成李四,就可以使用上述的命令,前提是你要知道李四的密碼
su -
你也可以使用這條指令切換賬號(hào),他和su的效果基本一樣,只不過su只是單純地賬號(hào)切換,而su -是重新登錄賬號(hào),最終的效果就是前者仍然在以前的目錄,而后者會(huì)回到切換賬號(hào)的家目錄
二.權(quán)限的理解
怎么理解權(quán)限?權(quán)限就是能不能做某件事,它是一個(gè)是否的問題,所以權(quán)限必然包含兩個(gè)要素,誰能不能做事?(who)? ?做什么事?(what)
Linux系統(tǒng)當(dāng)中,“一切皆文件”,故我們操作一臺(tái)機(jī)器,實(shí)際上就是訪問機(jī)器當(dāng)中的各種各樣的文件。所以我們說,“權(quán)限是伴生文件的”,某個(gè)具體的文件(這里是廣義的文件,包括目錄等),權(quán)限就是約束用戶對文件能做哪些事情。
三.文件訪問者的分類
根據(jù)和某個(gè)文件的關(guān)系,所有用戶可以被分為三類:
- 擁有者 u--User
- 所屬組 g-Group
- 其它人 o-Others
擁有者默認(rèn)就是創(chuàng)建這個(gè)文件的人
所屬組是專門為這個(gè)文件劃的一個(gè)群體,里面可以有一個(gè)或多個(gè)用戶,并且有一個(gè)組長,最初默認(rèn)只有文件的創(chuàng)建者一個(gè)人,并且擔(dān)任組長、
這里可能會(huì)有一個(gè)疑問,不是說用戶分為超級用戶和普通用戶嗎?這里不是和上面沖突了嗎?
超級用戶和普通用戶是某個(gè)具體的人,而擁有者,所屬組和other是某種角色,二者是相互補(bǔ)充,互相成就的關(guān)系。
例如,張三是一名學(xué)生,想去教職工食堂吃飯但是被攔住了。于是張三奮發(fā)圖強(qiáng),大學(xué)畢業(yè)后當(dāng)上了老師,可以正大光明地去教職工食堂了。張三能去教職工食堂吃飯,是因?yàn)樗菑埲龁??不是,是因?yàn)樗抢蠋?。張三從學(xué)生這個(gè)角色向老師轉(zhuǎn)變,但他的姓名,身份證號(hào)沒有改變,從他出生起,他就叫張三。所以我們說張三這個(gè)人的角色先是學(xué)生,后是老師。
四.文件類型和訪問權(quán)限
我們可以使用ls -l 指令來查看當(dāng)前目錄下所有文件的屬性,一個(gè)文件的屬性如下
1.文件類型
d:文件夾
-:普通文件
l:軟鏈接(類似Windows的快捷方式)
b:塊設(shè)備文件(例如硬盤、光驅(qū)等)
p:管道文件
c:字符設(shè)備文件(例如屏幕等串口設(shè)備)
s:套接口文件
文件類型很多,我們只需記住普通文件和文件夾的表示符號(hào)就可以了。
2.基本權(quán)限
你能對一個(gè)文件做什么呢?無非就是讀,寫,執(zhí)行,所以基本權(quán)限也就是這三種
i.讀:Read對文件而言,具有讀取文件內(nèi)容的權(quán)限;對目錄來說,具有查看該目錄下文件信息的權(quán)限
ii.寫:Write對文件而言,具有修改文件內(nèi)容的權(quán)限;對目錄來說具有刪除移動(dòng)目錄內(nèi)文件的權(quán)限
iii.執(zhí)行:execute對文件而言,具有執(zhí)行文件的權(quán)限;對目錄來說,具有進(jìn)入目錄的權(quán)限
iv.“—”表示不具有該項(xiàng)權(quán)限
針對helloworld這個(gè)文件,它的文件類型是- ,即普通文件,擁有者的權(quán)限是rw- ,(可讀可寫不可執(zhí)行)所屬組的權(quán)限是r-- (可讀不可寫不可執(zhí)行), 其它人的權(quán)限是r--(可讀不可寫不可執(zhí)行)。
順便提一下,Window中一個(gè)文件能否被執(zhí)行要看它的文件名后綴,例如exe就是可執(zhí)行文件。而在Linux中一個(gè)文件能否被執(zhí)行取決于你有沒有x權(quán)限,與后綴名無關(guān)。
注意我的用詞,Linux系統(tǒng)本身不按照文件后綴來區(qū)分文件類型,不代表上面的軟件不認(rèn)后綴喲。例如用gcc編譯一個(gè)txt文件就不行。
現(xiàn)在正式提出問題:dir這個(gè)文件的權(quán)限是什么?
答:對于helloworld這個(gè)文件,擁有者具有rwx權(quán)限,所屬組具有rwx權(quán)限,others具有rx權(quán)限,沒有w權(quán)限
前文說過,要描述一個(gè)文件權(quán)限需要包含兩個(gè)要素,who?擁有者,所屬組和others。what?r、w、x
五.文件訪問權(quán)限的相關(guān)設(shè)置方法
1.chmod
功能:設(shè)置文件的訪問權(quán)限
chmod u+x test.txt
給test.txt文件的擁有者加上x權(quán)限
chmod u-x,o+w test.txt
給test.txt文件的擁有者取消x權(quán)限,others加上w權(quán)限?
chmod a-w test.txt?
給test.txt的擁有者,所屬組和其他人都取消w權(quán)限?
注意:只有文件的擁有者和root才能改文件的權(quán)限。
root雖然是others,但它是不受權(quán)限約束的。即使是文件的擁有者也是受到權(quán)限約束的,也就是說,當(dāng)擁有者把自身的w權(quán)限取消時(shí),也不能向文件中寫入內(nèi)容,但這樣做是沒有意義的,因?yàn)樽约耗馨褭?quán)限改回來。
還有一個(gè)問題,雖然我是擁有者,w權(quán)限被取消了,但我同時(shí)還是所屬組的組長啊,假設(shè)所屬組是有w權(quán)限的,那我能否向文件中寫入內(nèi)容呢?也不能。因?yàn)橐粋€(gè)用戶在匹配角色的時(shí)候,只會(huì)匹配一次,先判斷你是不是擁有者,如果是就不再匹配了。
2.chown
功能:改變文件的擁有者
chown zhangsan test.txt
將test.txt的擁有者改為zhangsan
注意:只有root才能更改文件的擁有者
3.chgrp
功能:改變所屬組的組長
chgrp zhangsan test.txt
注意:只有root才能更改文件的所屬組組長
六.文件權(quán)限的八進(jìn)制表示方案?
前面我們知道,要表示一個(gè)文件的權(quán)限,需要9個(gè)位,每三個(gè)為一組,分別表示擁有者,所屬組和others的權(quán)限,每一位只有兩種情況,要么是-,要么是對應(yīng)的字母(r,w,x)。故我們也可以采用9個(gè)二進(jìn)制位來表示權(quán)限,0表示沒有對應(yīng)權(quán)限,1表示有。然后將二進(jìn)制轉(zhuǎn)換為八進(jìn)制,為什么是八進(jìn)制呢?因?yàn)槿齻€(gè)二進(jìn)制為一組,故采用這種八進(jìn)制方案。
例如
擁有者:rw-? ? ?110? ? ? 6
所屬組:rw-? ? ?110? ? ? 6
其它人:r--? ? ? 100? ? ? 4
文件權(quán)限用八進(jìn)制方案表示:664
故我們也可以這樣使用chmod指令
chmod? 664? test.txt
七.文件的默認(rèn)權(quán)限
?
?這是新創(chuàng)建的三個(gè)目錄和普通文件?,權(quán)限沒有經(jīng)過任何修改,可以發(fā)現(xiàn)目錄的默認(rèn)權(quán)限是775,普通文件的默認(rèn)權(quán)限是664。
要弄清楚背后的邏輯,需要知道三個(gè)點(diǎn)
1.目錄的起始權(quán)限是777,普通文件的起始權(quán)限是666
那為什么目錄的的權(quán)限不是777呢?別著急,往下看
2.Linux系統(tǒng)中存在權(quán)限掩碼
什么是權(quán)限掩碼呢?我們可以用以下指令來查看
umask
默認(rèn)的權(quán)限掩碼是0002,我們還可以自己設(shè)置掩碼
umask 0000
?
將掩碼更改后我們再創(chuàng)建目錄和文件
?結(jié)果發(fā)現(xiàn)目錄的默認(rèn)權(quán)限變成了777,普通文件變成了666,默認(rèn)權(quán)限變了?。?!所以我們可以大膽猜測,文件的默認(rèn)權(quán)限受到起始權(quán)限和權(quán)限掩碼影響 。那么具體是如何影響的呢
3.默認(rèn)權(quán)限 = 起始權(quán)限 去掉 權(quán)限掩碼中出現(xiàn)的權(quán)限
例如0002這個(gè)權(quán)限掩碼,第一個(gè)0是八進(jìn)制的前綴,所以這是一個(gè)八進(jìn)制數(shù)002,轉(zhuǎn)換為二進(jìn)制就是000 000 010,故others的w權(quán)限最終會(huì)在起始權(quán)限中去掉。而目錄的起始權(quán)限是111 111 111,經(jīng)過掩碼作用就是111 111 101,即八進(jìn)制的775。
歸納為一個(gè)表達(dá)式就是最終權(quán)限 = 起始權(quán)限 & (~umask)當(dāng)然既然有位運(yùn)算,那么肯定要先將八進(jìn)制轉(zhuǎn)換為二進(jìn)制。
八.目錄權(quán)限的特殊說明
1.進(jìn)入一個(gè)目錄需要什么權(quán)限?
答:需要該目錄的x權(quán)限
2.目錄的r權(quán)限是什么?
答:查看當(dāng)前目錄的文件列表(ls指令)
3.沒有目錄的x權(quán)限,但是有r權(quán)限,能擁ls指令查看文件列表嗎?
答:不能,沒有x權(quán)限則無法對目錄執(zhí)行任何命令,甚至無法進(jìn)入
4.在一個(gè)目錄下創(chuàng)建文件需要什么權(quán)限?
答:需要該目錄的w權(quán)限
5.一個(gè)文件的屬性能否被查看由什么決定?
答:由文件所屬目錄的權(quán)限決定!??!
?6.一個(gè)文件能否被刪除本身能決定嗎?由誰決定?
答:不能,由文件所屬目錄與對應(yīng)賬戶是否有w權(quán)限
辨析上面幾個(gè)問題后,我們就能理解為什么要把目錄的起始權(quán)限設(shè)為rwx了,你既然創(chuàng)建了一個(gè)目錄,肯定要能進(jìn)入吧,要能創(chuàng)建文件吧,還要能查看文件列表吧,不然你創(chuàng)建它干什么呢?
但同時(shí)有一點(diǎn)令人匪夷所思,我們發(fā)現(xiàn)刪掉一個(gè)文件與該文件無關(guān)。假如你創(chuàng)建一個(gè)文件,把others的所有權(quán)限都取消了,正當(dāng)你以為高枕無憂時(shí),卻發(fā)現(xiàn)文件被刪除了,因?yàn)槟阃浉牧四夸浀臋?quán)限。所以為了防止這種文件被others隨意更改的情況,默認(rèn)的掩碼就是0002,無論是目錄還是普通文件,都把others的w權(quán)限去掉。
還有一個(gè)小細(xì)節(jié),每個(gè)用戶的家目錄都只對自己開放了權(quán)限,其它用戶是無法訪問的
所以,一般而言,不同的賬號(hào)是不會(huì)在同一目錄下的,上面那種others刪除文件的情況幾乎不會(huì)發(fā)生?
九.粘滯位
1.粘滯位應(yīng)用場景
上面說的是一般情況,但總會(huì)有特殊場景。
張三和李四現(xiàn)在想要合作開發(fā),共享文件,但是文件放在哪里呢?張三的家目錄李四進(jìn)不去,李四的家目錄張三進(jìn)不去。這時(shí)root說,我在根目錄下創(chuàng)建了一個(gè)目錄dir,你們都把文件放在里面吧。于是張三和李四都在dir目錄下進(jìn)行開發(fā),也能互相查看對方的文件。
突然有一天,張三不想讓李四看到自己寫的內(nèi)容,于是他把自己文件others的所有權(quán)限給關(guān)閉了,但是又害怕李四生氣把文件給刪了,所以張三找到root,讓他把李四對dir目錄的w權(quán)限取消,root答應(yīng)了。
第二天,李四來找root,你把我的w權(quán)限關(guān)了,我還怎么新建文件??!root這下犯了難,不知道該怎么辦。
上面問題的根源在于文件能否被刪除不由文件本身的權(quán)限決定,“毀滅你與你無關(guān)”。你取消別人權(quán)限可以保證信息不回泄露,但別人不高興了可以隨時(shí)刪你,但更改目錄權(quán)限又會(huì)引發(fā)別的問題,這樣顯然不合理。
針對這種共享場景下的問題,LInux新增了一個(gè)權(quán)限,叫做粘滯位。
2.粘滯位的使用方法
共享文件時(shí),大家可以不給對方設(shè)置權(quán)限,但是可以互刪文件,這是有bug的。給共享目錄添加了粘滯位后,該目錄下的文件只能由以下的人刪除:
- 超級管理員
- 文件擁有者
- 目錄擁有者
?chmod +t dir
給dir目錄添加粘滯位?文章來源:http://www.zghlxwxcb.cn/news/detail-700254.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-700254.html
到了這里,關(guān)于【Linux權(quán)限管理】文件:毀滅我與我無關(guān)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!