1. 程式人生 > >linux文件系統上的特殊權限及細致權限ACL

linux文件系統上的特殊權限及細致權限ACL

中間 文件特殊權限 項目 主機 user sel at命令 文件內容 一個

linux文件系統上的特殊權限及細致權限ACL

Chattr命令:

常用重要參數與選項:

  • :增加某一個特殊參數,其他原本存在的參數則不動;
  • :移除某一個特殊參數,其他原本存在的參數則不動;
    = :設定一定,且僅有後面接的參數;
    a : 當設定 a 之後,這個文件將只能增加數據,而不能刪除也不能修改數據,只有root 才能設定這屬性
    i :讓一個文件『不能被刪除、改名、設定連結也無法寫入或新增數據!對於系統安全性有相當大的幫助!只有 root 能設定此屬性

lsattr 命令:顯示特定屬性

語法格式:lsattr [-adR] 文件或目錄
選項與參數:
-a :將隱藏文件的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的文件名;

-R :連同子目錄的數據也一並列出來 !
示例:

[root@CentOS7 data]#touch testdir 
[root@CentOS7 data]#chattr +i testdir 
[root@CentOS7 data]#ls 
scripts  testdir
[root@CentOS7 data]#ll 
total 4
drwxr-xr-x. 5 root root 4096 Mar 19 19:38 scripts
-rw-r--r--. 1 root root    0 Mar 19 19:39 testdir
[root@CentOS7 data]#rm -r testdir 
rm: remove regular empty file ‘testdir’? y 
rm: cannot remove ‘testdir’: Operation not permitted
[root@CentOS7 data]#lsattr testdir 
----i----------- testdir

文件特殊權限:SUID,SGID,SBIT

我們一直使用的文件重要權限,那就是rwx這三個讀、寫、執行權限,那麽除了這個就沒有其他權限了嗎?
細心的人會註意到當我們查看/tmp和/usr/bin/passwd,在權限位上會出現我們不認識的t、s,那麽這裏的t、s就是文件隱藏的特殊權限了。

[root@CentOS7 data]#ll -d /tmp /usr/bin/passwd 
drwxrwxrwt. 32 root root  4096 Mar 19 19:57 /tmp
-rwsr-xr-x.  1 root root 27832 Jun 10  2014 /usr/bin/passwd
[root@CentOS7 data]#lsattr -a /etc/shadow
---------------- /etc/shadow

特殊權限SUID:

我們都知道/etc/shadow文件的權限為000;那麽就是除了root外的所有用戶將對這個文件沒有任何權限,然而當普通用戶使用passwd命令時,發現我們能修改用戶密碼並保存進/etc/shadow中,那豈不是就前後矛盾了?原因就是/usr/bin/passwd上的特殊權限s,當普通用戶執行passwd命令時,會臨時擁有root的權限。
特殊權限SUID的功能:
(1)SUID權限僅對二進制程序有效; //普通用戶的/usr/bin/passwd 這個程序來說擁有x權限,表示普通用戶也能執行passwd;
(2)執行者對於該程序需要具有x的可執行權限; //passwd的擁有者時root,root對文件擁有絕對控制權;
(3)本權限僅在執行該程序的過程中有效; //普通用戶執行passwd的過程中,會暫時獲得root的權限;
(4)執行者將具有該程序擁有者的權限; // 文件/etc/shadow可以被普通用戶執行的passwd命令修改;
那麽普通用戶能使用cat命令讀取/etc/shadow的內容嗎?通下面命令我們發現cat命令並不存在s特殊權限位,也不能讀取shadow的內容;

[root@CentOS7 data]#ll /bin/cat 
-rwxr-xr-x. 1 root root 54160 Oct 31 03:16 /bin/cat
[root@CentOS7 data]#su gong 
[gong@CentOS7 data]$ cat /etc/shadow 
cat: /etc/shadow: Permission denied

特殊權限SGID:

當s標誌在文件的擁有者的x項目為SUID,那s在群組的x時則稱為Set GID,簡寫為SGID;SUID可作用在文件或目錄上;
當SGID作用在文件上,其起到的功能為:
(1)SGIU對二進制程序有用;
(2)程序執行者對於該程序來說,需具備x 的權限;
(3)執行者在執行的過程中將會獲得該程序群組的支持;

[hh@CentOS7 data]$ ls -l testfile                  //查看文件的權限,在群組位置有的執行位上為s,other用戶對程序只有x執行權限;
-rw-r-s--x 1 root gong 10 Mar 20 09:31 testfile
[hh@CentOS7 data]$ id hh                           //用戶hh屬於組gong的成員
uid=1004(hh) gid=1004(hh) groups=1004(hh),1000(gong)
[hh@CentOS7 data]$ cat testfile                    //這時用戶hh在執行的過程中獲得了該程序群組的支持,從而可以讀取文件內容;
d
sd
sd

當SGID作用在文件上,其起到的功能為:
(1)用戶若對此目錄具有r與x的權限時,該用戶能夠進入此目錄;
(2)用戶在此目錄下的有效群組將會變成該目錄的群組;
(3)用途:若用戶在此目錄下具有w的權限(可以新建文件),則使用者所建立的新文件,改新文件的群組與此目錄的群組相同;
註:通常用於創建一個協作目錄;

