亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux權限原理是什么

發布時間:2022-01-27 15:56:29 來源:億速云 閱讀:185 作者:iii 欄目:開發技術

這篇文章主要介紹“Linux權限原理是什么”,在日常操作中,相信很多人在Linux權限原理是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux權限原理是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Linux權限原理是什么

安全模型

在 Linux 系統中,我們所有的操作實質都是在進行進程訪問文件的操作。我們訪問文件需要先取得相應的訪問權限,而訪問權限是通過 Linux 系統中的安全模型獲得的。

對于 Linux 系統中的安全模型,我們需要知道下面兩點:

  1. Linux 系統上最初的安全模型叫 DAC, 全稱是 Discretionary Access Control ,翻譯為自主訪問控制。

  2. 后來又增加設計了一個新的安全模型叫 MAC, 全稱是 Mandatory Access Control, 翻譯為強制訪問控制。

注意, MAC 和 DAC 不是互斥的, DAC 是最基本的安全模型,也是通常我們最常用到的訪問控制機制是 Linux 必須具有的功能, 而 MAC 是構建在 DAC 之上的加強安全機制,屬于可選模塊。訪問前, Linux 系統通常都是先做 DAC 檢查, 如果沒有通過則操作直接失敗 ; 如果通過 DAC 檢查并且系統支持 MAC 模塊,再做 MAC 權限檢查。

為區分兩者,我們將支持 MAC 的 Linux 系統稱作 SELinux, 表示它是針對 Linux 的安全加強系統。

這里,我們將講述 Linux 系統中的 DAC 安全模型。

DAC 安全模型

DAC 的核心內容是:在 Linux 中,進程理論上所擁有的權限與執行它的用戶的權限相同。其中涉及的一切內容,都是圍繞這個核心進行的。

用戶和組 ID 信息控制

用戶、組、口令信息

通過 /etc/passwd 和 /etc/group 保存用戶和組信息,通過 /etc/shadow 保存密碼口令及其變動信息, 每行一條記錄。

用戶和組分別用 UID 和 GID 表示,一個用戶可以同時屬于多個組,默認每個用戶必屬于一個與之 UID 同值同名的 GID 。

對于 /etc/passwd , 每條記錄字段分別為 用戶名: 口令(在 /etc/shadow 加密保存):UID:GID(默認 UID): 描述注釋: 主目錄: 登錄 shell(第一個運行的程序)

對于 /etc/group , 每條記錄字段分別為 組名:口令(一般不存在組口令):GID:組成員用戶列表(逗號分割的用戶 UID 列表)

對于 /etc/shadow ,每條記錄字段分別為: 登錄名: 加密口令: 最后一次修改時間: 最小時間間隔: 最大時間間隔: 警告時間: 不活動時間:

舉例

以下是對用戶和組信息的舉例。 /etc/shadow 中的口令信息為加密存儲,不舉例。

Linux權限原理是什么

文件權限控制信息

文件類型

Linux 中的文件有如下類型:

  • 普通文件, 又包括文本文件和二進制文件, 可用 touch 創建;

  • 套接字文件, 用于網絡通訊,一般由應用程序在執行中間接創建;

  • 管道文件是有名管道,而非無名管道, 可用 mkfifo 創建;

  • 字符文件和塊文件均為設備文件, 可用 mknod 創建;

  • 鏈接文件是軟鏈接文件,而非硬鏈接文件, 可用 ln 創建。

訪問權限控制組

分為三組進行控制:

  • user 包含對文件屬主設定的權限

  • group 包含對文件屬組設定的權限

  • others 包含對其他者設定的權限

可設定的權限

下面給出常見(但非全部)的權限值, 包括:

  • r 表示具有讀權限。

  • w 表示具有寫權限。

  • x 一般針對可執行文件 / 目錄,表示具有執行 / 搜索權限。

  • s 一般針對可執行文件 / 目錄,表示具有賦予文件屬主權限的權限,只有 user 和 group 組可以設置該權限。

  • t 一般針對目錄,設置粘滯位后,有權限的用戶只能寫、刪除自己的文件, 否則可寫、刪除目錄所有文件。舊系統還表示可執行文件運行后將 text 拷貝到交換區提升速度。

舉例

通過 ls -l 可以查看到其文件類型及權限,通過 chmod 修改權限。

舉例來說,

Linux權限原理是什么

輸出中, 第 1 個字符表示文件類型,其中,普通文件 (-)、目錄文件 (d)、套接字文件 (s),管道文件 (p),字符文件 (c),塊文件 (b),鏈接文件 (l); 第 2 個字符開始的 -rwxr-xr-x 部分表示文件的權限位,共有 9 位。

