基礎知識 相信大家應該都知道linux的文件基本許可權,使用ls -l命令可以顯示文件的基本許可權,"-rwxrwxrwx.",第一位表示文件的屬性(是文件- ,目錄d等),後面每隔三位為屬主、屬組、其他用戶 對應的讀寫執行許可權。這個比較簡單很容易理解。 文件特殊許可權 單純的讀寫執行許可權無法滿足我們的基 ...
基礎知識
相信大家應該都知道linux的文件基本許可權,使用ls -l命令可以顯示文件的基本許可權,"-rwxrwxrwx.",第一位表示文件的屬性(是文件- ,目錄d等),後面每隔三位為屬主、屬組、其他用戶 對應的讀寫執行許可權。這個比較簡單很容易理解。
文件特殊許可權
單純的讀寫執行許可權無法滿足我們的基本要求,因此對應有了特殊許可權位(SUID、SGID、SBIT),這些許可權 位用來彌補一般許可權不能實現的功能,幫助沒有許可權的用戶執行需要root許可權的工作。下麵我們就詳細瞭解一下這三個特殊許可權位的功能和用法。
1、SUID
SUID可以讓普通用戶對某個可執行命令擁有屬主的許可權,比如普通用戶可以用passwd命令,然而passwd的許可權為:
[root@linux-node2 cron]# ll /bin/passwd -rwsr-xr-x. 1 root root 27832 Jan 30 2014 /bin/passwd
可以看到passwd的屬主許可權是rws,即x被賦予了特殊許可權,其他用戶執行該命令的時候也會擁有屬主的許可權。我們就拿rm命令舉一個例子(生產環境中不建議使用):
[root@linux-node2 cron]# ll /bin/rm -rwxr-xr-x. 1 root root 62808 Jan 25 2014 /bin/rm [root@linux-node2 cron]# chmod u+s /bin/rm [root@linux-node2 cron]# ll /bin/rm -rwsr-xr-x. 1 root root 62808 Jan 25 2014 /bin/rm [root@linux-node2 cron]# touch /data/test [root@linux-node2 cron]# ll /data/test -rw-r--r-- 1 root root 0 Jan 10 17:52 /data/test [root@linux-node2 cron]# su bing [bing@linux-node2 cron]$ rm -f /data/test
通過上面的例子可以看出,當我們賦予rm特殊許可權後,即使普通用戶對文件沒有寫入許可權,也可以使用特殊許可權對其操作。
2、SGID
SGID可以讓其他用戶對某個可執行命令擁有屬組許可權,原理同SUID,只是這個是屬組中x被賦予特殊許可權,具體不再詳解,請看例子:
[bing@linux-node2 cron]$ ll /usr/bin/wall -r-xr-sr-x. 1 root tty 15344 Jan 27 2014 /usr/bin/wall
刪除SGID特殊許可權:chmod g-s /usr/bin/wall,關於chmod的命令這裡就不解釋了。
3、SBIT
SBIT是針對others來設置的,和上面兩個一樣,只是功能不同而已。
SBIT目前只針對目錄有效,對於目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅自己與root用戶才有許可權刪除。
像/tmp目錄(drwxrwxrwt.),任何人可以在/tmp內增加、修改文件,但是這個目錄只有root和自己才能夠刪除文件。舉例說明:
[bing@linux-node2 ~]$ cd /data/ [bing@linux-node2 data]$ touch test1 [bing@linux-node2 data]$ chmod o+t test1 [bing@linux-node2 data]$ ll test1 -rw-rw-r-T 1 bing bing 0 Jan 10 18:20 test1
上面的例子是錯誤示範,刪除文件是看上級目錄許可權的,所以這樣創建SBIT文件並沒有什麼作用,這個SBIT特殊許可權建議對目錄操作,目錄下的文件會生效哦。
這裡我就不演示切換到其他用戶刪除該文件了,感興趣的自己測試。
文件隱藏許可權
linux中有些文件,雖然我們對這個文件有許可權,卻沒有辦法編輯和刪除,或者僅能對這個文件追加等操作,這個就涉及到了linux的隱藏許可權。
1、chattr命令用於設置文件的隱藏許可權,用法“chattr [+|-參數] [文件]”。
參數:
1 A:即Atime,告訴系統不要修改對這個文件的最後訪問時間。 2 S:即Sync,一旦應用程式對這個文件執行了寫操作,使系統立刻把修改的結果寫到磁碟。 3 a:即Append Only,系統只允許在這個文件之後追加數據,不允許任何進程覆蓋或截斷這個文件。如果目錄具有這個屬性,系統將只允許在這個目錄下建立和修改文件,而不允許刪除任何文件。 4 b:不更新文件或目錄的最後存取時間。 5 c:將文件或目錄壓縮後存放。 6 d:當dump程式執行時,該文件或目錄不會被dump備份。 7 D:檢查壓縮文件中的錯誤。 8 i:即Immutable,系統不允許對這個文件進行任何的修改。如果目錄具有這個屬性,那麼任何的進程只能修改目錄之下的文件,不允許建立和刪除文件。 9 s:徹底刪除文件,不可恢復,因為是從磁碟上刪除,然後用0填充文件所在區域。 10 u:當一個應用程式請求刪除這個文件,系統會保留其數據塊以便以後能夠恢復刪除這個文件,用來防止意外刪除文件或目錄。 11 t:文件系統支持尾部合併(tail-merging)。 12 X:可以直接訪問壓縮文件的內容。
舉例說明:我們想把某個文件鎖定只讀,不允許任何人修改或刪除,可以用+i選項。
[root@linux-node2 data]# ll test -rw-r--r-- 1 root root 0 Jan 11 09:25 test [root@linux-node2 data]# lsattr test ---------------- test [root@linux-node2 data]# chattr +i test [root@linux-node2 data]# lsattr test ----i----------- test [root@linux-node2 data]# rm -f test rm: cannot remove ‘test’: Operation not permitted
可以看出,使用隱藏文件屬性保護文件很重要,即使root用戶也無法對文件進行編輯,例如可以把很重要的日誌文件保存,可以用+a選項,只能對日誌文件進行追加寫入,無法查看可編輯,這樣保證了日誌文件的安全性。
刪除文件隱藏許可權也很簡單(chattr -i test)。
2、lattr 查看隱藏許可權,用法:“lattr [文件]”。
ACL許可權設置命令(setfacl、getfacl)
訪問控制列表(Access Control List, ACL)在很多地方都能看到,比如路由交換命令中,防火牆規則中都能看到這個名詞,主要是限制細節的功能。
以上的許可權管理都是基於用戶和用戶組的,而無法做到更精細的文件許可權管理。這裡就引入了setface命令可以對單一用戶、單一文件或目錄進行rwx許可權控制。
1、 setfacl
用法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
選項:
-m, --modify-acl 更改文件的訪問控制列表 -M, --modify-file=file 從文件讀取訪問控制列表條目更改 -x, --remove=acl 根據文件中訪問控制列表移除條目 -X, --remove-file=file 從文件讀取訪問控制列表條目並刪除 -b, --remove-all 刪除所有擴展訪問控制列表條目 -k, --remove-default 移除預設訪問控制列表 --set=acl 設定替換當前的文件訪問控制列表 --set-file=file 從文件中讀取訪問控制列表條目設定 --mask 重新計算有效許可權掩碼 -n, --no-mask 不重新計算有效許可權掩碼 -d, --default 應用到預設訪問控制列表的操作 -R, --recursive 遞歸操作子目錄 -L, --logical 依照系統邏輯,跟隨符號鏈接 -P, --physical 依照自然邏輯,不跟隨符號鏈接 --restore=file 恢復訪問控制列表,和“getfacl -R”作用相反 --test 測試模式,並不真正修改訪問控制列表屬性 -v, --version 顯示版本並退出 -h, --help 顯示本幫助信息
例如:去掉user用戶對data的訪問許可權:setfacl -x u:user /data/
2、getfacl
getfacl是查看文件或文件夾的訪問控制許可權
用法:
getfacl file
這裡就舉例說一下訪問控制列表的用法:
針對用戶的設定方式:(u:用戶名:許可權)
設定許可權用m選項,刪除許可權用x選項,
[root@linux-node2 data]# ll test2 -rw-r--r-- 1 root root 0 Jan 11 11:21 test2 [root@linux-node2 data]# setfacl -m u:bing:rwx test2 [root@linux-node2 data]# getfacl test2 # file: test2 # owner: root # group: root user::rw- user:bing:rwx group::r-- mask::rwx other::r-- #授權用戶bing對該文件有寫入許可權,切換到bing用戶 [bing@linux-node2 data]$ echo "haha" >test2 [bing@linux-node2 data]$ cat test2 haha
參考文獻:https://blog.csdn.net/ttt111zzz/article/details/78779247