Linux基础(文件权限续篇)
文件的特殊權(quán)限
在復(fù)雜多變的生產(chǎn)環(huán)境中,單純?cè)O(shè)置文件的rwx權(quán)限無法滿足我們對(duì)安全和靈活性的需求,因此便有了SUID,SGID,SBIT的特殊權(quán)限位。這是一種對(duì)文件權(quán)限進(jìn)行設(shè)置的特殊功能,可以與一般權(quán)限同時(shí)使用,以彌補(bǔ)一般權(quán)限不能實(shí)現(xiàn)的功能。
SUID
SUID是一種對(duì)二進(jìn)制程序進(jìn)行設(shè)置的特殊權(quán)限。可以讓二進(jìn)制程序的執(zhí)行者臨時(shí)擁有屬主的權(quán)限(僅對(duì)擁有執(zhí)行權(quán)限的二進(jìn)制程序有效)。
例如:
所有用戶都可以執(zhí)行passwd命令來修改自己的用戶密碼,而用戶密碼保存在/etc/shadow文件中。仔細(xì)查看這個(gè)文件就會(huì)發(fā)現(xiàn)它默認(rèn)權(quán)限是000,也就是說除了root管理員外,所有用戶都沒有查看或編輯這個(gè)文件的權(quán)限。但是,在使用passwd命令時(shí)如果加上SUID特殊權(quán)限位,就可讓普通用戶臨時(shí)獲得程序所有者的身份,把變更的密碼信息寫入到shadow文件中。
SGID
SGID主要實(shí)現(xiàn)如下兩種功能:
①讓執(zhí)行者臨時(shí)擁有屬組的權(quán)限(對(duì)擁有執(zhí)行權(quán)限的二進(jìn)制程序進(jìn)行設(shè)置);
②在某個(gè)目錄中創(chuàng)建的文件自動(dòng)繼承該目錄的用戶組(只可以對(duì)目錄進(jìn)行設(shè)置)。
SGID的第一種功能是參考SUID而設(shè)計(jì)的,不同點(diǎn)在于執(zhí)行程序的用戶獲取的不再是文件所有者的臨時(shí)權(quán)限,而是獲取到文件所屬組的權(quán)限。舉例來說,在早期的Linux系統(tǒng)中,/dev/kmem是一個(gè)字符設(shè)備文件,用于存儲(chǔ)內(nèi)核程序要訪問的數(shù)據(jù),權(quán)限為:
cr--r-----? 1 root? system? 2,? 1 Feb 11? 2017? kmem
除了root管理員或?qū)儆趕ystem組成員外,所有用戶都沒有讀取該文件的權(quán)限。由于在平時(shí)我們需要查看系統(tǒng)的進(jìn)程狀態(tài),為了能夠獲取到進(jìn)程的狀態(tài)信息,可在用于查看系統(tǒng)進(jìn)程狀態(tài)的ps命令文件上增加SGID特殊權(quán)限位,這樣一來,由于ps命令被增加了SGID特殊權(quán)限位,所以當(dāng)用戶執(zhí)行該命令時(shí),也就臨時(shí)獲取到了system用戶組的權(quán)限,從而可以順利地讀取設(shè)備文件了。
前面我們提到,每個(gè)文件都有其歸屬的所有者和所屬組,當(dāng)創(chuàng)建或傳送一個(gè)文件后,這個(gè)文件就會(huì)自動(dòng)歸屬于執(zhí)行這個(gè)操作的用戶(即該用戶是文件的所有者),如果現(xiàn)在需要一個(gè)部門內(nèi)設(shè)置共享目錄,讓部門內(nèi)所有人員都能夠讀取目錄中的內(nèi)容,那么就可以創(chuàng)建部門共享目錄后,在該目錄上設(shè)置SGID特殊權(quán)限位。這樣,部門內(nèi)的任何人員在里面創(chuàng)建的任何文件都會(huì)歸屬于該目錄的所屬組,而不再是自己的基本用戶組。此時(shí),我們用到的就是SGID第二個(gè)功能,即在某個(gè)目錄中創(chuàng)建的文件自動(dòng)繼承該目錄的用戶組(只可以對(duì)目錄進(jìn)行設(shè)置)
在使用上述命令設(shè)置好目錄的777權(quán)限(確保普通用戶可以向其中寫入文件),并為該目錄設(shè)置了SGID特殊權(quán)限位后,就可以切換一個(gè)普通用戶,然后嘗試在該目錄中創(chuàng)建文件,并查看新創(chuàng)建的文件是否會(huì)繼承新創(chuàng)建的文件所在的目錄的所屬組名稱:
除了上面提到的SGID的這兩個(gè)功能,我們?cè)俸?jiǎn)單學(xué)習(xí)兩個(gè)權(quán)限的命令:chmod和chown
chmod命令是一個(gè)非常有用的命令,能夠用來設(shè)置文件或者目錄的權(quán)限。
格式為:chomd 【參數(shù)】權(quán)限 文件或目錄名稱
如果要把一個(gè)文件的權(quán)限設(shè)置成其所有者可讀可寫可執(zhí)行、所屬組可讀可寫、其他人沒有任何權(quán)限,則相應(yīng)的字符法表示為rwxrw----,其對(duì)應(yīng)的數(shù)字法表示為760.
通過前面的學(xué)習(xí),可以體會(huì)到數(shù)字法的簡(jiǎn)捷度
除了設(shè)置文件或目錄的權(quán)限外,還可以設(shè)置文件或目錄的所有者和所屬組,這里使用的命令為chown。
其格式為: chown 【參數(shù)】所有者:所屬組 文件或目錄名稱
chmod和chown命令是用于修改文件和權(quán)限的最常用的命令
它們還有一個(gè)特別的共性,就是針對(duì)目錄進(jìn)行操作時(shí)需要加上大寫參數(shù) -R 來表示遞歸操作,即對(duì)目錄內(nèi)所有的文件進(jìn)行整體操作。
SBIT
SBIT特殊權(quán)限位(也可以稱之為特殊權(quán)限位之粘滯位)
SBIT特殊權(quán)限位可確保用戶只能刪除自己的文件,而不能刪除其他用戶的文件。
與前面所講的SUID和SGID權(quán)限顯示方法不同,當(dāng)目錄被設(shè)置SBIT特殊權(quán)限位后,文件的其他人權(quán)限部分的x執(zhí)行權(quán)限就會(huì)被替換成t或者T,原本有x執(zhí)行權(quán)限則會(huì)寫成t,原本沒有x執(zhí)行權(quán)限則會(huì)被寫成T
?其實(shí),文件是否被刪除并不取決于自身的權(quán)限,而是看其所在目錄是否有寫入權(quán)限。我們切換到另外一個(gè)普通用戶,然后嘗試刪除這個(gè)其他人創(chuàng)建的文件就會(huì)發(fā)現(xiàn),即便讀、寫、執(zhí)行權(quán)限全開,但是由于SBIT特殊權(quán)限位的緣故,依然無法刪除這個(gè)文件:
當(dāng)然,要是也想對(duì)其他目錄來設(shè)置SBIT特殊權(quán)限位,用chomd命令就可以了。對(duì)應(yīng)的參數(shù)o+t代表設(shè)置SBIT粘滯位權(quán)限:
文件的隱藏屬性
chattr命令
chattr命令用于設(shè)置文件的隱藏權(quán)限
格式位 chattr 【參數(shù)】文件
如果想要把某個(gè)隱藏功能添加到文件上,則需要再命令后面追加“+參數(shù)”,如果想要把某個(gè)隱藏功能移出文件,則要追加“-參數(shù)”。
chattr命令可供選擇的隱藏權(quán)限參數(shù)非常豐富
| 參數(shù) | 作用 |
| i | 無法對(duì)文件進(jìn)行修改;若對(duì)目錄設(shè)置了該參數(shù),則僅能修改其中的子文件內(nèi)容而不能新建刪除文件 |
| a | 僅允許補(bǔ)充內(nèi)容,無法覆蓋/刪除內(nèi)容 |
| S | 文件內(nèi)容在變更后立即同步到硬盤(sync) |
| s | 徹底從硬盤中刪除,不可恢復(fù)(0填充原文件所在的硬盤區(qū)域) |
| A | 不再修改這個(gè)文件或目錄的最后訪問時(shí)間 |
| b | 不再修改文件或目錄的存取時(shí)間 |
| D | 檢查壓縮文件中的錯(cuò)誤 |
| d | 使用dump目錄備份時(shí)忽略本文件/目錄 |
| c | 默認(rèn)將文件或目錄進(jìn)行壓縮 |
| u | 當(dāng)刪除該文件后依然保留其在硬盤中的數(shù)據(jù),方便日后恢復(fù) |
| t | 讓文件系統(tǒng)支持尾部合并(tail-merging) |
| x | 可以直接訪問壓縮文件中的內(nèi)容 |
?我們來簡(jiǎn)單實(shí)驗(yàn)一下
我們先刪除一個(gè)普通文件,在刪除一個(gè)加權(quán)的普通文件,作為對(duì)比
lsattr命令
lsattr命令用于顯示文件的隱藏權(quán)限
格式為 lsattr 【參數(shù)】 文件
在Linux系統(tǒng)中,文件的隱藏權(quán)限必須使用lsattr命令來查看,平時(shí)使用的ls之類的命令則看不出細(xì)節(jié)
文件訪問控制列表
權(quán)限一般是針對(duì)某一類用戶設(shè)置的。
如果希望對(duì)某個(gè)指定的用戶進(jìn)行單獨(dú)的權(quán)限控制,那么就需要用到文件中的訪問控制列表(ACL)了。通俗來講,基于普通文件或目錄文件設(shè)置ACL其實(shí)就是針對(duì)指定的用戶或用戶組設(shè)置文件或目錄的操作權(quán)限。另外。如果針對(duì)某個(gè)目錄設(shè)置ACL,則目錄中的文件就會(huì)繼承其ACL;若針對(duì)文件設(shè)置了ACL,則文件不再繼承其所在目錄的ACL。
我們來簡(jiǎn)單實(shí)驗(yàn)一下,看看效果
setfacl命令
setfacl命令用于管理文件的ACL規(guī)則
格式為 setfacl 【參數(shù)】文件名稱
文件的ACL提供的是在所有者、所屬組、其他人的讀/寫/執(zhí)行的權(quán)限之外的特殊權(quán)限控制,使用setfacl命令可以針對(duì)單一用戶或者用戶組,單一文件或者目錄來進(jìn)行讀/寫執(zhí)行權(quán)限的控制。其中,針對(duì)目錄文件需要用到-R遞歸參數(shù);針對(duì)普通文件則使用-m參數(shù);如果想要?jiǎng)h除某個(gè)文件的ACL則可以使用-b參數(shù)
我們來簡(jiǎn)單演示一下設(shè)置root目錄上的權(quán)限
常用的ls命令是看不到ACL表的信息的,但卻可以看到文件的權(quán)限最后一個(gè)點(diǎn)(.)變成加號(hào)(+),這就意味著該文件已經(jīng)設(shè)置了ACL了
getfacl命令
getfacl命令用于顯示文件上設(shè)置的ACL信息
格式為:getfacl 文件名稱
Linux系統(tǒng)中的命令有一定的規(guī)律
設(shè)置ACL? setfacl
查看ACL? getfacl
su命令和sudo命令
su命令可以解決切換用戶身份的需求
su - 用戶名 之間的減號(hào)(-)代表完全切換到新的用戶
即把環(huán)境變量信息也變更為新用戶的相應(yīng)信息,而不是保留原有的信息。
root管理員切換到普通用戶是不需要密碼的,而普通用戶切換到root管理員則需要密碼
sudo命令用于給普通用戶提供額外的權(quán)限來完成原本root管理員才能完成的任務(wù)
格式: sudo 【參數(shù)】命令名稱
| 參數(shù) | 作用 |
| -h | 列出幫助信息 |
| -l | 列出當(dāng)前用戶可執(zhí)行的命令 |
| -u 用戶名或UID值 | 以指定的用戶身份執(zhí)行命令 |
| -k | 清空密碼的有效時(shí)間,下次執(zhí)行sudo時(shí)需要再次進(jìn)行密碼驗(yàn)證 |
| -b | 在后臺(tái)執(zhí)行指定的命令 |
| -p | 更改詢問密碼的提示語(yǔ) |
sudo命令有以下幾個(gè)功能:
①限制用戶執(zhí)行指定命令
②記錄用戶執(zhí)行的每一條命令
③配置文件(/etc/sudoers)提供集中的用戶管理、權(quán)限和主機(jī)等參數(shù)
④驗(yàn)證密碼的后5分鐘內(nèi)(默認(rèn)值)無須再讓用戶再次驗(yàn)證密碼
如果擔(dān)心直接修改配置文件會(huì)出現(xiàn)問題,我們可以使用sudo命令提供的visudo命令來配置用戶權(quán)限。
這條命令在配置用戶權(quán)限時(shí)將禁止多個(gè)用戶同時(shí)修改sudoers配置文件,還可對(duì)配置文件內(nèi)的參數(shù)進(jìn)行語(yǔ)法檢查,并發(fā)現(xiàn)參數(shù)錯(cuò)誤時(shí)進(jìn)行報(bào)錯(cuò)。
只有root管理員才可以使用visudo命令編輯sudo服務(wù)的配置文件
[root@DongFang ~]# visudo
?我們切換到普通用戶,執(zhí)行sudo -l 查看所有可執(zhí)行命令(下面驗(yàn)證的是該普通用戶的密碼,而不是root管理員的密碼)
?作為一個(gè)普通用戶,是肯定看不到root用戶的家目錄的,但是,經(jīng)過修改配置文件后,我們只需要在想執(zhí)行的命令前面加上sudo命令就可以了
ALL參數(shù)不太合適,因此只能賦予普通用戶具體的命令以滿足工作的需求,這也受到了必要的約束
如果需要讓某個(gè)用戶只能使用root管理員的身份執(zhí)行指定的命令,切記一定要給出該命令的絕對(duì)路徑
否則系統(tǒng)識(shí)別不出來,我們可以先使用whereis命令找出命令所對(duì)應(yīng)的保存路徑,然后把配置文件的用戶權(quán)限參數(shù)修改成相應(yīng)的路徑即可
?每次我們使用sudo前綴使用命令時(shí)。總是要驗(yàn)證普通用戶的密碼,接下來我們也可以解決這個(gè)繁瑣的步驟
驗(yàn)證密碼這個(gè)問題在Linux8上并未成功,上圖解決頻繁驗(yàn)證密碼的方法是7版本,或許有不同把,另外,有大神發(fā)現(xiàn)了錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)留言。學(xué)習(xí)學(xué)習(xí)!
總結(jié)
以上是生活随笔為你收集整理的Linux基础(文件权限续篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拖链电缆 机器人电缆_干货!拖链电缆用途
- 下一篇: linux上pyenv卸载,在Ubunt