Linux

在 gnu/linux 上設置文件權限等的不同方法是什麼

  • July 9, 2019

在很久以前的 Unix 上,我了解到chmod:在 Unix 上設置權限的傳統方式(並允許程序獲得權限,使用 setuid、setgid)。

我最近在 GNU/Linux 上發現了一些更新的命令:

  • setfacl擴展了傳統ugo:rwx的位tchmod.
  • setcap提供比ug:s的位更多的鰭粒控制chmod
  • chattr允許文件的一些其他控制項(有點混合)。

還有其他人嗎?

chmod: 改變文件模式位

用法(八進制模式):

   chmod <octal-mode> files...

用法(符號模式):

   chmod <references><operator><modes> files..

**references**是字母的組合,指定將修改ugoa哪個使用者的訪問權限:files

  • u擁有它的使用者
  • g``file的組中的其他使用者
  • o不在文件組中的其他使用者
  • a所有使用者

如果省略,則預設為所有使用者,但只修改允許的權限umask

**operator**是字元之一+-=

  • +將指定的文件模式位添加到每個文件的現有文件模式位file

  • -將指定的文件模式位刪除到每個文件的現有文件模式位file

  • =添加指定的位並刪除未指定的位,除了為目錄設置的setuidsetgid位,除非明確指定。**mode**由字母組合組成rwxXst,指定要修改的權限位:

  • r

  • w

  • x執行(或搜尋目錄)

  • X僅當文件是目錄或已經為某些使用者設置了執行位時才執行/搜尋

  • ssetuid 或 setgid(取決於指定的references

  • t限制刪除標誌或粘滯位或者,mode可以由其中一個字母組成ugo,在這種情況下,模式對應於目前授予所有者 ( u)、file組成員 ( g) 或上述任一類別中使用者的權限( ) 的權限o

各種chmod解釋:

  • 訪問控制(另見setfacl

    • rwx— 讀取 (r)、寫入 (w) 和執行/交叉 (x) 權限。

      • 讀取 (r) 影響是否可以讀取文件,或者是否可以列出目錄。
      • 寫入 (w) 影響是否可以寫入文件,或者是否可以編輯目錄(添加、刪除、重命名文件)。
      • 執行 (x) 影響文件是否可以執行、用於腳本(請參閱 參考資料#!)和其他執行檔。
      • 交叉 (x) 影響是否可以遍歷目錄。
    • st— 粘性位 (t) 和目錄上的 setgid (s)

      • 粘性位僅影響目錄。將阻止除文件所有者和 root 之外的任何人刪除目錄中的文件。
      • 目錄上的 setgid 位,將導致新文件和目錄將組設置為同一組,並且新目錄設置 setgid 位(另請參見 setfacl 中的預設值)。
    • s— setuid,setgid,在執行檔上。

      • 如果您不知道自己在做什麼,這可能會嚴重影響安全性。
      • 執行執行檔時,如果設置了這些位之一,則執行檔的有效使用者/組將成為文件的有效使用者/組。因此,程序以該使用者身份執行。請參閱setcap更現代的方法來做到這一點。

chown chgrp:


chattr: 改變文件屬性

用法:

   chattr <operator><attribute> files...

**operator**是字元之一+-=: *+將選定的屬性添加到現有attributesfiles *-刪除選定的attributes *=用指定的覆蓋文件具有的目前屬性集attributes

**attribute**是字母的組合acdeijstuADST,對應屬性:

  • a僅附加
  • c壓縮的
  • d沒有轉儲
  • e範圍格式
  • i不可變
  • j數據日誌
  • s安全刪除
  • t沒有尾部合併
  • u不可刪除
  • A沒有atime更新
  • D同步目錄更新
  • S同步更新
  • T目錄層次結構的頂部

setfattr: 改變擴展文件屬性

用法(設置屬性):

   setfattr -n <name> -v <value> files...

用法(刪除):

   setfattr -x <name> files...

**name**是要設置或刪除的擴展屬性的名稱

**value**是擴展屬性的新值


setfacl: 更改文件訪問控制列表

用法:

   setfacl <option> [default:][<target>:][<param>][:<perms>] files...

**option**必須包括以下內容之一:

  • --set設置文件或目錄的ACL,替換之前的ACL
  • -m| --modify修改文件或目錄的 ACL
  • -x| --remove 刪除文件或目錄的 ACL 條目

**target**是其中一個字母ugmo(或如下所示的較長形式):

  • u,users由 標識的命名使用者的權限,如果省略則param預設為文件所有者uid
  • g,group由 標識的命名組的權限,如果省略則param預設為擁有組uid
  • m,mask有效的權利遮罩
  • o,other其他人的權限

**perms**是字母的組合rwxX,對應於權限:

  • r
  • w
  • x執行
  • X僅當文件是目錄或已對某些使用者具有執行權限時才執行

或者,perms可以是指示權限集的八進制數字 ( 0- )。7


setcap: 改變文件能力

用法:

   setcap <capability-clause> file 

A**capability-clause**由逗號分隔的能力名稱列表和後跟操作員標誌對的列表組成。

可用的運算符是=和。可用的標誌是,它們對應於EffectiveInheritablePermitted能力集。+``-``e``i``p

操作員將=提高指定的能力集並重置其他能力集。如果沒有與操作員一起給出標誌,則=所有能力集都將被重置。+和運算符將-分別提高或降低一個或多個指定的能力集。


chcon: 更改文件SELinux 安全上下文

用法:

   chcon [-u <user>] [-r <role>] [-t <type>] files...

user是 SELinux 使用者,例如user_u,system_uroot.

role是 SELinux 角色(總是object_r用於文件)

type是 SELinux 主題類型


chsmack: 改變SMACK擴展屬性

用法:

   chsmack -a <value> file

**value**是為SMACK64擴展文件屬性設置的 SMACK 標籤


setrichacl:更改豐富的訪問控制列表。

richacl是一項將添加更高級 ACL 的功能。

目前正在進行一項工作,所以我不能告訴你太多關於它們的資訊。我沒有使用過它們。

另請參閱此問題除了傳統的 ‘rwx’ 和 POSIX ACL,還有更高級的文件系統 ACL 嗎?手冊頁

引用自:https://unix.stackexchange.com/questions/101263