Linux基礎(文件權限續篇)

文件的特殊權限

在復雜多變的生產環境中,單純設置文件的rwx權限無法滿足我們對安全和靈活性的需求,因此便有了SUID,SGID,SBIT的特殊權限位。這是一種對文件權限進行設置的特殊功能,可以與一般權限同時使用,以彌補一般權限不能實現的功能。

SUID

SUID是一種對二進制程序進行設置的特殊權限。可以讓二進制程序的執行者臨時擁有屬主的權限(僅對擁有執行權限的二進制程序有效)。

例如:

所有用戶都可以執行passwd命令來修改自己的用戶密碼,而用戶密碼保存在/etc/shadow文件中。仔細查看這個文件就會發現它默認權限是000,也就是說除了root管理員外,所有用戶都沒有查看或編輯這個文件的權限。但是,在使用passwd命令時如果加上SUID特殊權限位,就可讓普通用戶臨時獲得程序所有者的身份,把變更的密碼信息寫入到shadow文件中。

SGID

SGID主要實現如下兩種功能:

①讓執行者臨時擁有屬組的權限(對擁有執行權限的二進制程序進行設置);

②在某個目錄中創建的文件自動繼承該目錄的用戶組(只可以對目錄進行設置)。

SGID的第一種功能是參考SUID而設計的,不同點在于執行程序的用戶獲取的不再是文件所有者的臨時權限,而是獲取到文件所屬組的權限。舉例來說,在早期的Linux系統中,/dev/kmem是一個字符設備文件,用于存儲內核程序要訪問的數據,權限為:

cr--r-----? 1 root? system? 2,? 1 Feb 11? 2017? kmem

除了root管理員或屬于system組成員外,所有用戶都沒有讀取該文件的權限。由于在平時我們需要查看系統的進程狀態,為了能夠獲取到進程的狀態信息,可在用于查看系統進程狀態的ps命令文件上增加SGID特殊權限位,這樣一來,由于ps命令被增加了SGID特殊權限位,所以當用戶執行該命令時,也就臨時獲取到了system用戶組的權限,從而可以順利地讀取設備文件了。

前面我們提到,每個文件都有其歸屬的所有者和所屬組,當創建或傳送一個文件后,這個文件就會自動歸屬于執行這個操作的用戶(即該用戶是文件的所有者),如果現在需要一個部門內設置共享目錄,讓部門內所有人員都能夠讀取目錄中的內容,那么就可以創建部門共享目錄后,在該目錄上設置SGID特殊權限位。這樣,部門內的任何人員在里面創建的任何文件都會歸屬于該目錄的所屬組,而不再是自己的基本用戶組。此時,我們用到的就是SGID第二個功能,即在某個目錄中創建的文件自動繼承該目錄的用戶組(只可以對目錄進行設置)

在使用上述命令設置好目錄的777權限(確保普通用戶可以向其中寫入文件),并為該目錄設置了SGID特殊權限位后,就可以切換一個普通用戶,然后嘗試在該目錄中創建文件,并查看新創建的文件是否會繼承新創建的文件所在的目錄的所屬組名稱:

除了上面提到的SGID的這兩個功能,我們再簡單學習兩個權限的命令:chmod和chown

chmod命令是一個非常有用的命令,能夠用來設置文件或者目錄的權限。

格式為:chomd 【參數】權限 文件或目錄名稱

如果要把一個文件的權限設置成其所有者可讀可寫可執行、所屬組可讀可寫、其他人沒有任何權限,則相應的字符法表示為rwxrw----,其對應的數字法表示為760.

通過前面的學習,可以體會到數字法的簡捷度

除了設置文件或目錄的權限外,還可以設置文件或目錄的所有者和所屬組,這里使用的命令為chown。

其格式為: chown 【參數】所有者:所屬組 文件或目錄名稱

chmod和chown命令是用于修改文件和權限的最常用的命令

它們還有一個特別的共性,就是針對目錄進行操作時需要加上大寫參數 -R 來表示遞歸操作,即對目錄內所有的文件進行整體操作。

SBIT

SBIT特殊權限位(也可以稱之為特殊權限位之粘滯位)

SBIT特殊權限位可確保用戶只能刪除自己的文件,而不能刪除其他用戶的文件。

與前面所講的SUID和SGID權限顯示方法不同,當目錄被設置SBIT特殊權限位后,文件的其他人權限部分的x執行權限就會被替換成t或者T,原本有x執行權限則會寫成t,原本沒有x執行權限則會被寫成T

