深入理解 Linux 權限管理:從 Shell 到文件權限

🌼🌼 在 Linux 系統中,權限是保障系統安全與穩定的核心之一。每個操作都可能涉及權限的管理和控制,特別是當你開始以不同用戶的身份進行操作時。本文將通過生動的比喻與詳細的技術解析,帶你一起深入理解 Linux 權限系統的運作原理。

📖 什么是 Shell?

Shell 是 Linux 操作系統中的一個中間層,類似于一個橋梁,連接了用戶與操作系統的內核(kernel)。我們平時通過命令行輸入的指令,都是通過 Shell 來傳遞給內核執行的。你可以把它想象成一個助手,它幫你傳達命令并把執行結果反饋回來。

Shell 比喻:小明和王婆的故事

假設我們有以下人物:

  • 小明:用戶,想要完成一些操作。

  • 王婆:Shell,作為一個中介,負責傳遞小明的需求。

  • 小美:操作系統,最終接收命令并執行。

  • 小王:權限限制,可能會阻止命令的執行。

  • 村長:超級用戶(root),可以直接進行任何操作。

場景一:命令執行成功

小明讓王婆去做媒,王婆派出實習生去找到小美,小美同意了,任務完成。這里,小明的操作沒有受到任何權限限制。

場景二:命令執行失敗

小明讓王婆去做媒,但小美已經和小王在一起了。王婆知道此事不能成,因此拒絕了命令并反饋“Permission Denied”(權限拒絕)。在 Linux 中,這種情況類似于普通用戶沒有足夠權限去操作系統中的文件或資源。

場景三:超級用戶的特權

小明非常喜歡小美,他求助于村長(root)。村長派王婆去做媒,這次王婆不受限制,能夠順利完成任務。這里的超級用戶(root)可以無視所有權限限制,執行任何操作。?

📃 Shell 的作用

Shell 作為操作系統與用戶之間的中介,承擔了以下幾項重要任務:

  1. 命令傳遞:Shell 將用戶輸入的命令傳遞給內核,并返回執行結果。

  2. 創建子進程:Shell 在執行命令時會創建子進程,確保操作不直接影響主進程。

  3. 權限管理:Shell 基于用戶的權限,決定是否可以執行某個命令。

通過 Shell,Linux 系統能夠根據用戶的不同權限,決定是否執行某些操作。

Linux下有兩種用戶:

超級用戶(root)普通用戶。

超級用戶:可以再linux系統下做任何事情,不受限制

普通用戶:在linux下做有限的事情。

超級用戶的命令提示符是“#”,普通用戶的命令提示符是“$”。

命令:su [用戶名]

功能:切換用戶。例如,要從root用戶切換到普通用戶user,則使用 su user。 要從普通用戶user切換到root用戶則使用 su root(root可以省略),此時系統會提示輸入root用戶的口令

?

用戶分類:User, Group 和 Others

在 Linux 中,文件和目錄的權限是針對不同用戶角色設定的。主要有三種用戶分類:

  • User(u):文件的擁有者。通常,文件的創建者是該文件的擁有者。

  • Group(g):文件所屬的用戶組。用戶可以通過將文件與特定組關聯,給組內成員設置權限。

  • Others(o):除了文件擁有者和所屬組外的所有用戶。

每個用戶角色可以被分配不同的權限(讀、寫、執行),通過這種權限組合來控制文件和目錄的訪問。以下是常見的權限組合表示:

  • rwxr-xr--:表示文件擁有者具有讀、寫、執行權限;組用戶具有讀、執行權限;其他用戶只有讀權限。

文件權限

在 Linux 系統中,文件權限決定了用戶對文件的訪問權限,包括讀取文件內容、修改文件內容和執行文件。文件權限主要有三種:讀權限(r)、寫權限(w)和執行權限(x)。

