深入了解Linux的文件權(quán)限
一、Shell是什么
Shell是操作系統(tǒng)外殼程序的統(tǒng)稱,Windos中的圖形化界面、Linux中的命令行外殼都是外殼程序。CentOS中的外殼程序被稱為bash。
1、Shell承擔(dān)用戶和內(nèi)核間的翻譯工作
Shell是命令行解釋器。
Linux嚴(yán)格意義上說的是一個(gè)操作系統(tǒng),我們稱之為"核心(Kernel)"。但是用戶和內(nèi)核溝通的學(xué)習(xí)成本很高,所以在內(nèi)核外部有一層Shell外殼程序,將用戶輸入的指令翻譯傳遞給內(nèi)核,內(nèi)核處理后,將結(jié)果返回給Shell,由Shell向用戶傳達(dá)指令的最終結(jié)果。
2、拒絕用戶非法請(qǐng)求,保護(hù)內(nèi)核
當(dāng)用戶輸入非法指令時(shí),shell不會(huì)再去詢問內(nèi)核結(jié)果,而是直接拒絕用戶的非法請(qǐng)求。
3、派生子進(jìn)程執(zhí)行用戶指令
因?yàn)镾hell是用戶和內(nèi)核溝通的唯一橋梁,一般Shell不參與指令的執(zhí)行,而是通過派生子進(jìn)程的方式執(zhí)行用戶的指令。(子進(jìn)程掛了,但Shell不會(huì)受到影響)
二、用戶切換與提權(quán)
1、普通用戶與root用戶的切換
su//切換后路徑不變 su -//切換后來到家目錄
普通用戶切換為root用戶需要輸入root密碼,而root用戶切換成普通用戶無需 任何驗(yàn)證。
2、普通用戶指令短暫提權(quán)
sudo whoami
當(dāng)該用戶被添加至etc/sudoers中,sudo為最近的一條指令提權(quán)至root,需要輸入當(dāng)前普通用戶密碼。
在一次密碼認(rèn)證過后,接下來的幾分鐘使用sudo提權(quán)操作,將無需再次輸入密碼。
為什么sudo提權(quán)需要輸入當(dāng)前用戶的密碼,而不是root密碼呢?這樣做是為某些被信任的用戶,提供最少的執(zhí)行障礙。而不是直接將root的密碼交給員工。
三、文件權(quán)限的理解
1、文件權(quán)限=角色的權(quán)限+文件屬性
對(duì)于Linux中的文件權(quán)限,有的角色對(duì)這個(gè)文件有可讀、可寫、可執(zhí)行的權(quán)限,而有的角色卻只有可讀權(quán)限。這是人的權(quán)限。
對(duì)于文件的可讀、可寫、可執(zhí)行的屬性,如果一個(gè)文件不具備可讀權(quán)限,那么角色在訪問文件時(shí),也是沒有可讀權(quán)限的。
2、Linux中的三種角色
Linux中有三種角色,分別是擁有者(owner)、所屬組(grouper)、其他人(other),權(quán)限限制的不是用戶,而是這個(gè)用戶當(dāng)前所處的角色。
2.1為什么會(huì)存在所屬組(grouper)這種角色
舉個(gè)例子:現(xiàn)在公司有A、B、C等多個(gè)部門使用同一臺(tái)Linux的云服務(wù)器,每個(gè)小組都有各自的小組成員,所以就有了所屬組的概念。把不同的組員放到各自的所屬組中,員工無權(quán)限訪問他組文件,防止項(xiàng)目信息互相泄露。
3、drwxrwxr-x代表的意義
3.1第一位字母代表的意義
第一位字母代表的意義是文件的類型。
在windows中,區(qū)分文件類型是通過文件名后綴,而Linux中,文件的類型由第一位字母決定,與文件本身的后綴無關(guān)。(Linux中文件后綴作用是幫助用戶快速區(qū)分這個(gè)文件的類型或者gcc等工具是需要關(guān)注后綴)
- d:目錄文件
- -:普通文件(源代碼、庫文件、可執(zhí)行程序、文檔壓縮包等)
- c:字符設(shè)備文件(鍵盤、顯示器等串口設(shè)備)
- b:塊設(shè)備(硬盤、光驅(qū)等)
- l:軟鏈接文件(類似于Windows中的快捷方式)
- p:管道文件
- s:socket套接口文件
3.2后九位代表的意義
后九位三三為一組,分別代表擁有者、所屬組、其他用戶的權(quán)限。其中r代表可讀,w代表可寫,x代表可執(zhí)行。-代表不具備該權(quán)限。
3.3文件權(quán)限的字符修改方法
chmod u-r text.c//將text.c的擁有者減去可讀權(quán)限 chmod g+x text.c//將text.c的所屬組加上可執(zhí)行權(quán)限 chmod o+rwx text.c//將text.c的其他用戶減去讀、寫、可執(zhí)行權(quán)限 chmod u+rx,g-w,o-rwx text.c//可以組合操作權(quán)限的增減 chmod a-rwx text.c//對(duì)所有角色減去讀、寫、可執(zhí)行權(quán)限
只有文件的擁有者和root才能對(duì)文件角色的權(quán)限進(jìn)行更改。
root不受角色權(quán)限的約束。
3.4角色的更改
sudu chown jly2 text.c//把text.c的擁有者改成jly2 sudo chgrp jly2 text.c//把text.c的所屬組改成jly2 sudo chown jly2:jly2 text.c//把text.c的擁有者、所屬組改成jly2
擁有者、所屬組更改后,other也變了,所以other不用特意改。
3.5文件權(quán)限的八進(jìn)制修改方法
三三為一組,非-位用二進(jìn)制1填充,-位用0填充,得到角色權(quán)限的二進(jìn)制,在將這些二進(jìn)制轉(zhuǎn)化為八進(jìn)制,即可使用八進(jìn)制來表達(dá)角色的權(quán)限。
chmod 000 text.c//用權(quán)限的八進(jìn)制更改text.c的權(quán)限
3.6目錄的起始權(quán)限及權(quán)限掩碼umask
Linux規(guī)定,目錄的起始權(quán)限從777開始,普通文件的起始權(quán)限從666開始。
[jly@VM-4-11-centos text]$ umask 0002//第一位不管,系統(tǒng)會(huì)默認(rèn)配置好權(quán)限掩碼為002,即000 000 010
凡是在umask中出現(xiàn)的權(quán)限,必須在起始權(quán)限中去掉,即最終權(quán)限=起始權(quán)限&(~umask)。
所以,我們創(chuàng)建出來的目錄的權(quán)限是775(rwx rwx r-x),普通文件的權(quán)限是664(rw- rw- r--)。
umask 0444//更改umask的值,即100 100 100
修改后創(chuàng)建出來的目錄權(quán)限變?yōu)?33,普通文件權(quán)限變?yōu)?22。
4、目錄的權(quán)限
目錄的r權(quán)限:能否查看目錄中的文件。
目錄的w權(quán)限:能否在目錄中創(chuàng)建文件。
目錄的x權(quán)限:能否進(jìn)入、執(zhí)行目錄中的文件
所以,目錄的起始權(quán)限從777開始,是因?yàn)樗薪巧夹枰獂權(quán)限進(jìn)入目錄。
四、粘滯位(公共目錄使用)
Linux系統(tǒng)中有很多人,我們需要在一個(gè)公共的目錄下,進(jìn)行臨時(shí)文件的操作(增刪查改)。這個(gè)公共目錄由root來創(chuàng)建。
在這個(gè)公共目錄中,通過文件自身的權(quán)限來約束不同的角色,但是無法阻止其他用戶私自刪除這些文件。因?yàn)樵谀夸浿袆h除一個(gè)文件,與這個(gè)文件本身無關(guān),與它所處的目錄的權(quán)限有關(guān)。
這個(gè)公共目錄的擁有者和所屬組是root,粘滯位會(huì)限制other的權(quán)限。
chmod +t /mytmp //在/目錄下的mytmp目錄中加上粘滯位
drwxrwxrwx
drwxrwxrwt
加上粘滯位后,該公共目錄的other的x權(quán)限變?yōu)閠,也就是該目錄下other的可執(zhí)行權(quán)限變?yōu)檎硿?,其他用戶無權(quán)刪除不屬于他的文件。
五、權(quán)限總結(jié)
1、目錄的可執(zhí)行權(quán)限是表示你可否在目錄下執(zhí)行命令。
2、如果目錄沒有-x權(quán)限,則無法對(duì)目錄執(zhí)行任何命令,甚至無法cd進(jìn)入目錄, 即使目錄仍然有-r 讀權(quán)限(這個(gè)地方很容易犯錯(cuò),認(rèn)為有讀權(quán)限就可以進(jìn)入目錄讀取目錄下的文件)
3、如果目錄具有-x權(quán)限,但沒有-r權(quán)限,則用戶可以執(zhí)行命令,可以cd進(jìn)入目錄。但由于沒有目錄的讀權(quán)限,所以在目錄下,即使可以執(zhí)行l(wèi)s命令,但仍然沒有權(quán)限讀出目錄下的文檔。
到此這篇關(guān)于深入了解Linux的文件權(quán)限的文章就介紹到這了,更多相關(guān)Linux文件權(quán)限內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Linux中atime,mtime,ctime的使用場(chǎng)景
這篇文章主要介紹了Linux的三個(gè)時(shí)間atime,mtime,ctime詳細(xì)說明與使用場(chǎng)景,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起了解一下2022-10-10mac使用Shell(終端)SSH連接遠(yuǎn)程服務(wù)器的方法
這篇文章主要介紹了mac使用Shell(終端)SSH連接遠(yuǎn)程服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04shell腳本學(xué)習(xí)指南[六](Arnold Robbins & Nelson H
這篇文章主要介紹了shell腳本學(xué)習(xí)指南[六](Arnold Robbins & Nelson H.F. Beebe著),需要的朋友可以參考下2014-02-02Shell腳本實(shí)現(xiàn)把進(jìn)程負(fù)載均衡到多核CPU中
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)把進(jìn)程負(fù)載均衡到多核CPU中,可以把進(jìn)程指定運(yùn)行在某個(gè)CPU中,需要的朋友可以參考下2014-06-06Shell中創(chuàng)建序列和數(shù)組(list、array)的方法
這篇文章主要介紹了Shell中創(chuàng)建序列和數(shù)組(list、array)的方法,本文講解了seq方法生成以及通過內(nèi)部{begin..end}生成法,需要的朋友可以參考下2015-07-07詳解shell 遍歷文件夾內(nèi)所有文件并打印絕對(duì)路徑
本篇文章主要介紹了shell 遍歷文件夾內(nèi)所有文件并打印絕對(duì)路徑,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01shell中嵌套執(zhí)行expect命令實(shí)例
這篇文章主要介紹了shell中嵌套執(zhí)行expect命令實(shí)例,一直都想把expect的操作寫到bash腳本里,這樣就不用我再寫兩個(gè)腳本來執(zhí)行了,需要的朋友可以參考下2014-12-12linux啟動(dòng)級(jí)別的含義(init 0-6)
這篇文章主要介紹了linux啟動(dòng)級(jí)別的含義(init 0-6),需要的朋友可以參考下2014-02-02