Linux 系統的檔案許可權管理如同建築的根本,決定了使用者對檔案和目錄的存取和操作方式。理解 chownchmod 等指令,以及 SUID 和 SGID 等特殊許可權的設定,對於系統安全和穩定性至關重要。檔案許可權的設定不當可能導致資料洩露或系統被入侵,因此需要謹慎管理。硬連結和符號連結則提供了更靈活的檔案管理方式,可以節省儲存空間並簡化檔案操作。此外,正規表示式是處理文字和搜尋模式的利器,能大幅提升工作效率。透過本章的學習,讀者可以建立紮實的 Linux 檔案許可權管理基礎,並進一步探索更進階的系統管理技巧。

Linux 檔案許可權與擁有權管理

在本章的前面部分,你可能會注意到在 ls -l 指令的輸出中有一個看起來像是 drwxr-xr-x 的字串。這個字串代表檔案或目錄的許可權。Linux 檔案系統許可權就像是遊樂場的規則,它們決定誰可以玩鞦韆(存取檔案),誰可以邀請朋友一起玩(修改許可權),以及誰可以設定規則(擁有權)。理解這些許可權對於有效管理 Linux 系統的人來說至關重要。讓我們用簡單的方式來解釋,包括 chownchmodSUIDSGID 的使用。

擁有權與群組

每個檔案和目錄在 Linux 中都有一個擁有者和一個群組與之關聯。你可以把擁有者想像成控制孩子玩具的父母,而群組則是一些在某些條件下可以一起玩的選定朋友。以下描述可能會對你有幫助:

  • 擁有者:控制檔案或目錄的使用者。
  • 群組:一組分享某些許可權的使用者。

修改擁有權 - chown

要修改檔案或目錄的擁有者,我們使用 chown 指令(這可能需要在指令前加上 sudo):

$ chown [user]:[group] [file]

這個指令會同時修改檔案的擁有者和群組。如果你只想修改擁有者或群組,可以在指令中省略其中之一。然而,如果你省略使用者,群組必須以冒號字元開頭。以下指令展示瞭如何只修改檔案的群組擁有權:

$ chown :[group] [file name]

這樣會保留原來的擁有者,但會修改檔案或目錄的群組。

如果你有一個檔案,並希望將另一個參考檔案所使用的相同許可權應用於此檔案,可以包含 --reference 引數,如下所示:

$ chown --reference=file1 file2

有一些常見的 chown 選項值得了解:

  • -h:影響符號連結而不是任何參考檔案。
  • -R:遞迴操作檔案和目錄。

修改許可權 - chmod

許可權決定可以對檔案或目錄執行哪些動作。共有三種型別的許可權:

  • 讀取(r):檢視檔案或目錄內容。
  • 寫入(w):修改檔案或目錄內容。
  • 執行(x):將檔案作為程式執行或存取目錄。

這些許可權分別設定給三類別使用者:

  • 擁有者
  • 群組
  • 其他人

你可以使用 ls -l 指令列出檔案或目錄的許可權。以下指令輸出展示瞭如何使用 ls 列出檔案許可權:

$ ls -l .bashrc
-rw-r--r-- 1 steve steve 6115 Feb 21 10:02 .bashrc

上面顯示的許可權表示以下詳細資訊:

  • 第一個字元是 - ,表示它是一個檔案。如果是目錄則會顯示 d
  • - 之後的三個字元代表使用者(steve)的許可權。這是誰擁有這個檔案。這些字元是 rw- ,意思是擁有者可以讀取和寫入該檔案,但無法執行它。
  • 接下來三個字元代表群組(steve)。許可權為 r-- ,意思是 steve 群組可以讀取該檔案但無法寫入或執行。
  • 最後三個字元是 r-- 。這意味著除了擁有者和群組成員之外的人都可以讀取該檔案但無法寫入或執行。

許可權視覺化

許可權視覺化圖示

此圖示展示瞭如何解讀讀取、寫入和執行許可權以及它們如何結合:

  graph TD;
    A[Permission Types] --> B[Read (r)];
    A --> C[Write (w)];
    A --> D[Execute (x)];

    B --> E[(4)];
    C --> F[(2)];
    D --> G[(1)];

    H[Owner Permissions] --> I[(7 = rwx)];
    I --> J[(4 + 2 + 1)];

    K[Group Permissions] --> L[(5 = r-x)];
    L --> M[(4 + 0 + 1)];

    N[Others Permissions] --> O[(5 = r-x)];
    O --> P[(4 + 0 + 1)];

此圖示展示了每種可能組合的十進位表示法:

  graph TD;
    A[Read (4)] --> B[(4)];
    C[Write (2)] --> D[(2)];
    E[Execute (1)] --> F[(1)];

    G[Owner Permissions] --> H[(7 = rwx)];
    H --> I[(4 + 2 + 1)];

    J[Group Permissions] --> K[(5 = r-x)];
    K --> L[(4 + 0 + 1)];

    M[Nothers Permissions] --> N[(5 = r-x)];
    N --> O[(4 + 0 + 1)];

