Linux 檔案許可權中的 SetUID、SetGID 和粘滯位
在 Linux 環境中,檔案許可權為檔案所有者或管理員提供了執行程式或應用程式的特權。許可權是使用 chmod 和 chown 命令以及讀、寫和執行標記為檔案或目錄設定的。Setuid、setgid 和粘滯位等特殊許可權是為可執行檔案或目錄啟動的;當設定這些特殊許可權時,使用者需要更加註意,因為它們可能會對所有其他使用者構成安全風險。目錄中存在的每個檔案都有由檔案所有者指定的 userId(稱為 uid)和 groupId(稱為 gid),為了執行程序,會將 uid 和 gid 與授權使用者進行檢查,以避免安全風險。為了更好地理解設定 uid、gid 和粘滯位(特殊檔案許可權),應該具備一定程度的基本 Linux 檔案許可權知識。
SetUID
當設定 SetUID 時,程式將以檔案所有者設定的許可權執行。它不會以當前正在處理它的使用者身份執行。此 SetUID 可以由應用程式的所有者或具有 root 訪問許可權的使用者使用 chmod 命令更改。例如,當用戶執行啟用了 SetUID 的檔案時,該檔案將以預定義的 root 許可權執行,而不是以使用者許可權執行。
我們可以使用 ls 命令來了解 setuid 是否已啟用
以上命令將返回
在上面的檔案許可權中,請注意設定了小寫字元“s”,它定義了為密碼命令設定的 SetUID 位。此可執行檔案的 UID 由檔案所有者設定。
檔案所有者可以使用以下命令為所需檔案設定 uid
要停用已設定的 uid,請對可執行檔案使用以下命令
ls -l /user/bin/passwd
-rwsr-xr-x root root 34487 May 15 20:22 /user/bin/passwd
chmod u+s file_name
chmod u-s file_name
SetGID
SetGID 許可權屬於位於目錄中的檔案的組。此許可權對所有可執行檔案及其目錄啟用。當為目錄啟用 SetGID 時,其中存在的檔案屬於目錄所在的組,而不屬於正在執行它的使用者。根據為使用者提供的對組進行寫入和執行的許可權,他們可以在目錄中建立檔案並訪問它們。
指定的檔名已設定 gid,這可以在命令的組許可權部分看到
使用以下命令為所需檔案設定 gid
要停用已設定的 uid,請對可執行檔案使用以下命令。
-rwxrwsr-x root root 2433 May 15 20:22 file_name
chmod g+s file_name
chmod g-s file_name
像 SetUID 和 SetGID 這樣的許可權存在更多安全威脅,並且攻擊者在獲得對 root 目錄的訪問許可權後可以跟蹤由所有者設定了這些許可權的可執行檔案。管理員或組所有者必須進行頻繁監控以檢測檔案許可權中任何可疑活動的更改。
粘滯位
為目錄中的檔案提供粘滯位。當它為目錄設定時,只有檔案或目錄的所有者才能刪除或刪除該檔案,而沒有許可權的其他使用者則無法刪除目錄中的檔案。這可以保護檔案免遭沒有檔案任何許可權的公共使用者的意外刪除。tmp 目錄最常用於粘滯位,當設定粘滯位時,使用者無法刪除其他使用者的 tmp 檔案。
使用 ls 命令列出給定目錄或檔案許可權
ls 命令以及給定的目錄名將產生以下結果。
此處設定了小寫“t”,這意味著粘滯位已為目錄中的所有檔案啟用,替換了通常的執行許可權“x”。
使用以下命令為所需的目錄設定粘滯位。
要停用已設定的粘滯位,請對相應的目錄使用以下命令。
ls -ld/directory_name
drwxrwxrwt. 10 root root 539 May 17 15:09/directory_name/
chmod +t directory_name
chmod -t directory_name
結論
Linux 特殊檔案許可權已為 root 使用者或擁有所有特權的所有者啟用,這些特權可以定義授予哪些使用者訪問哪些操作(如讀、寫和執行)的許可權。當使用 uid 和 gid 等特殊許可權時,必須監控檔案或目錄,因為它們可能會被任何非法使用者入侵,而不是訪問屬於 root 或 bin 的檔案。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP