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
-
給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…} : 比對{}中任意單個字元
比對條件:
-
- ?.txt
- [123]1.txt --> 11.txt 21.txt 31.txt
- [1-9].txt --> 1.txt 2.txt … 9.txt
- [^a-z].txt --> 除了a.txt … z.txt檔案
-
{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
練習題:
- 查找/var目錄下屬主為root,且屬組為mail的所有檔案或目錄
- 查找/usr目錄下不屬于root,bin或Hadoop的所有檔案或目錄
- 查找/etc目錄下周一内容曾被通路過的檔案或目錄
- 查找目前系統上沒有屬主或屬組,且近一周内曾被通路過的檔案或目錄
- 查找/etc目錄下大于1M且類型為普通檔案的所有檔案或目錄
- 查找/etc目錄下所有使用者都沒有寫權限的檔案
- 查找/etc目錄下至少一類使用者沒有執行權限的檔案
- 查找/etc/init.d目錄下,所有使用者都執行權限,且其它使用者寫權限的檔案