Linux 文件權限

Linux 文件權限

    Linux系統中有句話叫做“everything is files”,這當然不是戲稱了,windows系統裏的mp3、avi、txt、exe、word等等格式的文件在Linux系統裏都是以文件形式存在,當然有人會說那Linux系統的文件不也是以 .mp3、 .txt結尾嗎?不是的,Linux系統裏這樣寫是爲了的系統操作人員方便辨認,把後面的 .mp3、 .txt刪了,也不影響文件本質(當然前提是編碼格式不變)。在Linux系統裏的文件權限分爲有r、w、x、s、t。

    1. 查看文件權限 

[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common

 文件類型  所有者權限  用戶組權限  其他用戶權限  特殊權限  連接數  所有者  用戶組  大小 修改日期      文件名
 d            rwx           rwx           ---                .            2         root    root     6    Jul 21 15:17   common

        a.文件類型:Linux文件一共有七種類型,分別是:- 普通文件、d 目錄文件、b 塊設備、c 字符設備、l 符號鏈接文件、p 管道文件pipe、s 套接字文件sock

        b.所有者權限: 對於目錄來說,內容爲文件夾中的文件名列表 :r:可讀取文件名列表

                                                                                       w:可新建,刪除,重命名文件名

                                                                                       x:有進入文件夾的權限,若要執行文件夾的w權限,必須要先有進入文件夾的權限,所以要使用w權限,必須要有x權限

                I.對於文件來說,內容爲文件內容本身:r:可讀取文件內容

                                                                w:可修改文件內容

                                                                x:可執行文件

                II.權限可以用數字表示:r: 4 

                                            w:2

                                            x: 1      例如   764  表示 rwxrw-r--

                          

                III.文件還有3種特殊權限 ,也可以用數字表示suid:4   s

                                                                      sgid:2   s

                                                                      sticky:1    t

                 IV.suid:當對於一個可執行的二進制文件作用了suid之後,任何人在執行該文件時,臨時擁有其所有人的權限,可設置改權限

[root@localhost ~]# vim cyn.txt (當執行這個腳本的時候該用戶會臨時有文件所有者的權限,由於過程比較繁雜,請自行測試,歡迎留言討論)
#/bin/bash
echo hello,my name is cyn
[root@localhost ~]# chmod +x cyn.txt
[root@localhost ~]# ./cyn.txt 
hello,my name is cyn.
[root@localhost ~]# chmod u+s cyn.txt 
[root@localhost ~]# ll
total 4
-rwsr-xr-x. 1 root root 38 Jul 21 17:29 cyn.txt

                   V.sgid:-當對於一個可執行的二進制文件作用了sgid之後,任何人在執行該文件時,臨時擁有其所有組的權限,可設置改權限

[root@localhost ~]# chmod g+s cyn.txt
[root@localhost ~]# ll
total 4
-rwsr-sr-x. 1 root root 38 Jul 21 17:29 cyn.txt(當執行該腳本的時候,會臨時有該文件所屬組的權限,可以自行測試,歡迎留言討論)

                   -當對於一個目錄作用了sgid權限之後,任何人在該目錄下所創建的文件的所屬組,均與該目錄的所屬組相同。比如A用戶要創建一個文件,這個文件會屬於A用戶所在的           A組,但是A用戶想把這個文件創建之後使其所屬組繼承與B目錄的所屬組,這個時侯B目錄(所屬組B組)設置 sgid權限的話,A用戶在B目錄下面創建文件,文件會自動屬於B組,設置 方法與上面二進制文件一樣

                      VI.sticky:對於一個目錄作用了sticky權限,該目錄下的文件僅其所屬人和目錄的所屬人及root可以刪除,比如在一個共享組裏任何人可以上傳文件,萬一有人誤操作把其他的人文件       刪了,這個時候爲了防止這種情況發生就可以設置sticky權限。

[root@localhost ~]# ls /tmp
drwxrwxrwt 6 root root 4096 Jul 21 17:29 /tmp

        c.用戶組權限: 同所有者權限

        d.其他用戶權限: 不是文件所有者,也不屬於文件所屬用戶組的用戶,稱爲其他用戶,其他用戶權限若爲-,表示沒有相應的權限

        e.特殊權限 :acl權限

[leonard@localhost ~]$ ls -l
-rw-rw---- 1 cyn root 6 Jul 21 17:29 test.txt

              在這裏說明了對於test.txt這個文件cyn用戶擁有rw-權限。所有屬於root組的用戶擁有rw-權限. 其他任何用戶對於文件沒有任何的權限,如果我們現在希望john這個用戶也可以對                test.txt    文件進行讀寫操作.,我自己大概會想到以下幾種辦法:

              1). 給文件的other類別增加讀和寫的權限,這樣由於john會被歸爲other類別,那麼他也將擁有讀寫的權限。
              2). 將john加入到root組。那麼john會被歸爲group類別,那麼他將擁有讀寫的權限。
              3). 設置sudo, 使john能夠以cyn的身份對test.txt進行操作,從而獲得讀寫權限。

              第一種做法的問題在於所有用戶都將對test.txt擁有讀寫操作,顯然這種做法不可取。
              第二種做法的問題在於john被賦予了過多的權限.所有屬於admin組的文件,john都可以擁有其等同的權限了。
              第三種做法雖然可以達到只限定john擁有對test.txt文件的讀寫權限.但是需要對sudoers文件進行嚴格的格式控制. 而且當文件數量和用戶很多的時候,這種方法就相當地不靈活了。
              看來好像都沒有一個很好的解決方案. 其實問題就出在Linux 文件權限裏面,對於other的定義過於廣泛,以至於很難把權限限定於一個不屬於file owner和group的用戶身上. 那                        麼 Access Control List (ACL)就是用來幫助我們解決這個問題的。

              簡單地來說ACL權限就是可以設置特定用戶或者用戶組對於一個文件/文件夾的操作權限。ACl權限判斷順序 owner > acl user > group > other

                 可以設置用戶acl,也可以設置組acl權限。設置ACL     setfacl  ,查看ACL   getfacl

