1. 程式人生 > >Linux之下的文件權限

Linux之下的文件權限

Linux之路

文件的屬性

技術分享圖片

Linux下的文件類型

  • -:普通文件
  • d: 目錄文件
  • b: 塊設備
  • c: 字符設備
  • l: 符號鏈接文件
  • p: 管道文件pipe
  • s: 套接字文件socket
    ……

技術分享圖片

技術分享圖片

在文件權限中,一共有十字符,第一個字符為文件的類型。接下來的字符分為三組,分別是文件所有者、所屬組、其他人。
每一組分別由rwx 三個參數組合。其中,r代表可讀(read)、w代表可寫(write)、x代表可執行(execute)
這三個權限的位置不會改變,如果沒有權限,就會出現減號-而已

  • > 文件所有者:由於Linux是個多人多任務的系統,每個人的都有自己的隱私,總不希望被別人看到吧!文件所有者的角色顯得非常重要了
  • > 所屬組:是多個用戶的集合**

  • > 其他人:不是所有者,又沒有加入這個 組裏的成員。

Linux下的權限管理

文件的權限

對於二進制文件來說,r和w沒有任何意義,但x是非常危險的
對於普通文件來說:文件對應的是文件的內容。

r只能讀取文件內容。也能復制文件的內容,復制到的目標目錄必須有wx的權限。

w:能編輯文件內容。刪文件,移動、改名、新建文件是由它所在的目錄決定的。是由目錄的wx權限來決定的(因為目錄存的是文件的列表結構和inode號)

x:是對文件的執行。x對文件來說是非常危險的,特別是對於可執行程序的文件,對文本文件毫無意義。

目錄的權限

對目錄來說:對應的是文件名的列表

r:能讀取目錄內的文件列表,但無法讀取文件屬性

w:可以mv,cp,rm,mkdir,touch與該目錄下的文件名異動有關,前提要有x權限

x:能否進入該目錄成為工作目錄,cd
有w無x:是無法刪除、移動、改文件

X:只給目錄x權限,不給文件x權限,如果文件本身有x權限 ,那同樣會給。

權限獲取的順序

獲取權限的順序:先看你是不是所有者,再看你是不是所屬組,最後看你是不是其他人。如果是其中的一類人,那後面的不會去看。
對普通用戶來說,沒有權限是不能訪問資源的
讀寫權限對root用戶不受限制。但x權限受控制。
需要註意的是:對root用戶來說,如果自己沒有x權限。只要權限後面的幾類人帶有x權限,root就能執行。而普通用戶不行

文件的所有者的所屬組

  • 修改文件的屬主:chown
    chown [OPTION]... [OWNER][:[GROUP]] FILE...
    用法:
    OWNER
    OWNER:GROUP
    命令中的冒號可用.替換
    -R: 遞歸

  • 修改文件的屬組:chgrp
    chgrp [OPTION]... --reference=RFILE FILE...
    -R 遞歸

    普通用戶是可能修改自己的改自己的改組的,前提是自己必須在這個組裏。

    • 修改文件的權限:chmod
      chmod [OPTION]... OCTAL-MODE FILE...
      -R: 遞歸修改權限
      chmod [OPTION]... MODE[,MODE]... FILE...
      MODE:
      修改一類用戶的所有權限:
      u= g= o= ug= a= u=,g=
      修改一類用戶某位或某些位權限
      u+ u- g+ g- o+ o- a+ a- + -
      chmod [OPTION]... --reference=RFILE FILE...
      參考RFILE文件的權限,將FILE的修改為同RFILE。只改變文件的權限。

上面所提的權限在Linux通用的傳統系統EXT系列和Centos 7上的xfs文件系統才支持,權限的支不支持不是Linux說了算,而是由文件系統說了算。

新建文件和目錄的默認權限與umask

>root用戶的默認umask 為022
>普通用戶的默認umask為002

umask 可以拿掉一些權限,因此,適當的定義 umask 有助於系統的安全, 因為他可以用來建立默認的目錄或文件的權限。

對目錄來說:
default=777-umask

對文件來說:
default =666-umask 再觀察結果。
如是有基數們,基數加1。是偶數數不變

  • 非特權用戶umask是 002
  • root的umask 是 022
  • umask: 查看
  • umask #: 設定
  • umask 002
  • umask –S 模式方式顯示
  • umask –p 輸出可被調用
  • 全局設置: /etc/bashrc 用戶設置:~/.bashrc

Linux系統上文件的特殊權限

SUID, SGID, Sticky
三種常用權限:r, w, x user, group, other

安全上下文

前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程序文件能不能啟動為進程,取決發起者對程序文件是否擁有執行權限
(2) 啟動為進程之後,其進程的屬主為發起者,進程的屬組為發起者所屬的組
(3) 進程訪問文件時的權限,取決於進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
(b) 進程的發起者,屬於文件屬組;則應用文件屬組權限
(c) 應用文件“其它”權限

SUID: user,占據屬主的執行權限位

  • s: 屬主擁有x權限
  • S:屬主沒有x權限
  • SUID:用數字4表示。
    只適合於二進制程序上,繼承於所有者的權限。

SGID: group,占據屬組的執行權限位

  • s: group擁有x權限
  • S:group沒有x權限
  • SGID:用數字2表示。
    1)繼承二進制程序所屬組的權限
    2)作用於目錄,此目錄新建的文件繼承目錄的所屬組.

Sticky: other,占據other的執行權限位

  • t: other擁有x權限
  • T:other沒有x權限
  • Sticky:用數字1表示
  • sticky:作用於目錄,此目錄的文件只能被所有者和root刪除
    針對普通用戶來說,在此目錄下,不能覆蓋別人的文件。要想覆蓋必須在這個文件所屬的組或者有別人的文件w權限才行。

ACL 訪問靈活的權限管理

設置ACL權限:setfacl

查看ACL權限:getfacl

語法:setfacl [-bkRd] [-m|-x acl 參數] 目標文件名

選項與參數:

  • -m:設置後續的acl權限,不可與-x一起使用

  • -M:用文件批量設置acl權限

  • -x: 刪除後續的acl權限,不可與-m一起使用

  • -X:用文件批量刪除acl權限

  • -b:刪除所有的acl權限

  • -k:刪除默認的acl權限

  • -R:遞歸設置acl權限

  • -d:設置默認acl權限,只對目錄有效
    ACL:Access Control List,實現靈活的權限管理
    除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
    CentOS7 默認創建的xfs和ext4文件系統具有ACL功能
    CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
    tune2fs –o acl /dev/sdb1
    mount –o acl /dev/sdb1 /mnt/test

    ACL生效順序:所有者,自定義用戶,自定義組,其他人
    mask

  • mask值:文件或目錄一旦定義了acl,ACL文件上的group權限是mask的值,用chmod改組的權限,是改的mask的值
  • mask只影響除所有者和other的之外的人和組的最大權限
  • mask需要與用戶的權限進行邏輯與運算後,才能變成有限的權限(Effective Permission)
  • 用戶或組的設置必須存在於mask權限設定範圍內才會生效 setfacl -m mask::rx file

--set選項會把原有的ACL項都刪除,用新的替代,需要註意的是一定要包含UGO的設置,不能象-m一樣只是添加ACL就可以
示例:
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
getfacl file1 | setfacl --set-file=- file2 復制file1的acl權限給file2

備份和恢復ACL

  • 主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
    getfacl -R /tmp/dir1 > acl.txt
    setfacl -R -b /tmp/dir1
    setfacl -R --set-file=acl.txt /tmp/dir1
    setfacl --restore acl.txt
    getfacl -R /tmp/dir1

Linux之下的文件權限