使用 chmod 指令,我們可以更改這些許可權。例如,以下指令將擁有者設定為讀取、寫入和執行許可權,而將群組和其他人設定為讀取和執行許可權:

$ chmod 755 filename

你也可以用符號方式使用 chmod 來修改檔案。例如,如果你想要使某個檔案可執行,你可以使用以下指令:

$ chmod +x filename

特殊許可權 - SUID 和 SGID

SUID(Set User ID)和 SGID(Set Group ID) 是可設定在可執行檔上的特殊型別許可權。它們允許使用者以該檔之擁有者或群組之許可來執行該檔案。當設定了 SUID 許可權且已執行某個可執行檔時,它以該檔案所有者而不是發起該程式之使用者身份運作。類別似地,具有 SGID 許可權之可執行檔案以檔案所屬之團體身份運作。這種機制允許使用者在通常受到限制時執行需要暫時提升特權之工作。

SUID 和 SGID 的說明

  • SUID:如果設定於可執行檔案上,執行該檔案之使用者將獲得與該檔案所有者相同之許可。
  • SGID:與 SUID 功能相同但適用於群組許可。

改變 SUID 和 SGID 的方式

要使用 chmod 指令設定 SUID:

$ chmod u+s filename

要設定 SGID:

$ chmod g+s filename

從系統安全形度來看,SUID 和 SGID 是雙刃劍。一方面,它們對於那些需要暫時提升特權但不暴露敏感認證資訊的任務來說至關重要。例如,更改密碼命令 passwd 需要存取系統影子檔案——一個普通使用者無法觸碰的檔案。當 passwd 上設定了 SUID 許可權時,使用者就可以更新他們的密碼而不需要具備直接修改影子檔案所需之特許特殊許可。

想進一步瞭解更多 Linux 檔案系統與安全性相關內容嗎?

瞭解 Linux 的基礎知識是掌握這門技術必不可少的一部分。希望本篇文章能夠幫助你更好地理解 Linux 檔案系統中各種基本概念及其應用方式。

檔案連結與許可權管理

SUID 與 SGID 許可權的潛在風險

在 Linux 系統中,SUID(Set User ID)和 SGID(Set Group ID)許可權是強大的工具,允許執行檔案以不同的使用者或群組身份執行。然而,這種權力若未經妥善管理,可能會被惡意利用。駭客會對具有 SUID 或 SGID 許可權的執行檔案垂涎三尺,因為這些許可權可以讓他們提升系統上的許可權。想象一下,一個看似無害的執行檔案擁有 SUID 許可權且由 root 擁有。如果這個執行檔案存在漏洞,它就可能允許任意指令執行;駭客可以利用這個漏洞以 root 身份執行指令,從而接管整個系統。

駭客會採用多種技術來利用 SUID 和 SGID 許可權。他們可能會掃描系統中的所有具有這些許可權設定的檔案,然後嘗試利用這些檔案中的漏洞。另一種常見的策略是二進位植入,即駭客會用惡意檔案取代或連結正當的 SUID/SGID 檔案,等待不知情的使用者執行它。

要保護自己免受這類別攻擊,必須仔細管理 SUID 和 SGID 許可權。定期審查這些許可權可以幫助識別並修復潛在的漏洞。系統管理員應確保只有絕對必要的檔案擁有 SUID 或 SGID 許可權,並保持這些檔案更新以緩解已知的漏洞。此外,使用入侵偵測系統(IDS)可以幫助監控與這些許可權相關的異常活動。

總結來說,雖然 SUID 和 SGID 是 Linux 中管理特權操作不可或缺的工具,但必須謹慎處理。若使用不當或組態錯誤,它們可能會成為駭客武器函式庫的一部分。透過瞭解它們的功能和潛在濫用方式,系統管理員可以更好地保護系統免受未經授權的許可權提升攻擊,而測試人員則能在審核系統安全時更深入瞭解其細節。

瞭解 Linux 檔案系統許可權

瞭解 Linux 檔案系統許可權就像學習一種新遊戲的規則。一旦你知道誰能做什麼(許可權)、誰擁有什麼(擁有權)以及如何改變這些(使用 chown 和 chmod),你就能有效地管理你的 Linux 系統了。請記住:權力越大責任越大。明智地使用這些指令來保持系統安全且功能正常。

現在,你已經熟練掌握列出和設定檔案系統許可權了,讓我們進入下一節,探索檔案系統中的符號連結。

硬連結與符號連結

硬連結

硬連結本質上是現有檔案在檔案系統中的另一個名稱。想象一下你在圖書館中有一本最喜愛的書。有一天,你決定它同時屬於「經典」和「喜愛」區域。你不需要購買新的一本,只需為這本文加上另一個標籤,讓讀者從兩個區域都能找到它即可。在 Linux 中,建立硬連結意味著為檔案增加了一個新的參考點,但它們仍是同一個單一檔案。如果你刪除原始檔名,內容仍可透過硬連結存取。就像魔法一般:即使去掉其中一個標籤,書依然留在架上。

