Vinc3nt's Life

Linux file permission Overview

2024-04-27
develop
linux
permissions
最後更新:2025-02-14
7分鐘
1204字

剛好看到 ByteByteGo 介紹了 Linux file permissions 的概念,趁這個機會系統複習一下 Linux 的權限概念。

基礎權限設定

default - ByteByteGo

Linux 文件權限系統的基本概念,包括所有權和權限兩部分。

Ownership(所有權)

在Linux系統中,每個文件或目錄都被分配了三種類型的所有者:

  • 所有者(Owner):所有者是創建文件或目錄的用戶。
  • 組(Group):一個組可以包含多個用戶。組內的所有用戶對文件或目錄擁有相同的訪問權限。
  • 其他(Other):指的是既不是文件所有者也不是所屬組成員的其他用戶。

Permission(權限)

文件或目錄有三種基本權限類型:

  • 讀取(Read, r):讀取權限允許用戶讀取文件的內容。
  • 寫入(Write, w):寫入權限允許用戶修改文件的內容。
  • 執行(Execute, x):執行權限允許文件被作為程序運行。

如何設置這些權限

常見命令包括:

  • chmod:更改文件的權限。
  • chown:更改文件的所有者。
  • chgrp:更改文件的所屬組。

例子

  • 如果你想要給文件增加執行權限,可以使用 chmod +x 文件名
  • 如果你想要移除寫入權限,可以使用 chome -x 文件名
  • 如果你想更改文件的所有者,可以使用 chown 新所有者 文件名
  • 如果你想更改文件的組,可以使用 chgrp 新組 文件名

特殊權限設定

在 Linux 系統中,setuid、setgid 和 sticky bits 是特殊的權限設定,用來控制文件和目錄的訪問權限。下面我將分別解釋這三種位的概念並給出實際例子:

Setuid(Set User ID)

設置對象是執行文件

setuid 主要用於提升程序執行時的權限,特別是讓普通用戶以文件擁有者(通常是root)的身份執行某些需要較高權限的操作。這在管理工具中非常常見,以保證安全性和功能的正常執行。

典型例子:

  • /usr/bin/passwd:這個程序允許普通用戶修改他們的密碼,它需要訪問和修改只有 root 用戶可寫的 /etc/shadow 文件。設置 setuid 可以使得普通用戶在執行此程序時,程序運行於 root 權限,從而安全地更新密碼。
Terminal window
1
-rwsr-xr-x 1 root root 53640 Jan 10 10:23 /usr/bin/passwd

這裡 -rwsr-xr-x 中的 s 代表 setuid 位已設置,替代了所有者權限中的執行位 x

Setgid(Set Group ID)

設置對象是執行文件或是目錄

setgid 類似於 setuid,但它影響的是用戶組權限。當設置在目錄上時,該目錄下新創建的文件將繼承該目錄的組 ID,而不是創建者的主組 ID。這在共享環境中非常有用,可以保證文件的組權限一致。

典型例子:

  • **共享文件夾:**在協作環境中,比如開發環境中的某個目錄,設置setgid可以保證該目錄下所有新創建的文件都屬於相同的組,這樣所有開發者都可以讀取和修改這些文件。
  • **sftp 共享文件:**在 sftp 的共相資料夾 /srv/sftp/,設置setgid 可以使所有用戶創建的文件保持一致的組權限。
Terminal window
1
drwxrwsr-x 2 root sftp 4096 Jan 10 10:23 /srv/sftp/

這裡 drwxrwsr-x 中的 s 表示 setgid 已設置,替代了組權限中的執行位 x

Sticky Bit

設置對象是目錄

sticky bit 通常設置在共享目錄上。當設置了 sticky bit,它防止用戶刪除或重命名其他用戶擁有的文件,只有文件的所有者和 root 用戶才能刪除或重命名目錄中的文件,即使其他用戶有該目錄的寫權限也不行。

典型例子:

  • /tmp 目錄:這是系統臨時文件的儲存地,所有用戶都可以創建臨時文件,但只有文件的創建者和 root 用戶應能夠刪除這些文件。這避免了一個用戶不小心或惡意刪除其他用戶文件的情況。
  • Web 伺服器的某些臨時文件目錄:如果一個 Web 應用允許用戶上傳文件到共享目錄,使用 sticky bit 可以保護這些文件不被其他用戶非法移除或更改。
Terminal window
1
drwxrwxrwt 14 root root 4096 Jan 10 10:23 /tmp

在權限 drwxrwxrwt 中的 t 表示 sticky bit 已設置。

如何設置和查看這些特殊權限

你可以使用 chmod 命令來設置這些特殊權限:

  • 設置 setuid:chmod u+s 文件名
  • 設置 setgid:chmod g+s 文件名
  • 設置 sticky bit:chmod +t 目錄名
  • 設置移除 setuid:chmod u-s 文件名

使用 ls -l 命令可以查看文件或目錄的權限,進而確認是否設置了這些特殊位。

本文標題:Linux file permission Overview
文章作者:Vincent Lin
發布時間:2024-04-27