[root@localhost ~]# mkdir -p /acltest/acl
[root@localhost ~]# cd /acltest/
[root@localhost acltest]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 21 20:03 acl

[root@localhost acltest]# setfacl -Rm g:shuguo:rwx /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
user:liubei:r--
group::r-x
group:shuguo:rwx
mask::rwx
other::r-x
[root@localhost acltest]# ll
total 0
drwxrwxr-x+ 2 root root 6 Jul 21 20:03 acl

              刪除ACL,可以逐條刪除setfacl -x,也可以一起刪除setfacl -b

[root@localhost acltest]# setfacl -x u:liubei /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
group:shuguo:rwx
mask::rwx
other::r-x
[root@localhost acltest]# setfacl -b /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

            設置未來文件的權限 ,所謂未來就是你下一個將要創建的文件的ACL權限,查看的時候會以default顯示。

[root@localhost acltest]# setfacl -Rm d:g:shuguo:rwx /acltest/
[root@localhost acltest]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:shuguo:rwx
default:mask::rwx
default:other::r-x

          f.連接數:目錄的連接數最少爲2,本身和 . ,若還有n個子目錄,則連接數爲2+n,文件的連接數最少爲1,如果連接數爲0,則文件或者目錄不存在

        g.所有者:一般爲文件的創建者,誰創建了該文件,就成爲該文件的所有者可以修改該權限:

[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 root root 6 Jul 21 15:17 common
[root@localhost ~]# chown liubei /app/house/common
[root@localhost ~]# ll /app/house
total 0
drwxrwx---. 2 liubei root 6 Jul 21 15:17 common

        h.用戶組:當某個用戶創建了一個文件後,這個文件的所在用戶組就是該用戶所在的組可以修改該權限:

[guanyu@localhost ~]$ getent group shuguo
shuguo:x:1021:liubei,zhangfei,guanyu
[guanyu@localhost ~]$ mkdir guanyu
[guanyu@localhost ~]$ ll
total 0
drwxr-xr-x. 2 guanyu shuguo 6 Jul 21 16:37 guanyu

        i.文件容量:單位爲B

        j.修改日期:創建這個文件的時間

        k.文件名:文件的文件名

    2.文件屬性操作

        a.修改文件的屬主:chown  

                用法:chown 用戶名 文件/目錄名   

                                    -R 遞歸同時修改目錄下的子文件子目錄

                                    --reference file1  file2   將file1的owner設置給file2

                                    chown owner.group 或  owner:group  文件名  可以同時修改文件的owner和group  (僅root用戶)

          b.修改文件的group:chgrp 

                 用法:chgrp 組名 文件/目錄名         

                                     owner可以修改文件的屬於組,但owner一定要屬於目標組

                                    -R 遞歸同時修改目錄下的子文件子目錄

                                    --reference file1  file2   將file1的owner設置給file2               

   3.文件權限操作

      a.改變文件或目錄的權限chmod 

                 用法:chmod 權限 文件/目錄名

                                     -R 遞歸同時修改目錄下的子文件子目錄

                                    修改一類用戶的所有權限: 如u=  g= o= ug=  a= u=,g= (a=ugo 或=左邊省略)

                                    修改一類用戶某位或某些位權限 u+  u- g+ g- o+ o- a+ a- + (+ 加入  - 除去   + 設置

                               --reference file1  file2   將file1的owner設置給file2 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章