1. 文件權限的三種類型
  • 讀權限(r)

    • 作用:允許用戶查看文件內容。

    • 適用:當文件具有讀權限時,用戶可以使用 catless 等命令查看文件內容。

  • 寫權限(w)

    • 作用:允許用戶修改文件內容。

    • 適用:當文件具有寫權限時,用戶可以編輯文件、添加內容或刪除內容。

  • 執行權限(x)

    • 作用:允許用戶執行文件(如腳本或程序)。

    • 適用:當文件具有執行權限時,用戶可以通過命令行運行該文件(如執行 .sh 腳本或二進制文件)。

2. 文件的權限表示

文件的權限使用 rwx 表示,其中:

  • r(read)表示讀權限。

  • w(write)表示寫權限。

  • x(execute)表示執行權限。

例如,文件權限 rwxr-xr-- 表示:

  • 文件擁有者(User)具有讀、寫、執行權限(rwx)。

  • 所屬組(Group)具有讀、執行權限(r-x)。

  • 其他用戶(Others)具有讀權限(r--)。


目錄權限

目錄的權限控制與文件略有不同。目錄權限決定了用戶能否訪問目錄以及在目錄中執行哪些操作。

1. 目錄權限的三種類型
  • 讀權限(r)

    • 作用:允許用戶列出目錄中的文件。

    • 適用:當目錄具有讀權限時,用戶可以使用 ls 命令查看目錄中的文件名。

  • 寫權限(w)

    • 作用:允許用戶在目錄中創建、刪除和重命名文件。

    • 適用:當目錄具有寫權限時,用戶可以在該目錄內添加或刪除文件,修改目錄中文件的名稱。

  • 執行權限(x)

    • 作用:允許用戶進入目錄,進行文件查找和訪問。

    • 適用:當目錄具有執行權限時,用戶可以使用 cd 命令進入該目錄并訪問該目錄中的文件。如果沒有執行權限,用戶即使知道目錄中的文件名,也無法訪問該文件。

    • 沒有讀權限不能使用ls系列列出目錄的文件,沒有寫權限不能在目錄中創建,刪除文件,沒有執行權限就不能進入目錄。

2. 目錄權限與文件權限的差異
  • 對于文件,執行權限 使文件可以被運行或執行;

  • 對于目錄,執行權限 使用戶能夠進入目錄并訪問目錄中的文件,沒有執行權限 時,用戶不能進入該目錄。

例如:

  • 如果一個目錄的權限是 r--rw-,并且沒有執行權限,則用戶無法進入該目錄,即使知道目錄中的文件名;

  • 如果一個目錄的權限是 --x,即便沒有讀權限,用戶仍然可以進入目錄,并通過文件的完整路徑訪問其中的文件,但無法列出目錄中的文件名。

權限掩碼(umask)簡介

權限掩碼(umask)是一個用于控制新創建的文件或目錄的默認權限的工具。它通過掩蔽(屏蔽)掉默認的權限值,來決定文件或目錄在創建時所能獲得的權限。

什么是權限掩碼(umask)

umask用戶文件創建權限的屏蔽值,其作用是限制或關閉某些權限位。umask 并不是直接賦予文件或目錄某種權限,而是通過對默認權限進行屏蔽來減少一些權限。

每個文件或目錄在創建時,都會先有一組默認的權限(通常文件是 666,目錄是 777),然后根據當前設置的掩碼值(umask)來決定實際的權限。掩碼值(前取反)通過 按位與運算(AND)與默認權限相結合,從而決定最終的權限。

默認權限和掩碼
  1. 文件默認權限666(即 rw-rw-rw-),表示創建文件時,所有用戶角色都有 權限,但沒有 執行 權限。

  2. 目錄默認權限777(即 rwxrwxrwx),表示創建目錄時,所有用戶角色都有 執行 權限。

掩碼(umask)值

umask 值是一個 三位八進制數,每一位數字代表不同角色的權限屏蔽情況。它控制著默認權限中哪些權限被禁止。

  • 第一個數字:文件擁有者的權限

  • 第二個數字:文件所屬組的權限

  • 第三個數字:其他用戶的權限

掩碼值的每一位可以是 07 之間的數字,對應以下權限屏蔽情況:

  • 0:不屏蔽任何權限

  • 1:屏蔽 執行 權限

  • 2:屏蔽 權限

  • 3:屏蔽 執行 權限

  • 4:屏蔽 權限

  • 5:屏蔽 執行 權限

  • 6:屏蔽 權限

  • 7:屏蔽 執行 權限

