一、訪問控制列表
1.ACL的作用
訪問控制列表(ACL,Access Control List),在基本的文件的權限管理之上,實現了靈活的權限管理。一個文件設置了ACL,那么除了文件的所有者,所屬組和其他人,可以為更多的用戶設置ACL權限,使之可以對文件進行或者不進行權限的操作。
Centos7默認創建的xfs和ext4文件系統具有ACL功能,Centos7之前版本,默認手工穿件的ext4文件系統無ACL,需要手動增加
?????? tune2fs -o acl /dev/sdb1
?????? mount -o acl .dev/sdb1 /mnt/test
ACL的內容格式為(可用getfacl FILENAME查看ACL):
# file: FILENAME
# owner:
# group:
user::權限
group::權限
other::權限
?????? ACL的設置格式:setfacl -m [d [efault]:] [u [ser]:] uid [:perms] FILENAME
?????? 從格式可以看出,ACL可以為多個用戶或組設置文件和目錄的訪問權限rwx
?????? 2.ACL中的umask
?????? ACL中有一個umask值,通常它是添加的ACL權限中權限最多的值,它限制著添加的ACL的權限,由于這個值可以修改,因此在某些ACL中可以看到某一條的ACL條目后會加上注釋用以說明其有效權限。比如對某個文件添加一個權限比umask大的ACL,此時使用-n選項讓系統不更新umask的值,那么添加進去的ACL將會有注釋它的有效權限。也就是說這ACL的有效權限只有在umask存在的權限,例外ACL是不會給某條ACL添加上ACL沒有而umask有的權限。
3.默認ACL權限
?????? 默認的ACL權限用于目錄,在該目錄下創建的文件都有默認的ACL權限,但是給目錄默認x權限,目錄內文件不會繼承x權限。
4.ACL的備份和恢復
?????? cp和mv都支持ACL,cp命令需要加上-p參數,tar等參見的備份工具不會保留目錄和文件的ACL信息
基本格式 getfacl -R /tmp/dir1 >acl.txt
????????????? Setfacl -R –set-file=acl.txt /tmp/dir1
?
二、文件權限的字母法和數字法
1.???? 文件權限的字母法
·文件的權限一般有讀、寫、執行三種,分別用r、w、x表示。文件所有者、文件所屬組用戶、其他用戶都可以使用rwx三個權限。Linux中用a表示文件所有者、文件所屬組用戶、其他用戶,u表示文件所有者,g表示文件所屬組用戶,o表示其他用戶修改文件的權限命令為chmod,為某個文件修改權限的格式為:
chmod [a|u|g|o][+|-][r|w|x] FILENAME
使用字母法可以很清晰的指明文件修改哪些權限
2.???? 文件權限的數字法
文件的權限可以按照字母設置對應的數字,即— 000? –x 001? -w- 010? r–100,這樣就可以將某個用戶的權限加起來用數字表示,例如rw==100+010==4+2=6;rx==100+001==4+1=5;
所以設置格式可以為
chmod xxx(計算好的權限) FILENAME
在linux中有一個用于新建文件和目錄的默認權限的umask值,一般情況下非特權用戶的umask是002,root的umask是022,在命令行界面也可以輸出入umask來查看這個值,一般情況下,新建的文件權限為666-umask,新建DIR權限為777-umask,如果因為修改umask值二導致文件權限計算出來的結果存在執行(奇數)權限,則將其權限加1
?
三、重定向和管道
1.???? 重定向
Linux提供給程序三種I/O設備,分別是:
標準輸入(stdin)默認接受來自鍵盤的輸入,數字上用0表示
標準輸出(stdout)默認輸出到終端窗口,數字上用1表示
標準錯誤(stderr)默認輸出到終端窗口,數字上用2表示
將這三種發I/O設備改變默認位置,稱之為重定向,三種I/O設備的操作符號:
>把stdout重定向到文件,此時文件若有內容則會被覆蓋,可使用set -C 禁止覆蓋文件,但是可以追加,使用>|可以強制覆蓋,>>可用于向文件追加內容,<<XX ……..<<XX用于多行重定向
????????????? 2>把stderr重定向到文件,文件內容會被覆蓋,使用2>>可以追加
????????????? &>把所有輸出重定向到文件,文件內容會被覆蓋,使用&>>可以追加
????????????? 使用小括號()可以將多個程序的輸出合并
2.???? 管道
管道用于連接命令,管道將前一個程序的標準輸出作為后一個程序的標準輸入(在程序前加xargs,可逐條傳遞前一個命令的標準輸出)。
Stderr默認不能通過管道轉發,可以使用2>&1或者|&實現,即將標準錯誤轉換成正確再用管道。
?????? ?????? tee用于將前一條命令的stdout作為后一條命令的stdin,并且輸出到標準輸出流,類似于一個T型
?????????????
附:幾個小命令的學習
?????? chown:?? 設置文件的所有者
?????? chown [OPTION]… [OWNER][:[GROUP]] FILE…
? ??? or:? chown [OPTION]… –reference=RFILE FILE…
?????? -c:更改所有者完成后,給出提示信息,在命令沒有錯誤并且執行后時會提示更改了所有者
?????? -f:屏蔽大部分命令的錯誤信息,更改的所有者不存在的錯誤不能屏蔽,文件不存在的錯誤可以屏蔽
?????? -v:為每個處理的文件輸出一個診斷信息
?????? -h:只更改軟鏈接(符號鏈接)的所有者,而不會影響鏈接所指向文件的所有者,也就是說不使用這個選項修改軟鏈接的所有者,那么只會更改對應的文件的所有者,而不會改變軟鏈接的所有者
?????? -R:遞歸的操作文件或文件和目錄,修改某個目錄的所有者時,該目錄下的所有的文件的所有者都會被遞歸修改
?????? ?–reference:將后一個文件file的所有者修改成前一個文件rfile的所有者
chgrp:???? 設置文件的所屬組
?????? chogrp [OPTION]… GROUP FILE…
? ??? or:? chgrp [OPTION]… –reference=RFILE FILE…
?????? -c:更改所屬組完成后,給出提示信息,在命令沒有錯誤并且執行后時會提示更改了所屬組
?????? -f:屏蔽大部分命令的錯誤信息,更改的所屬組不存在的錯誤不能屏蔽,文件不存在的錯誤可以屏蔽
?????? -v:為每個處理的文件輸出一個診斷信息
?????? -h:只更改軟鏈接(符號鏈接)的所屬組,而不會影響鏈接所指向文件的所屬組,也就是說不使用這個選項修改軟鏈接的所屬組,那么只會更改對應的文件的所屬組,而不會改變軟鏈接的所屬組
?????? -R:遞歸的操作文件或文件和目錄,修改某個目錄的所屬組時,該目錄下的所有的文件的所屬組都會被遞歸修改
?????? –reference:將后一個文件file的所屬組修改成前一個文件rfile的所屬組
chmod:?? 修改文件權限,修改軟鏈接的權限時修改的是軟鏈接指向的文件的權限
?????? chmod [OPTION]… MODE[,MODE]… FILE…
? ??? or:? chmod [OPTION]… OCTAL-MODE FILE…
? ??? or:? chmod [OPTION]… –reference=RFILE FILE…
?
?????? -c:更改權限完成后,給出提示信息,在命令沒有錯誤并且執行后時會提示更改成什么樣的權限
?????? -f:屏蔽大部分命令的錯誤信息,更改的權限錯誤不能屏蔽,文件不存在的錯誤可以屏蔽
?????? -v:為每個處理的文件輸出一個診斷信息
?????? -R:遞歸的操作文件或文件和目錄,修改某個目錄的權限時,該目錄下的所有的文件的權限都會被遞歸修改
?????? –reference:將后一個文件file的權限修改成前一個文件rfile的權限
umask:?? 顯示或設置文件模式掩碼,創建的文件或目錄的權限與之相關
?????? -p:輸出可被調用,可以用于輸入
?????? -S:以模式的形式顯示,即“u=rwx,g=rx,o=rx”形式
chattr:???? 字母“aAcCdDeijsStTu”選擇文件的新屬性:僅追加(a),沒有 一次更新(A),壓縮(c),(C)沒有拷貝,沒有轉儲(d), 同步目錄更新(D),范圍格式(e),不可變(i)(j),安全 刪除(s),同步 – 沒有更新(S),沒有尾部合并(T),頂部目錄層次結構(T),和不可取消(u)
lsatrr:????? 顯示通過chatrr加的特定的屬性
setfacl:設置文件訪問控制列表
?????? ACL條目
?????? [d [efault]:] [u [ser]:] uid [:perms]
?????? 指定用戶的權限,如果uid為空,則擁有文件所有者的權限
?????? [d [efault]:] g [group]:gid [:perms]
?????? 指定組的權限,如果gid為空,則擁有組的權限
?????? [d[efault]:] m[ask][:] [:perms]
?????? 有效的權限掩碼
?????? [d[efault]:]o[ther] [:] [:perms]
?????? 他人的權限
?????? -m:設置文件的ACL規則
?????? -M:將某個文件中設置好ACL條目設置為指定文件的ACL
?????? -x:移除某個文件中的某條ACL,不會移除mask
?????? -X:從指定文件中移除存放ACL條目的文件中的ACL
?????? -b:移除所有的ACL條目,包括mask
?????? -k:移除默認的ACL條目,默認的ACL只能對目錄使用,使用后新建的文件都會有默認的ACL條目,刪除目錄的默認ACL條目后,目錄下的文件的ACL條目不會改變
?????? -n:設置ACL條目時不更新mask,即以前的mask不會應為ACL新加的文件原來沒有的權限而修改mask
?????? -d:設置文件的默認ACL條目僅對目錄有效
?????? -R:將對目錄設置ACL條目遞歸到子目錄中,包括目錄和文件
?????? -L:會為只有符號鏈接在目錄下的文件設置ACL,與R連用
?????? -P:遵循物理路徑,與R連用,如果一個文件的真實文件不在目錄下而是一個符號鏈接,那么在為這個目錄設置ACL時會跳過這種符號鏈接,即不會為符號鏈接指向的文件設置目錄的ACL條目
getfacl:查看文件的ACL
?????? -a:僅顯示文件的ACL條目
?????? -d:僅顯示默認的ACL,即ACL條目最上面的那幾條注釋
?????? -c:僅顯示文件的ACL,會顯示ACL后effective注釋,ACL條目最上面的默認ACL的注釋不會顯示
?????? -e:打印所有的有效權限
?????? -E:不打印有效權限
?????? -s:跳過只有基本條目的文件
?????? -R:遞歸查看子目的ACL,可用于備份ACL
?????? -L:可以查看符號鏈接指向的文件的ACL,與R連用
?????? -P:不會查看只有符號鏈接在目錄下的文件或目錄的ACL
?????? -n:使用表格輸出格式
?????? -p:查看文件ACL時不刪除前導的“/”
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89393