天天看點

2020-09-03file: acl_test1owner: rootgroup: rootfile: testfileowner: rootgroup: root:注釋

Linux ACL權限

ACL 通路控制清單; 主要目的是在提供的傳統的owner group w x r 權限之外

的細部權限設定

ACL 可以針對某一個使用者,某一個檔案或者目錄來設定rwx權限,對于

需要特殊權限的使用狀态非常有幫助

setfacl 指令 : 設定權限

[[email protected] tmp]# setfacl --help

setfacl 2.2.51 – set file access control lists

Usage: setfacl [-bkndRLP] { -m|-M|-x|-X … } file …

常用選項:

-m : 添加acl設定參數

-x :删除acl設定參數

-b :移除所有的acl設定參數

-R :遞歸添加acl設定參數

-d : 添加預設acl設定參數(目錄)

删除使用者權限: setfacl -x u:username file

删除組權限: setfacl -x g:groupname file

删除整個acl權限: setfacl -b file

執行個體1 針對使用者的設定方式:

設定規範:u:username:power

1.設定user對testfile有rwx權限

setfacl -m u:user:rwx testfile

2.設定user對testdirectory目錄下所有檔案有rwx權限

setfacl -R -m u:user:rwx testdirectory

3.去掉user對testdirectory的x權限

setfacl -x u:user testdirectory/

4.去掉所有acl權限

setfacl -b

5.為testdirectory目錄添加預設的acl權限,此目錄下建立目錄和檔案,user都有rwx權限

setfacl -d -m u:user:rwx testdirectory/

執行個體2: 針對使用者組的設定方式

設定規範:g:groupname:power

  1. 給acl_test1檔案添加mygropu1組rx權限設定

    [[email protected] ~]# setfacl -m g:mygroup1:rx acl_test1

    [[email protected] ~]# getfacl acl_test1

file: acl_test1

owner: root

group: root

user::rwx

user:vbird1:rx

group::r–

group:mygroup1:rx # 組權限設定

mask::rx

other::r–

getfacl指令:檢視acl權限設定

[[email protected] tmp]# getfacl testfile

file: testfile

owner: root

group: root

user::rw-

user:user:rwx # 針對user使用者具有rwx權限

group::r–

group:group1:rw- # 針對group1組具有rw權限

mask::rwx

other::r-- # 如果沒有其他設定 預設屬于other

[[email protected] tmp]# ll testfile

-rw-rwxr–+ 1 root root 0 Feb 8 02:29 testfile

[[email protected] tmp]# su user

[[email protected] tmp]$ echo “hello” > testfile

[[email protected] tmp]$ cat testfile

hello

通配符: 是shell在做比對的時候會用到,一般用于比對檔案名

它是由shell進行解析的,比如 find ls cp 等等指令都可以配合着通配符一起使用

shell常見的通配符

* : 比對0或者多個字元

?: 比對任意1個字元

[list]: 比對list中任意單個字元

[c1-c2]: 比對c1-c2中任意單個字元

[^c1-c2]: 不比對c1-c2中任意單個字元

{string1,string2…} : 比對{}中任意單個字元

比對條件:

  1. ?.txt
  2. [123]1.txt --> 11.txt 21.txt 31.txt
  3. [1-9].txt --> 1.txt 2.txt … 9.txt
  4. [^a-z].txt --> 除了a.txt … z.txt檔案
  5. {A,B,C}.txt --> A.txt B.txt C.txt檔案

    shell元字元

    IFS : //

    CR:

    = :設定變量

    $ : 擷取變量

    < : 重定向

    | : 管道

    & : 背景執行指令

    () : 在子shell中執行指令/運算或指令替換等

    {}: 函數中執行/變量替換的範圍定界

    ; : 指令結束後,忽略其傳回值,繼續執行下一個指令

    && : 指令結束後,若為true,繼續執行下一個指令

    || : 指令結束後,若為false,繼續執行下一個指令

    ! : 非

    :注釋

    \ : 轉義

shell轉義符:

硬轉義: 内部所有shell元字元、通配符等 都會被關閉掉 ’ ’

軟轉義: 内部所有shell元字元、通配符等 都正常生效 " "

案例:

[[email protected] test1]# a=1

[[email protected] test1]# echo ‘$a’

KaTeX parse error: Expected 'EOF', got '#' at position 20: …[email protected] test1]#̲ echo "a"

1

find指令