?其實,文件是否被刪除并不取決于自身的權限,而是看其所在目錄是否有寫入權限。我們切換到另外一個普通用戶,然后嘗試刪除這個其他人創建的文件就會發現,即便讀、寫、執行權限全開,但是由于SBIT特殊權限位的緣故,依然無法刪除這個文件:

當然,要是也想對其他目錄來設置SBIT特殊權限位,用chomd命令就可以了。對應的參數o+t代表設置SBIT粘滯位權限:

文件的隱藏屬性

chattr命令

chattr命令用于設置文件的隱藏權限

格式位 chattr 【參數】文件

如果想要把某個隱藏功能添加到文件上,則需要再命令后面追加“+參數”,如果想要把某個隱藏功能移出文件,則要追加“-參數”。

chattr命令可供選擇的隱藏權限參數非常豐富

參數作用
i無法對文件進行修改;若對目錄設置了該參數,則僅能修改其中的子文件內容而不能新建刪除文件
a僅允許補充內容,無法覆蓋/刪除內容
S文件內容在變更后立即同步到硬盤(sync)
s徹底從硬盤中刪除,不可恢復(0填充原文件所在的硬盤區域)
A不再修改這個文件或目錄的最后訪問時間
b不再修改文件或目錄的存取時間
D檢查壓縮文件中的錯誤
d使用dump目錄備份時忽略本文件/目錄
c默認將文件或目錄進行壓縮
u當刪除該文件后依然保留其在硬盤中的數據,方便日后恢復
t讓文件系統支持尾部合并(tail-merging)
x可以直接訪問壓縮文件中的內容

?我們來簡單實驗一下

我們先刪除一個普通文件,在刪除一個加權的普通文件,作為對比

lsattr命令

lsattr命令用于顯示文件的隱藏權限

格式為 lsattr 【參數】 文件

在Linux系統中,文件的隱藏權限必須使用lsattr命令來查看,平時使用的ls之類的命令則看不出細節

文件訪問控制列表

權限一般是針對某一類用戶設置的。

如果希望對某個指定的用戶進行單獨的權限控制,那么就需要用到文件中的訪問控制列表(ACL)了。通俗來講,基于普通文件或目錄文件設置ACL其實就是針對指定的用戶或用戶組設置文件或目錄的操作權限。另外。如果針對某個目錄設置ACL,則目錄中的文件就會繼承其ACL;若針對文件設置了ACL,則文件不再繼承其所在目錄的ACL。

我們來簡單實驗一下,看看效果

setfacl命令

setfacl命令用于管理文件的ACL規則

格式為 setfacl 【參數】文件名稱

文件的ACL提供的是在所有者、所屬組、其他人的讀/寫/執行的權限之外的特殊權限控制,使用setfacl命令可以針對單一用戶或者用戶組,單一文件或者目錄來進行讀/寫執行權限的控制。其中,針對目錄文件需要用到-R遞歸參數;針對普通文件則使用-m參數;如果想要刪除某個文件的ACL則可以使用-b參數

我們來簡單演示一下設置root目錄上的權限

常用的ls命令是看不到ACL表的信息的,但卻可以看到文件的權限最后一個點(.)變成加號(+),這就意味著該文件已經設置了ACL了

getfacl命令

getfacl命令用于顯示文件上設置的ACL信息

格式為:getfacl 文件名稱

Linux系統中的命令有一定的規律

設置ACL? setfacl

查看ACL? getfacl

su命令和sudo命令

su命令可以解決切換用戶身份的需求

su - 用戶名 之間的減號(-)代表完全切換到新的用戶

即把環境變量信息也變更為新用戶的相應信息,而不是保留原有的信息。

root管理員切換到普通用戶是不需要密碼的,而普通用戶切換到root管理員則需要密碼

sudo命令用于給普通用戶提供額外的權限來完成原本root管理員才能完成的任務

格式: sudo 【參數】命令名稱

參數作用
-h列出幫助信息
-l列出當前用戶可執行的命令
-u 用戶名或UID值以指定的用戶身份執行命令
-k清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證
-b在后臺執行指定的命令
-p更改詢問密碼的提示語

sudo命令有以下幾個功能:

①限制用戶執行指定命令

②記錄用戶執行的每一條命令

③配置文件(/etc/sudoers)提供集中的用戶管理、權限和主機等參數

④驗證密碼的后5分鐘內(默認值)無須再讓用戶再次驗證密碼

如果擔心直接修改配置文件會出現問題,我們可以使用sudo命令提供的visudo命令來配置用戶權限。

這條命令在配置用戶權限時將禁止多個用戶同時修改sudoers配置文件,還可對配置文件內的參數進行語法檢查,并發現參數錯誤時進行報錯。