對于文件 /usr/bin/qemu-i386 , 這個權限控制的含義是:

  1. 第 2~4 位的 rwx 表示該文件可被它的 owner (屬主)以 r 或 w 或 x 的權限訪問。

  2. 第 5~7 位的 r-x 表示該文件可被與該文件同一屬組的用戶以 r 或 x 的權限訪問

  3. 第 8~10 位的 r-x 表示該文件可被其它未知用戶以 r 或 x 的權限訪問。

對于 test/, test2/, test3/ 設定的權限:

  1. r,w,x 權限對每一權限控制組的權限用一位 8 進制來表示; 例如: 755 表示 rwxr-xr-x 。

  2. s,t 權限會替代 x 位置顯示;設定 s,t 權限則需在對應的、用于控制 r,w,x 的 8 進制權限控制組前追加數字; s 權限用于屬主屬組控制, t 用于其它控制。

  3. 設定屬主 s 需追加 4, 設定屬組 s 追加 2, 設定其它者 t 權限追加 1 ; 例如前面對 test/ 設定 t, 則用 1775, 表示 rwxrwxr-t 。

進程權限控制信息

進程權限

對于進程,有如下屬性與文件訪問權限相關:

  • effective user id : 進程訪問文件權限相關的 UID (簡寫為 euid )。

  • effective group id : 進程訪問文件權限相關的 GID (簡寫為 egid )。

  • real user id : 創建該進程的用戶登錄系統時的 UID (簡寫為 ruid )。

  • real group id : 創建該進程的用戶登錄系統時的 GID (簡寫為 rgid )。

  • saved set user id : 拷貝自 euid 。

  • saved set group id : 拷貝自 egid 。

舉例

我們可以使用 ps 和 top 選擇查看具有 euid 和 ruid 的進程。或者通過 top 來查看進程的 euid 和 ruid

通過 top 來查看的例子:

首先輸入 top 得到類似如下

Linux權限原理是什么

這里通過 -d 選項延長 top 的刷新頻率便于操作。此處可見,只有 USER 字段,表示相應進程的 effective user id.

打開 read user id 的顯示選項:

a. 在 top 命令運行期間,輸入 f, 可以看見類似如下行:

b. 輸入 c 即可打開 Real user name 的顯示開關。

c. 最后 Return 回車回到 top 中,即可看到 real user id 的選項。此時輸入o,可調整列次序。最終我們可看到包含effective user idreal user id的輸出如下:

進程訪問文件的權限控制策略

規則

進程訪問文件大致權限控制策略

對于進程訪問文件而言,最重要的是 euid, 所以其權限屬性均以 euid 為 “中心”。

  • 進程的 euid 一般默認即為 其 ruid 值

  • 若可執行文件的可執行權限位為 s ,進程對其調用 exec 后,其 euid 被設置為該可執行文件的 user id

  • 進程的 saved set user id 拷貝自 euid.

  • 當進程的 euid 與文件的 user id 匹配時,進程才具有文件 user 權限位所設定的權限

  • 組權限 egid 的控制規則類似。

通過 exec 執行文件修改權限屬性

通過 exec 調用可執行文件之時:

  • 進程 ruid 值始終不變;

  • saved set-user ID 始終來自 euid ;

  • euid 值取決于文件的 set-user-ID 位是否被設置。

如下:

通過 setuid(uid) 系統調用修改權限屬性

通過 setuid(uid) 修改權限屬性之時:

  • superuser 可順利修改 ruid, euid, saved set-user ID ;

  • unprivileged user 只能在 uid 與 ruid 相等時修改 euid, 其它無法修改。

舉例

再舉幾個比較特別的例子:

設置了 set-user-id

Linux權限原理是什么

如前所述,這個輸出的含義是,對于 /usr/bin/sudo 文件,

  • 第 1~3 位的 rws 表示該文件可被它的 owner(屬主)以 r 或 w 或 s 的權限訪問

  • 第 4~6 位的 r-x 表示該文件可被與該文件同一屬組的用戶以 r 或 x 的權限訪問。

  • 第 7~9 位的 r-x 表示該文件可被其它未知用戶以 r 或 x 的權限訪問。

這樣設置之后,對于 owner,具有讀、寫、執行權限,這一點沒有什么不同。但是對于不屬于 root 組的普通用戶進程來說,卻大不相同。

普通用戶進程執行 sudo 命令時通過其 others 中的 x 獲得執行權限,再通過 user 中的 s 使得普通用戶進程臨時具有了 sudo 可執行文件屬主 ( root ) 的權限,即超級權限。

這也是為什么通過 sudo 命令就可以讓普通用戶執行許多管理員權限的命令的原因。

設置了 stick-bit

Linux權限原理是什么

這樣設置之后,對于 /tmp 目錄,任何人都具有讀、寫、執行權限,這一點沒有什么不同。但是對于 others 部分設置了粘滯位 t, 其功能卻大不相同。