實時查找工具,通過周遊指定路徑下的檔案系統完成檔案查找

工作特點:

查找速度略慢

精确查找

實時查找

[[email protected] tmp]# find --help

Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]

find [選項] [路徑] [查找條件 + 處理動作]

路徑: 指定具體目錄路徑,預設是目前檔案夾

查找條件: 指定查找的标準(檔案名/大小/檔案類型/權限等等),預設是找出所有檔案

處理動作: 對符合條件的檔案做什麼操作,預設是輸出螢幕

  • 查找條件

    根據檔案名稱查找:

    -name “filename” 根據檔案名稱查找(支援通配符global)

    -iname “filename” 根據檔案名稱查找;忽略大小寫(支援通配符global)

    -regex “PATTERN” 以pattern比對整個檔案路徑字元串,而不僅僅是檔案名稱

    [[email protected] tmp]# find ./ -name “1[123].txt”

    根據屬主和屬組查找:

    -user username : 查找屬主為指定使用者的檔案

    -group groupname: 查找屬組為指定使用者的檔案

    -uid UID : 查找屬主為指定UID号的檔案

    -gid GID :查找數組為指定GID号的檔案

    -nouser: 查找沒有屬主的檔案

    -nogroup: 查找沒有屬組的檔案

根據檔案類型查找:

-type TYPE :

TYPE: f d l s b c p

組合條件:

與:-a

或:-o

非: -not

相關案例:找出/tmp目錄下,屬主不是root,且檔案名不是fstab的檔案

find /tmp ( -not -user root -a -not -name “fstab”\ )

根據檔案大小查找:

-size [+|-]N[bkMG]

尋找/下檔案大小超過10M的所有檔案:

[[email protected] tmp]# find / -size +10M

根據時間戳:

天:

-atime [+|-]N

-mtime [+|-]N

-ctime [+|-]N

-atime +7 : 表示7天内

-amin [+|-]N

-mmin [+|-]N

-cmin [+|-]N

根據權限進行查找:

-perm [+|-]MODE

MODE : 精确查找

/MODE : 任何一類(u g o )對象的權限中隻要能有一位比對即可

-MODE : 每一類對象都必須同時擁有為其制定的權限标準

處理動作:

-print: 預設處理動作,顯示至螢幕上

-ls: 類似于對查找到的檔案執行 ls -l 指令

-delete: 删除查找到的檔案

-fls /path/to/somefile : 查找到的所有檔案的長格式資訊儲存至指定檔案中

-ok COMMAND {}\ :  
           

對查找到的每個檔案執行由COMMAND指定的指令

{}: 用于引用查找到的檔案名稱自身

互動式,每個檔案執行指令前會讓使用者确定

-exec COMMAND {}\:  
           

對查找到的每個檔案執行由COMMAND指定的指令

{}: 用于引用查找到的檔案名稱自身

執行個體1: 對/tmp目錄下所有屬主為root使用者的檔案修改其屬主為zhangsan

[[email protected] tmp]# find /tmp -user root -ok chown zhangsan: {} ; (這裡 {} \ 之間要有空格)

執行個體2: 對/tmp目錄下所有屬主為zhangsan使用者或者屬主為zhangsan的檔案修改其為root:root

[[email protected] tmp]# find /tmp -user zhangsan -o -group zhangsan -exec chown root:root {} ;

注意:find傳遞查找到的檔案至後面指定的指令時,查找到所有符合條件的檔案一次性傳遞給後面的指令;

另一種 方式可規避此問題 find | xargs COMMAND

等同于上面執行個體2的操作

[[email protected] tmp]# find /tmp -user zhangsan -o -group zhangsan | xargs chown root:root

練習題:

  1. 查找/var目錄下屬主為root,且屬組為mail的所有檔案或目錄
  2. 查找/usr目錄下不屬于root,bin或Hadoop的所有檔案或目錄
  3. 查找/etc目錄下周一内容曾被通路過的檔案或目錄
  4. 查找目前系統上沒有屬主或屬組,且近一周内曾被通路過的檔案或目錄
  5. 查找/etc目錄下大于1M且類型為普通檔案的所有檔案或目錄
  6. 查找/etc目錄下所有使用者都沒有寫權限的檔案
  7. 查找/etc目錄下至少一類使用者沒有執行權限的檔案
  8. 查找/etc/init.d目錄下,所有使用者都執行權限,且其它使用者寫權限的檔案

繼續閱讀