1. 程式人生 > >Linux文件權限與訪問控制

Linux文件權限與訪問控制

Linux學習

Linux文件權限與訪問控制

訪問文件用戶3類:

    文件所有者
    同組成員
    其他人

權限
--- --- --- (rwx) 依次對應3類用戶

file:6rw 4r 0 x1
dir: 7rwx 5r-x 0

默認權限

umask內部命令 用來生成數字 umask+default =file666/dir777
umask +數字 修改umask值
umask 本質含義取消對應權限
    原理計算:
            666                 666
            125                 125

            110110110           541
            001010101           542     對於文件偶數不動奇數全加一
                                        對於目錄不必要這麽做,目錄
            110100010                   執行權限沒有擔心

            642 
配置文件
        個人用戶配置  .bashrc 在文件末尾追加 umask 251   source .bashrc  

        /etc/bashrc 下配置了root和普通用戶的umask默認值
            root 022  普通 002
umask 
    -p >> .bashrc 追加umask值到個人配置文件中
    -S 模式法 寫了默認權限 

命令:

chmod 
    法一:
        chmod who opt per file
            who:u g o(a可以代表ugo)
            opt:+ - =
            per: r w x (X s .特殊權限)
    ps: chmod u+x,g-w,o= file 
    參考一個文件權限修改另一個文件
    chmod --reference=filename1 filename2 filename3

    法二:數字法
        r:4
        w:2
        x:1
        chmod 764 filename

    chmod -R a+x dirname 遞歸加執行權限
    chmod -R +X dirname X僅僅對目錄加執行,文件不加執行
                        當文件原有執行權限則會加執行權限
chown
    -c或——changes:效果類似“-v”參數,但僅回報更改的部分;
    -f或--quite或——silent:不顯示錯誤信息;
    -h或--no-dereference:只對符號連接的文件作修改,而不更改其他任何相關文件;
    -R或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一並處理;
    -v或——version:顯示指令執行過程;

    --dereference:效果和“-h”參數相同;
    --help:在線幫助;
    --reference=<參考文件或目錄>:把指定文件或目錄的擁有者與所屬群組全部設成和參考文件或目錄的擁有者與所屬群組相同;
    --version:顯示版本信息。

    chown root:root     
    chown .root file    只改屬組
    chown root. file 屬主屬組全改
chgrp

特殊權限:

SUID:作用在繼承二進制程序所有者的x位上,當一個用戶運行該程序,由於存在s權限
      則它會繼承該程序的屬主的權限。只適合在二進制可執行程序上。
    chmod u+s(-s)
          4---      都表示加s權限。
SGID: 作用在所有者的x位上,當一個用戶運行該程序,由於存在s權限
      則它會繼承該程序的屬組的權限
    chmod g+s 
          4---
sticky1:粘滯位。無法刪除別人的文件,即使2人都擁有其目錄的w權限,作用
                在文件夾上。
    chmod o+t 
          1---
SUID: user,占據屬主的執行權限位  
        s: 屬主擁有x權限  
        S:屬主沒有x權限 ?
SGID: group,占據屬組的執行權限位  
        s: group擁有x權限  
        S:group沒有x權限 
Sticky: other,占據other的執行權限位  
        t: other擁有x權限  
        T:other沒有x權限

############################################
chattr
  chattr +i(-i) 不能刪除,改名,更改
  chattr +a(-a) 只能追加內容
  chattr +A(-A)?鎖定atime時間 vi修改文件之後鎖失效
lsattr 顯示特定屬性
############################################

訪問控制列表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生效順序:所有者,自定義用戶,自定義組,其他人
        若屬於多個組的話,若沒有用戶權限匹配則多個組權限可以累積

#############################################
  啟用acl之後組權限已經改變為mask權限
#############################################

為多用戶或者組的文件和目錄賦予訪問權限rwx 
 mount -o acl /directory 
 getfacl  file |directory  查看文件或者目錄的acl權限
 setfacl  -m  u:wang:rwx file|directory 
 setfacl  -Rm g:sales:rwX directory  遞歸 
 setfacl  -M  file.acl file|directory   通過文件調用批量添加
 setfacl  -m  g:salesgroup:rw file| directory 
 setfacl  -m  d:u:wang:rx  directory   在目錄下新建文件的權限設置
 setfacl  -x  u:wang  file |directory 
 setfacl  -X file.acl  directory    通過文件批量刪除權限

ACL文件上的group權限是mask 值(自定義用戶,自定義組,擁有組的最大權 限),而非傳統的組權限 
    setfacl -m mask::r file 對文件file設置mask權限
getfacl  可看到特殊權限:flags 
通過ACL賦予目錄默認x權限,目錄內文件也不會繼承x權限 
base ACL 不能刪除 
setfacl  -k  dir 刪除默認ACL權限  
setfacl –b  file1清除所有ACL權限 
getfacl  file1 | setfacl --set-file=-   file2  復制file1的acl權限給file2  

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 

備份和恢復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(不一定要全恢復可以選擇其中一個文件或者目錄恢復) 遞歸按照acl.txt文件恢復acl權限,也可以實現單個文件或者目錄的恢復
    setfacl --restore acl.txt   恢復acl權限
    getfacl -R /tmp/dir1    

Linux文件權限與訪問控制