若目錄沒設置粘滯位,任何對目錄有寫權限者都則可刪除其中任何文件和子目錄,即使他不是相應文件的所有者,也沒有讀或寫許可 ; 設置粘滯位后,用戶就只能寫或刪除屬于他的文件和子目錄。

這也是為什么任何人都能向 /tmp 目錄寫文件、目錄,卻只能寫和刪除自己擁有的文件或目錄的原因。

舉一個 man 程序的應用片斷,描述 set-user-id 和 saved set-user-id 的使用

man 程序可以用來顯示在線幫助手冊, man 程序可以被安裝指定 set-user-ID 或者 set-group-ID 為一個指定的用戶或者組。

man 程序可以讀取或者覆蓋某些位置的文件,這一般由一個配置文件 (通常是 /etc/man.config 或者 /etc/manpath.config ) 或者命令行選項來進行配置。

man 程序可能會執行一些其它的命令來處理包含顯示的 man 手冊頁的文件。

為防止處理出錯, man 會從兩個特權之間進行切換:運行 man 命令的用戶特權,以及 man 程序的擁有者的特權。

需要抓住的主線:當只執行 man 之時,進程特權就是 man 用戶的特權, 當通過 man 執行子進程(如通過 !bash 引出 shell 命令)時,用戶切換為當前用戶,執行完又切換回去。

過程如下:

  1. 假設 man 程序文件被用戶 man 所擁有,并且已經被設置了它的 set-user-ID 位,當我們 exec 它的時候,我們有如下情況:– real user ID = 我們的用戶 UID– effective user ID = man 用戶 UID– saved set-user-ID = man 用戶 UID

  2. man 程序會訪問需要的配置文件和 man 手冊頁。這些文件由 man 用戶所擁有,但是由于 effective user ID 是 man, 文件的訪問就被允許了。

  3. 在 man 為我們運行任何命令的時候,它會調用 setuid(getuid())) (getuid() 返回的是 real user id).因為我們不是 superuser 進程,這個變化只能改變 effective user ID. 我們會有如下情況:現在 man 進程運行的時候把我們得 UID 作為它的 effective user ID. 這也就是說,我們只能訪問我們擁有自己權限的文件。也就是說,它能夠代表我們安全地執行任何 filter.– real user ID = 我們的用戶 UID(不會被改變)– effective user ID = 我們的用戶 UID– saved set-user-ID = man 的用戶 UID(不會被改變)

  4. 當 filter 做完了的時候, man 會調用 setuid(euid).這里, euid 是 man 用戶的 UID.(這個 ID 是通過 man 調用 geteuid 來保存的) 這個調用是可以的,因為 setuid 的參數和 saved set-user-ID 是相等的。(這也就是為什么我們需要 saved set-user-ID). 這時候我們會有如下情況:– real user ID = 我們的用戶 UID(不會被改變)– effective user ID = man 的 UID– saved set-user-ID = man 的用戶 UID(不會被改變)

  5. 由于 effective user ID 是 man, 現在 man 程序可以操作它自己的文件了。通過這樣使用 saved set-user-ID, 我們可以在進程開始和結束的時候通過程序文件的 set-user-ID 來使用額外的權限。然而,期間我們卻是以我們自己的權限運行的。如果我們無法在最后切換回 saved set-user-ID, 我們就可能會在我們運行的時候保留額外的權限。

下面我們來看看如果 man 啟動一個 shell 的時候會發生什么:

  • 這里的 shell 是 man 使用 fork 和 exec 來啟動的。

  • 因為這時 real user ID 和 effective user ID 都是我們的普通用戶 UID(參見 step3), 所以 shell 沒有其它額外的權限.

  • 啟動的 shell 無法訪問 man 的 saved set-user-ID(man) , 因為 shell 的 saved set-user-ID 是由 exec 從 effective user ID 拷貝過來的。

  • 在執行 exec 的子進程 ( shell ) 中,所有的 user ID 都是我們的普通用戶 ID.

實際上,我們描述 man 使用 setuid 函數的方法不是特別正確,因為程序可能會 set-user-ID 為 root . 這時候, setuid 會把所有三種 uid 都變成你設置的 id,但是我們只需要設置 effective user ID。

到此,關于“Linux權限原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长海县| 清流县| 平凉市| 上栗县| 抚顺县| 蒙城县| 津市市| 昭平县| 黎平县| 嘉祥县| 涿鹿县| 察雅县| 江西省| 察隅县| 无棣县| 日土县| 开封市| 炉霍县| 宁远县| 灯塔市| 桂东县| 阳新县| 合川市| 贵德县| 府谷县| 耿马| 乐都县| 商都县| 五常市| 广德县| 清镇市| 景德镇市| 都江堰市| 鄂尔多斯市| 望谟县| 渭南市| 读书| 伊吾县| 海门市| 响水县| 呼图壁县|