只有root管理員才可以使用visudo命令編輯sudo服務的配置文件

[root@DongFang ~]# visudo

?我們切換到普通用戶,執行sudo -l 查看所有可執行命令(下面驗證的是該普通用戶的密碼,而不是root管理員的密碼)

?作為一個普通用戶,是肯定看不到root用戶的家目錄的,但是,經過修改配置文件后,我們只需要在想執行的命令前面加上sudo命令就可以了

ALL參數不太合適,因此只能賦予普通用戶具體的命令以滿足工作的需求,這也受到了必要的約束

如果需要讓某個用戶只能使用root管理員的身份執行指定的命令,切記一定要給出該命令的絕對路徑

否則系統識別不出來,我們可以先使用whereis命令找出命令所對應的保存路徑,然后把配置文件的用戶權限參數修改成相應的路徑即可

?每次我們使用sudo前綴使用命令時。總是要驗證普通用戶的密碼,接下來我們也可以解決這個繁瑣的步驟

驗證密碼這個問題在Linux8上并未成功,上圖解決頻繁驗證密碼的方法是7版本,或許有不同把,另外,有大神發現了錯誤,請在評論區留言。學習學習!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux基礎(存儲結構和磁盤劃分)

一切從“/”開始 在Linux系統中,目錄、字符設備、塊設備、套接字、打印機等都被抽象成了文件,一切皆為件 與windows操作系統不同,Linux系統內不存在C/D/E/F盤等,一切文件都是從根(/)目錄開始的 Linux系統…

軟件工程(需求分析)

需求分析 為了開發出真正滿足用戶需求的軟件產品,首先必須知道用戶的需求。對軟件需求的深人理解是軟件開發工作獲得成功的前提條件,不論人們把設計和編碼工作做得如何出色,不能真正滿足用戶需求的程序只會令用戶失望.給開發者帶來煩惱。 需求分析是軟…

TensorFlow構建二維數據擬合模型(1)

知識圖譜 TensorFlow運行機制 TensorFlow是基于計算圖的深度學習編程模型 Tensor表示張量,其實質上是某種類型的多維數組 Flow表示基于數據流圖的計算,實質上是張量在不同節點間的轉化過程。 在TensorFlow中,計算圖中的節點稱為OP&…

Qt圖形界面編程入門(標簽與槽機制習題分享)

標簽對象初始顯示0&#xff0c;每次單擊標簽對象后&#xff0c;其顯示內容就加1&#xff0c;依次變為1、2、3等。 #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QPushButton> //包含命令按鈕類 #include "MyLabel.h"class Dialo…

js中執行到一個if就停止的代碼_Node 中如何引入一個模塊及其細節

在 node 環境中&#xff0c;有兩個內置的全局變量無需引入即可直接使用&#xff0c;并且無處不見&#xff0c;它們構成了 nodejs 的模塊體系: module 與 require。以下是一個簡單的示例const fs require(fs)const add (x, y) > x ymodule.exports add雖然它們在平常使用…

二級MS Office公共基礎知識錯題本(1)

1&#xff0c;順序程序具有順序性、封閉性和可再現性的特點&#xff0c;不具備并發性 2&#xff0c;為了降低算法的空間復雜度&#xff0c;主要應減少輸入數據所占的存儲空間以及額外空間&#xff0c;通常采用壓編存儲技術。 3&#xff0c;樹的總的結點數為樹中所有結點的度數…

c++ file* 句柄泄漏_C++核心指南:P.8 勿泄漏任務資源

P.8: 勿泄漏任務資源原因隨著時間的推移&#xff0c;即使是資源的緩慢增長也會耗盡這些資源的可用性&#xff0c;這對于長時間運行的程序特別重要&#xff0c;但也是負責任的編程行為的基本部分。糟糕的例子void f(char* name){ FILE* input fopen(name, "r"); // .…

數據規范化、實體-聯系圖、狀態轉換圖、層次方框圖、Warnier圖、IPO圖及驗證軟件需求

數據規范化 軟件系統經常使用各種長期保存的信息&#xff0c;這些信息通常以一定方式組織并存儲在數據庫或文件中&#xff0c;為減少數據冗余&#xff0c;避免出現插入異常或刪除異常&#xff0c;簡化修改數據的過程,通常需要把數據結構規范化。 通常用“范式(normal forms)”…

python和c混合編程 gil,如何在python中使用C擴展來解決GIL

I want to run a cpu intensive program in Python across multiple cores and am trying to figure out how to write C extensions to do this. Are there any code samples or tutorials on this?解決方案You can already break a Python program into multiple processes.…

Linux基礎(iptables與firewalld防火墻)

