首頁 > 軟體

Linux檔案與目錄的預設許可權與隱藏許可權 - umask, chattr, lsattr, SUID, SGID, SBIT, file

2020-06-16 17:56:38

Linux檔案與目錄的預設許可權與隱藏許可權 - umask, chattr, lsattr, SUID, SGID, SBIT, file

檔案預設許可權:umask

[root@www ~]# umask
0022             <==與一般許可權有關的是後面三個數位!
[root@www ~]# umask -S
u=rwx,g=rx,o=rx

預設的情況如下:

若使用者建立為『檔案』則預設『沒有可執行( x )許可權』,亦即只有 rw 這兩個專案,也就是最大為 666 分,預設許可權如下:
-rw-rw-rw-

若使用者建立為『目錄』,則由於 x 與是否可以進入此目錄有關,因此預設為所有許可權均開放,亦即為 777 分,預設許可權如下:
drwxrwxrwx

[root@www ~]# umask
0022
[root@www ~]# touch test1
[root@www ~]# mkdir test2
[root@www ~]# ll 
-rw-r--r-- 1 root root     0 Sep 27 00:25 test1
drwxr-xr-x 2 root root  4096 Sep 27 00:25 test2

umask的利用與重要性

[root@www ~]# umask 002
[root@www ~]# touch test3
[root@www ~]# mkdir test4
[root@www ~]# ll 
-rw-rw-r-- 1 root root     0 Sep 27 00:36 test3
drwxrwxr-x 2 root root  4096 Sep 27 00:36 test4

在預設的情況中, root 的 umask 會拿掉比較多的屬性,root 的 umask 預設是 022 , 這是基於安全的考量啦~至於一般身份使用者,通常他們的 umask 為 002 ,亦即保留同群組的寫入權力!

chattr (組態檔隱藏屬性)

[root@www ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與引數:
+   :新增某一個特殊引數,其他原本存在引數則不動。
-   :移除某一個特殊引數,其他原本存在引數則不動。
=   :設定一定,且僅有後面接的引數

A  :當設定了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime
     將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的計算機有幫助
S  :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個
     屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a  :當設定 a 之後,這個檔案將只能新增資料,而不能刪除也不能修改資料,只有root 
     才能設定這個屬性。 
c  :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,
     但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d  :當 dump 程式被執行的時候,設定 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i  :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連結也無法
     寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能設定此屬性
s  :當檔案設定了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟
     空間,所以如果誤刪了,完全無法救回來了喔!
u  :與 s 相反的,當使用 u 來組態檔時,如果該檔案被刪除了,則資料內容其實還
     存在磁碟中,可以使用來救援該檔案喔!
注意:屬性設定常見的是 a 與 i 的設定值,而且很多設定值必須要身為 root 才能設定

範例:請嘗試到/tmp底下建立檔案,並加入 i 的引數,嘗試刪除看看。
[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest     <==建立一個空檔案
[root@www tmp]# chattr +i attrtest <==給予 i 的屬性
[root@www tmp]# rm attrtest        <==嘗試刪除看看
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted  <==操作不許可
# 看到了嗎?呼呼!連 root 也沒有辦法將這個檔案刪除呢!趕緊解除設定!

範例:請將該檔案的 i 屬性取消!
[root@www tmp]# chattr -i attrtest

lsattr (顯示檔案隱藏屬性)

[root@www ~]# lsattr [-adR] 檔案或目錄
選項與引數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來! 

[root@www tmp]# chattr +aij attrtest
[root@www tmp]# lsattr attrtest
----ia---j--- attrtest

Set UID

基本上SUID有這樣的限制與功能:

SUID 許可權僅對二進位程式(binary program)有效;
執行者對於該程式需要具有 x 的可執行許可權;
本許可權僅在執行該程式的過程中有效 (run-time);
執行者將具有該程式擁有者 (owner) 的許可權。

Set GID

與 SUID 不同的是,SGID 可以針對檔案或目錄來設定!如果是對檔案來說, SGID 有如下的功能:

SGID 對二進位程式有用;
程式執行者對於該程式來說,需具備 x 的許可權;
執行者在執行的過程中將會獲得該程式群組的支援!

當一個目錄設定了 SGID 的許可權後,他將具有如下的功能:

使用者若對於此目錄具有 r 與 x 的許可權時,該使用者能夠進入此目錄;
使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
用途:若使用者在此目錄下具有 w 的許可權(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同。

SUID/SGID/SBIT 許可權設定

[root@www ~]# cd /tmp
[root@www tmp]# touch test                  <==建立一個測試用空檔
[root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的許可權
-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的許可權
-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 許可權
-rwSrwSrwT 1 root root 0 Sep 29 03:06 test
# 設定許可權成為 -rws--x--x 的模樣:
[root@www tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Aug 18 23:47 test

# 承上,加上 SGID 與 SBIT 在上述的檔案許可權中!
[root@www tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Aug 18 23:47 test

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-08/120979.htm


IT145.com E-mail:sddin#qq.com