如何計算掩碼

掩碼是對默認權限進行 "屏蔽" 的值。默認權限為 666(文件)和 777(目錄)。掩碼通過 "取反" 和 "按位與運算" 來決定實際的權限。

舉個例子:

  • 掩碼值:022(一般的默認掩碼值)

    • (默認文件權限:666(即 rw-rw-rw-

    • 默認目錄權限:777(即 rwxrwxrwx

    掩碼取反:

    • 掩碼 022 取反為 755

    按位與運算計算文件權限:

    默認文件權限(666): rw-rw-rw- 掩碼取反(755): rwxr-xr-x 計算結果:rw-r--r--

    結果是文件權限為 rw-r--r--(644即文件擁有者有讀寫權限,所屬組和其他用戶只有讀權限)。

    按位與運算計算目錄權限:

    默認目錄權限(777): rwxrwxrwx 掩碼取反(755): rwxr-xr-x 計算結果:rwxr-xr-x

    結果是目錄權限為 rwxr-xr-x(755,一般目錄的初始權限(即目錄擁有者有完整權限,所屬組和其他用戶有讀和執行權限,但沒有寫權限)。

查看和設置掩碼
  • 查看當前掩碼: 你可以使用命令 umask 來查看當前的掩碼值。它會返回一個三位八進制數,例如 022

    umask

  • 修改掩碼值: 使用 umask 命令加上新的掩碼值來修改它。修改后的掩碼會在當前會話中生效。如果要永久修改掩碼,需要將它添加到用戶的 shell 配置文件(如 .bashrc.bash_profile)中。

    umask 027

    這將屏蔽掉目錄和文件的 "其他用戶" 組的寫權限。

權限掩碼的示例
  1. 掩碼 022

    • 默認權限(文件):666 -> rw-rw-rw-

    • 默認權限(目錄):777 -> rwxrwxrwx

    結果:

    • 文件權限:rw-r--r--

    • 目錄權限:rwxr-xr-x

  2. 掩碼 077

    • 默認權限(文件):666 -> rw-rw-rw-

    • 默認權限(目錄):777 -> rwxrwxrwx

    結果:

    • 文件權限:rw-rw----

    • 目錄權限:rwxrwx--x

  3. 掩碼 002

    • 默認權限(文件):666 -> rw-rw-rw-

    • 默認權限(目錄):777 -> rwxrwxrwx

    結果:

    • 文件權限:rw-rw-r--

    • 目錄權限:rwxrwxr-x

改變權限的三種指令 chmod,chown,chgrp

在 Unix 和類 Unix 系統中,chmodchgrpchown是用于管理文件和目錄權限及所有權的重要命令,下面為你詳細介紹這些命令以及 “所有組”“所有人” 在權限管理中的概念。

權限基本概念

在文件系統里,每個文件和目錄都具備三種基本權限:讀(r)、寫(w)和執行(x),這些權限分別對應著不同的用戶類型:

  • 所有者(u:文件或目錄的創建者。
  • 所屬組(g:和文件或目錄關聯的用戶組。
  • 其他人(o:既不是所有者,也不屬于所屬組的用戶。
  • 所有人(a:涵蓋了所有者、所屬組和其他人。

命令詳解

1.?chmod?- 更改文件或目錄的權限

chmod命令可用于修改文件或目錄的權限。它有兩種使用方式:符號模式和數字模式。

符號模式

  • 語法:chmod [用戶類型][+|-|=][權限] 文件或目錄
  • 示例:
    • 給文件所有者添加執行權限:chmod u+x example.txt
    • 從所屬組移除寫權限:chmod g-w example.txt
    • 給所有人添加讀權限:chmod a+r example.txt

數字模式

  • 每個權限都有對應的數字:讀(r)= 4,寫(w)= 2,執行(x)= 1,無權限 = 0。
  • 語法:chmod [三位數字] 文件或目錄
  • 示例:
    • 給所有者賦予讀、寫、執行權限(7),所屬組賦予讀、執行權限(5),其他人賦予讀權限(4):chmod 754 example.txt
2.?chgrp?- 更改文件或目錄的所屬組

chgrp命令用于更改文件或目錄的所屬組。

  • 語法:chgrp [選項] 新組名 文件或目錄
  • 常用選項:
    • -R:遞歸地更改指定目錄及其所有子目錄和文件的所屬組。
  • 示例:
    • example.txt的所屬組更改為newgroupchgrp newgroup example.txt
    • 遞歸地將my_directory目錄及其內容的所屬組更改為newgroupchgrp -R newgroup my_directory
3.?chown?- 更改文件或目錄的所有者和所屬組

chown命令用于更改文件或目錄的所有者,也可以同時更改所屬組。

  • 語法:chown [選項] [新所有者][:新所屬組] 文件或目錄
  • 常用選項:
    • -R:遞歸地更改指定目錄及其所有子目錄和文件的所有者和所屬組。
  • 示例:
    • example.txt的所有者更改為newuserchown newuser example.txt
    • example.txt的所有者更改為newuser,所屬組更改為newgroupchown newuser:newgroup example.txt
權限要求
  • chmod:通常所有者或超級用戶(root)可以更改文件或目錄的權限。
  • chgrp:超級用戶(root)可以將任何文件或目錄的所屬組更改為系統中的任何組;普通用戶只能將自己擁有的文件或目錄的所屬組更改為自己所屬的組。
  • chown:一般只有超級用戶(root)才能更改文件或目錄的所有者和所屬組。
查看權限

你可以使用ls -l命令查看文件和目錄的權限和所有權信息,示例輸出如下:

-rw-r--r-- 1 user group 123 Apr 16 10:00 example.txt
  • 第一個字符表示文件類型(-表示普通文件,d表示目錄等)。
  • 接下來的 9 個字符分為三組,分別表示所有者、所屬組和其他人的權限。
  • 之后依次是鏈接數、所有者、所屬組、文件大小、最后修改時間和文件名。
粘滯位的常見用途

粘滯位通常用于公共目錄,特別是臨時目錄,最典型的例子就是 /tmp 目錄。/tmp 目錄通常是所有用戶都可以訪問的,用來存放臨時文件。如果沒有粘滯位的保護,任何有寫權限的用戶都可以刪除其他用戶的臨時文件,這會導致系統不穩定或文件丟失。而粘滯位確保了用戶只能刪除自己創建的文件,而不能刪除其他人的文件。

📃使用方式

很簡單,創建一個共享目錄后,借助超級用戶的身份,通過?chmod +t [目錄]?的方式,為這個共享目錄添加粘滯位就行了,粘滯位添加成功后,該共享目錄的Other?可執行權限變為?t

如何設置粘滯位

你可以使用 chmod 命令來設置或取消粘滯位。設置粘滯位的命令格式如下:

chmod +t <目錄名>

例如,如果你想在 /tmp 目錄上設置粘滯位,可以運行:

chmod +t /tmp

如何檢查粘滯位

可以通過 ls -ld 命令來查看某個目錄是否設置了粘滯位。例如:

ls -ld /tmp

如果該目錄設置了粘滯位,你會看到目錄權限中有一個 t 字符(而不是 x)出現在執行權限的位置,比如:

drwxrwxrwt 10 root root 4096 Apr 16 10:00 /tmp

上面輸出中的 t 就表示 /tmp 目錄已設置了粘滯位。

粘滯位的注意事項

  • 粘滯位僅對目錄有效,不會影響普通文件。

  • 粘滯位并不是普通的“寫”權限,它是對目錄中文件刪除權限的限制。

  • 粘滯位的設置通常不會影響到超級用戶(root)的操作,root 用戶始終有權限刪除或修改任何文件。

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

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

相關文章

【Java面試系列】Spring Cloud微服務架構中的分布式事務解決方案與Seata框架實現原理詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Cloud微服務架構中的分布式事務解決方案與Seata框架實現原理詳解 - 3-5年Java開發必備知識 引言 在微服務架構中&#xff0c;分布式事務是一個不可避免的挑戰。隨著業務復雜度的提升&#xff0c;如何保證跨服務的數據一致性成為了面試中的高頻問題。本…

【c語言】——深入理解指針2

文章目錄 一、指針數組指針數組模擬二維數組 二、數組指針二維數組傳參的本質 三、字符指針變量四、函數指針變量4.1. 函數指針的應用4.2 兩端有趣的代碼4.3. typedef關鍵字4.3.1 typedef 的使用4.3.2. typedef與#define對比 五、函數指針數組函數指針數組的應用 一、指針數組 …

python20-while和for in的美

課程&#xff1a;B站大學 記錄python學習&#xff0c;直到學會基本的爬蟲&#xff0c;使用python搭建接口自動化測試就算學會了&#xff0c;在進階webui自動化&#xff0c;app自動化 分支語句那些事兒 循環的類型循環的作用循環的構成要素while 循環while 循環實戰循環語句 for…

私人筆記:動手學大模型應用開發llm-universe項目環境創建

項目代碼&#xff1a;datawhalechina/llm-universe: 本項目是一個面向小白開發者的大模型應用開發教程&#xff0c;在線閱讀地址&#xff1a;https://datawhalechina.github.io/llm-universe/ 項目書&#xff1a;動手學大模型應用開發 一、初始化項目 uv init llm-universe-te…

剖析 Rust 與 C++:性能、安全及實踐對比

1 性能對比&#xff1a;底層控制與運行時開銷 1.1 C 的性能優勢 C 給予開發者極高的底層控制能力&#xff0c;允許直接操作內存、使用指針進行精細的資源管理。這使得 C 在對性能要求極高的場景下&#xff0c;如游戲引擎開發、實時系統等&#xff0c;能夠發揮出極致的性能。以…

詳細講解一下Java中的Enum

Java 中的 枚舉&#xff08;Enum&#xff09; 是一種特殊的類&#xff0c;用于表示一組固定且有限的常量&#xff08;如狀態、類型、選項等&#xff09;。它提供類型安全的常量定義&#xff0c;比傳統的常量&#xff08;如 public static final&#xff09;更強大和靈活。以下是…

首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的詳細解析

以下是**首席人工智能官&#xff08;Chief Artificial Intelligence Officer&#xff0c;CAIO&#xff09;**的詳細解析&#xff1a; 1. 職責與核心職能 制定AI戰略 制定公司AI技術的長期戰略&#xff0c;明確AI在業務中的應用場景和優先級&#xff0c;推動AI與核心業務的深度…

LeetCode【劍指offer】系列(位運算篇)

劍指offer15.二進制中1的個數 題目鏈接 題目&#xff1a;編寫一個函數&#xff0c;輸入是一個無符號整數&#xff08;以二進制串的形式&#xff09;&#xff0c;返回其二進制表達式中數字位數為 ‘1’ 的個數&#xff08;也被稱為 漢明重量).&#xff09;。 思路一&#xff…

前端路由緩存實現

場景&#xff1a;以一體化為例&#xff1a;目前頁面涉及頁簽和大量菜單路由&#xff0c;用戶想要實現頁面緩存&#xff0c;即列表頁、詳情頁甚至是編輯彈框頁都要實現數據緩存。 方案&#xff1a;使用router-view的keep-alive實現 。 一、實現思路 1.需求梳理 需要緩存模塊&…

Buildroot編譯過程中下載源碼失敗

RK3588編譯編譯一下recovery&#xff0c;需要把buildroot源碼編譯一遍。遇到好幾個文件都下載失敗&#xff0c;如下所示 pm-utils 1.4.1這個包下載失敗&#xff0c;下載地址http://pm-utils.freedesktop.org/releases 解決辦法&#xff0c;換個網絡用windows瀏覽器下載后&…

Operator 開發入門系列(一):Hello World

背景 我們公司最近計劃將產品遷移到 Kubernetes 環境。 為了更好地管理和自動化我們的應用程序&#xff0c;我們決定使用 Kubernetes Operator。 本系列博客將記錄我們學習和開發 Operator 的過程&#xff0c;希望能幫助更多的人入門 Operator 開發。 目標讀者 對 Kubernete…

Java基礎知識面試題(已整理Java面試寶典pdf版)

什么是Java Java是一門面向對象編程語言&#xff0c;不僅吸收了C語言的各種優點&#xff0c;還摒棄了C里難以理解的多繼承、指針等概念&#xff0c;因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表&#xff0c;極好地實現了面向對象理論…

科學視角下的打坐:身心獲益的實證探究

在快節奏的現代生活中&#xff0c;人們在追求物質豐富的同時&#xff0c;也愈發關注身心的健康與平衡。古老的打坐修行方式&#xff0c;正逐漸走進科學研究的視野&#xff0c;并以大量實證數據展現出對人體多方面的積極影響。? 什么是打坐&#xff1a; 打坐是一種養生健身法…

javaSE————網絡編程套接字

網絡編程套接字~~~~~ 好久沒更新啦&#xff0c;藍橋杯爆掉了&#xff0c;從今天開始爆更嗷&#xff1b; 1&#xff0c;網絡編程基礎 為啥要有網絡編程呢&#xff0c;我們進行網絡通信就是為了獲取豐富的網絡資源&#xff0c;說實話真的很神奇&#xff0c;想想我們躺在床上&a…

MySQL性能調優(三):MySQL中的系統庫(mysql系統庫)

文章目錄 MySQL性能調優數據庫設計優化查詢優化配置參數調整硬件優化 MySQL中的系統庫1.5.Mysql中mysql系統庫1.5.1.權限系統表1.5.2.統計信息表1.5.2.1.innodb_table_stats1.5.2.2.innodb_index_stats 1.5.3.日志記錄表1.5.3.1. general_log1.5.3.2. slow_log 1.5.4.InnoDB中的…

多個路由器互通(靜態路由)無單臂路由(簡單版)

多個路由器互通&#xff08;靜態路由&#xff09;無單臂路由&#xff08;簡單版&#xff09; 開啟端口并配ip地址 維護1 Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shutdown Router(config-if)#ip address 192.168.10.254 255.255.255.0 Ro…

關于 AI驅動的智慧家居、智慧城市、智慧交通、智慧醫療和智慧生活 的詳細解析,涵蓋其定義、核心技術、應用場景、典型案例及未來趨勢

以下是關于 AI驅動的智慧家居、智慧城市、智慧交通、智慧醫療和智慧生活 的詳細解析&#xff0c;涵蓋其定義、核心技術、應用場景、典型案例及未來趨勢&#xff1a; 一、AI智慧家居 1. 定義與核心功能 定義&#xff1a;通過AI與物聯網&#xff08;IoT&#xff09;技術&#…

【ESP32|音頻】一文讀懂WAV音頻文件格式【詳解】

簡介 最近在學習I2S音頻相關內容&#xff0c;無可避免會涉及到關于音頻格式的內容&#xff0c;所以剛開始接觸的時候有點一頭霧水&#xff0c;后面了解了下WAV相關內容&#xff0c;大致能夠看懂wav音頻格式是怎么樣的了。本文主要為后面ESP32 I2S音頻系列文章做鋪墊&#xff0…

端側大模型綜述On-Device Language Models: A Comprehensive Review

此為機器翻譯&#xff0c;僅做個人學習使用 設備端語言模型&#xff1a;全面回顧 DOI&#xff1a;10.48550/arXiv.2409.00088 1 摘要 大型語言模型 &#xff08;LLM&#xff09; 的出現徹底改變了自然語言處理應用程序&#xff0c;由于減少延遲、數據本地化和個性化用戶體驗…

推流265視頻,網頁如何支持顯示265的webrtc

科技發展真快&#xff0c;以前在網頁上&#xff08;一般指谷歌瀏覽器&#xff09;&#xff0c;要顯示265的視頻流&#xff0c;都是很雞肋的辦法&#xff0c;要么轉碼&#xff0c;要么用很慢的hls&#xff0c;體驗非常不好&#xff0c;而今谷歌官方最新的瀏覽器已經支持265的web…