iptables 在早期的Linux系統中&#xff0c;默認使用的是iptables防火墻管理服務來配置防火墻。盡管新型的fierwalld防火墻管理服務已經被投入使用多年&#xff0c;但是大量的企業在生產環境中依然出于各種原因而繼續使用iptables。 策略與規則鏈 防火墻會從上至下的順序來讀…

虛擬跳線軟件干什么用的_瘋狂刷單!用違法軟件生成虛擬手機號,“騎手”半年“刷單”牟利60余萬,百米內竟有萬筆訂單 | 申晨間...

來源&#xff1a;新聞晨報 記者&#xff1a;吳藝璇借助違法軟件生成虛擬手機號碼&#xff0c;利用平臺審核漏洞大量注冊用戶&#xff0c;大量“刷單”騙取平臺的返現和購物補貼&#xff0c;半年內瘋狂刷1.8萬余單&#xff0c;累計牟利60余萬元。近日&#xff0c;在市公安局刑偵…

軟件工程(總體設計①設計過程)

經過需求分析&#xff08;https://blog.csdn.net/weixin_45626468/article/details/115324885&#xff09;階段的工作&#xff0c;系統必選“做什么”已經清楚了&#xff0c;現在是決定“怎樣做”的時候了。 總體設計的基本目的就是回答“概況地說&#xff0c;系統應該如何實現…

ygo游戲王卡組_ACG大科普(7)游戲王

大家是否在小時候接觸過一種卡片類似這種的 這就是今天的主角游戲王。 背景 1996年&#xff0c;《游戲王》漫畫開始在集英社《周刊少年Jump》連載。 1998年&#xff0c;Bandai推出以《游戲王》原作中登場的集換卡牌游戲“M&W”為題材的集換卡牌。 采用Bandai的卡片自動販賣…

Qt圖形界面編程入門(基本窗口及控件)

基本窗口類QWidget QWidget是所有窗體部件的基類&#xff0c;例如對話框類&#xff0c;主窗體類&#xff0c;以及其他諸如按鈕&#xff0c;編輯框&#xff0c;標簽等等都是由QWidget派生得到&#xff0c;QWidget擁有的方法往往都可以在其他子類中使用。 窗體的幾何尺寸分為包…

背景se_盤點那些RPG手游中主角的背景故事,越悲情越強大

RPG游戲一直以代入感超強的游戲方式來吸引玩家&#xff0c;用超越現實的藝術手段把玩家帶入到虛擬的游戲世界&#xff0c;讓玩家擔任不同的社會角色來去經歷不同的虛擬故事&#xff0c;體驗多種人生經歷&#xff0c;想要扮演任何角色都是有可能的。當然在RPG游戲中也有好壞之分…

TensorFlow構建二維數據擬合模型(2)

變量的定義和使用 變量的定義與初始化 TensorFlow中&#xff0c;變量是一種特殊的張量&#xff0c;其值可以是一個任意類型的形狀的張量。 與其他張量不同&#xff0c;變量存在于單個回話調用的上下文之外&#xff0c;主要作用是保存和更新模型中的參數。 聲明變量通常使用…

c++用牛頓法開多次根_望遠鏡的歷史之三:大神出世,改變望遠鏡歷史的竟然是牛頓...

上次我們說到格里高利望遠鏡有點畫蛇添足&#xff0c;那么格里高利望遠鏡添了什么呢&#xff1f;格里高利望遠鏡格里高利望遠鏡觀測的圖像都是正立的&#xff0c;這就意味著要采用多個凹面反射鏡&#xff0c;而當時凹面反射鏡磨制不易&#xff0c;無論是多大的科學家都要親自動…

python浮點型精度損失問題_解決float型數據精度損失問題

問題&#xff1a;浮點型數據存儲方式會導致數據精度損失&#xff0c;增大計算誤差。float fval 0.45;  // 單步調試發現其真實值為&#xff1a;0.449999988double dval 0.45; // 單步調試發現其真實值為&#xff1a;0.45000000000000001當很多個這樣的單精度浮點型數據進行…

Linux配置本地yum源(RHEL8)

https://www.cnblogs.com/itwangqiang/p/13391401.html

如何把照片正面變成反面_各國簽證照片要求大全 (含模板)

對于不是很熟悉簽證的小伙伴來說&#xff0c;面對全球那么多國家的簽證而且每張簽證照片的規格不同為此我們為您整理了各國簽證照片要求大全 東南亞國家的簽證照要求基本相同&#xff0c;就以泰國為例&#xff0c;告訴大家簽證照的注意事項。“泰國&#xff0c;新加坡&#xff…