[root@CentOS7 data]#ll -d testdir/               //查看目錄發現群組對該目錄有s權限,其他用戶只有w權限
drwxrws-w- 2 root gong 6 Mar 20 10:01 testdir/
[root@CentOS7 data]#su hh                        //切換用戶
[hh@CentOS7 testdir]$ id                         //用戶hh時群組gong的組員
uid=1004(hh) gid=1004(hh) groups=1004(hh),1000(gong)
[hh@CentOS7 data]$ cd testdir/                   //hh用戶有進入目錄權限
[hh@CentOS7 testdir]$ touch testfile1            //hh用戶有創建新文件的權限
[hh@CentOS7 testdir]$ ll                         //發現hh用戶創建的文件的群組自動屬於gong
total 0
-rw-rw-r-- 1 hh gong 0 Mar 20 10:06 testfile1
[hh@CentOS7 testdir]$ echo 11111 > testfile1     //hh用戶可修改文件
[hh@CentOS7 testdir]$ cat testfile1              //hh用戶可讀取文件
11111
[hh@CentOS7 testdir]$ rm testfile1               //hh用戶可刪除文件

特殊權限SBIT:

SBIT只對目錄有效,功能是:
當用戶對此目錄具有w、x權限,亦即具有寫入的權限時;
當用戶在該目錄下建立文件或目錄時,僅有自己與root才有權利刪除該文件;

[root@CentOS7 data]#ls -ld testdir/                       //目錄testdir的other的權限位上為t,權限為777
drwxrwsrwt 2 root root 23 Mar 20 10:20 testdir/
[root@CentOS7 testdir]#su hh                 
[hh@CentOS7 testdir]$ ll -d testfile1 
-rwxrwxrwx 1 gong gong 0 Mar 20 10:20 testfile1           //文件的所有者和所屬組為gong, hh用戶對該文件擁有rwx權限
[hh@CentOS7 testdir]$ rm -f testfile1                     //但hh用戶不能刪除此文件,只能root和文件屬主才能刪除
rm: cannot remove ‘testfile1’: Operation not permitted

主機的細致權限規劃:ACL的使用

ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統的 owner,group,others 的 read,write,execute 權限之外的細部權限設定。ACL 可以針對單一使用者,單一文件或目錄來進行 r,w,x 的權限規範,對於需要特殊權限的使用狀況非常有幫助。
查看本機的文件系統是否支持ACL:

[root@CentOS7 data]#dmesg |grep -i acl 
[    0.869680] systemd[1]: systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
[    3.264996] SGI XFS with ACLs, security attributes, no debug enabled

使用ACL:
getfacl :取得某個文件/目錄的ACL設定項目
語法格式:setfacl [-bkRd] [{-m|-x} acl參數] 目標文件名
選項與參數:
-m :設定後續的 acl 參數給文件使用,不可與 -x 合用;
-x :刪除後續的 acl 參數,不可與 -m 合用;
-b :移除『所有的』 ACL 設定參數;
-k :移除『預設的』 ACL 參數,關於所謂的『預設』參數於後續範例中介紹;
-R :遞歸設定 acl ,亦即包括次目錄都會被設定起來;
-d :設定『預設 acl 參數』的意思!只對目錄有效,在該目錄新建的數據會引用此默認值
setfacl :設定某個目錄/文件的ACL規範,對用戶的細致acl權限設置:setfacl -m u:uname:rwx filename

[root@CentOS7 data]#touch acl_testfile                 //創建測試文件
[root@CentOS7 data]#ll acl_testfile                    //查看文件權限
-rw-r--r-- 1 root root 0 Mar 20 10:44 acl_testfile
[root@CentOS7 data]#setfacl -m u:gong:rw acl_testfile   //使用setfacl給用戶gong設置權限
[root@CentOS7 data]#ll acl_testfile                     //發現文件的權限後面多了一個+號
-rw-rw-r--+ 1 root root 0 Mar 20 10:44 acl_testfile
[root@CentOS7 data]#setfacl -m u::rwx acl_testfile      //當使用setfacl設置文件權限中間用戶空時,發現默認將文件所有者的修改
[root@CentOS7 data]#ll acl_testfile 
-rwxrw-r--+ 1 root root 0 Mar 20 10:44 acl_testfile

查看文件的具體acl權限:getfacl filename

[root@CentOS7 data]#getfacl acl_testfile
# file: acl_testfile
# owner: root
# group: root
user::rwx
user:gong:rw-
group::r--
mask::rw-
other::r--

setfacl :設定某個目錄/文件的ACL規範,對群組的細致acl權限設置:setfacl -m g:group:rwx filename

[root@CentOS7 data]#setfacl -m g:gong:r acl_testfile 
[root@CentOS7 data]#getfacl acl_testfile
# file: acl_testfile
# owner: root
# group: root
user::rwx
user:gong:rw-
group::r--
group:gong:r--
mask::rw-
other::r--

linux文件系統上的特殊權限及細致權限ACL