然而,硬連結也有其侷限性。它們無法跨越不同的檔案系統;一個硬連結無法指向另一磁碟上的檔案,也無法連結目錄以防止在檔案系統中建立迴圈。

符號連結

符號連結則更加靈活且類別似於捷徑。使用我們圖書館的類別比,「符號連結」就像在「經典」區域放置一張指示牌告訴你書所在位置是在「喜愛」區域。「符號連結」不是書本本身而是指向書籍所在位置的一張指示牌。「符號連結」實際上是一個指向另一個檔案或目錄的一個獨立檔案。「符號連結」與「硬連結」不同的是如果你刪除了原始檔案,「符號連結」則會失效因為它所指向的是原始檔案。

符號連結之所以輝煌就是因為它們可以跨越不同檔案系統邊界並且可連結至目錄使得非常靈活應用於建立可存取深層巢狀目錄或維持不同版本之間檔案或程式之間相容性。

為什麼要使用這些連結呢?效率和便利是主要原因。「硬連結」允許你為單一檔案提供多個存取點而不重複其內容節省空間。「符號連結」提供了一種建立易於導航檔案系統結構而不移動或重複檔案之方法。「符號連結」實際上是以另一種方式命名其他檔案或目錄之路徑名稱。

實際操作中管理這些連結非常簡單,「ln」命令可以用來建立兩種連結(「ln」用於硬連結,「ln -s」用於符號連結),而「ls -l」命令則可以用來檢視它們。真正需要掌握的是何時該使用每種型別的連結。「硬連結」非常適合備份系統或在單一檔案系統中工作時保持檔案完整性至關重要。「符號連結」適合建立靈活路徑和捷徑特別是在不同檔案系統之間或當需要將目錄進行連結時。

總體而言,「硬連結」和「符號連結」提供了創造性地管理和存取檔案之途徑每種型別都有其規則和潛在用途無論您是最佳化工作空間還是構建精密系統理解這些聯絡開啟了無窮可能。

正規表示式簡介

Mermaid流程圖: 此圖示展示了正規表示式如何提取特定模式中的文字片段

  graph TD;
    A[正規表示式] --> B[比對模式];
    B --> C[提取文字];
    C --> D[篩選結果];
內容解密:
  1. 正規表示式:正規表示式(Regular Expression, Regex)是一種強大的工具,用於比對和操作字串中的特定模式。
  2. 比對模式:正規表示式允許我們定義特定的模式來比對字串中的部分或全部內容。
  3. 提取文字:透過比對模式我們可以從字串中提取出感興趣的部分。
  4. 篩選結果:提取出來的文字可以進一步篩選和處理以滿足特定需求。
grep 'pattern' filename
內容解密:
  1. grepgrep 是一個強大的命令列工具用於搜尋字串中的模式。
  2. pattern:我們要搜尋的一個特定模式。
  3. filename:我們要搜尋模式存在哪個檔案中。
echo "Hello, world!" | sed 's/world/AI/'
內容解密:
  1. echoecho 用於輸出字串到標準輸出。
  2. Hello, world!:我們要處理的一個字串。
  3. sedsed 是流編輯器可用於處理字串中的內容。
  4. 's/world/AI/' :此為替換命令第一個斜槓後面為需替換內容第二個斜槓後面為替換後內容第三個斜槓結束命令。
cat filename | grep -E 'pattern1|pattern2'
內容解密:
  1. cat filenamecat filename 用於將文字讀入標準輸入。
  2. 'grep -E 'pattern1|pattern2' : 用於使用擴充套件正則表示式搜尋兩個模式來過濾標準輸入結果

深入理解與應用

在下一章節中您將學習正規表示式很快地您將像武士揮舞刀劍一般切割與處理文字及命令結果!

捷徑與實務應用:

  • 「ln -s /path/to/original /path/to/link」
    • 需要謹慎操作避免對現有專案造成破壞
  • 「ls -l /path/to/link」
    • 需要注意路徑及命名避免錯誤導致無法找到所需資料
  • 「chmod u+s /path/to/executable」
    • 需要確認該程式可信且無安全風險

變數、條件判斷、迴圈及陣列

在前幾章,玄貓已經引導大家瞭解系統設定和使用 Bash 指令來導航 Linux 檔案系統的基本概念。現在,讓我們探討讓程式更聰明且高效的核心元素:變數、條件判斷、迴圈及陣列。可以把變數想像成標籤,用來存取資料;條件判斷則像是交叉路口,決定程式的執行路徑;而迴圈則是讓程式能夠重複執行某些操作,直到滿足特定條件為止。這些概念是建構動態且回應式程式的基礎。

在本章中,玄貓將會涵蓋以下主題:

  • 介紹變數
  • 使用條件判斷來進行分支
  • 使用迴圈進行重複操作
  • 使用陣列作為資料容器

技術需求

在這一章中,你需要一個 Linux Bash 終端機來跟隨玄貓的步驟。你可以在這個 連結 找到本章的程式碼。