Linux文件權限和目錄權限


本篇主要講述:
1 文件和目錄的基本權限
2 設置基本權限(chmod,chown,chgrp)
3 附加權限(特殊權限)
4 ACL策略權限
5 文件與目錄的默認權限與隱藏權限

 

1、基本權限

1.1 訪問方式(權限)
讀取:允許查看內容-read  r
寫入:允許修改內容-write   w
可執行:允許運行和切換-execute  x
1.2 使用者與群組
權限適用對象(歸屬)
所有者:擁有此文件/目錄的用戶-user    u
所屬組:擁有此文件/目錄的組-group       g
其他用戶:除所有者、所屬組以外的用戶-other  o
1.3 查看文件或者目錄自身的屬性 
使用 ls -ld 命令
ls -ld 文件或目錄    #查看文件或者目錄自身的屬性
[root@localhost /]# ls -ld /root
dr-xr-x---. 3 root root 4096 May 10 15:23 /root
內容分析:
(1)第一欄代表這個文件的類型與權限;
其中第一個字符
以  - 開頭:文本文件
以  d 開頭:目錄
以  l 開頭:快捷方式
接下來的字符中,以三個為一組
第一組為“文件擁有者可具備的權限”
第二組為“加入此群組之帳號的權限”
第三組為“非本人且沒有加入本群組之其他帳號的權限”
(2)剩下的字段含義 
第二欄表示有多少文件名鏈接到此節點(i-node)
第三欄表示這個文件(或目錄) 的“擁有者帳號”
第四欄表示這個文件的所屬群組
第五欄為這個文件的容量大小,默認單位為Bytes
第六欄為這個文件的創建日期或者是最近的修改日期
第七欄為這個文件的文件名

2、設置基本權限

2.1 使用 chmod 命令
chmod  [-R]   歸屬關系+-=權限類別    文檔...
更改權限的方法:
第一種:以數字的形式   r:4 w:2 x:1
案例:
[root@server0 ~]# mkdir /nsd01
[root@server0 ~]# ls -ld /nsd01/
drwxr-xr-x. 2 root root 6 11月 24 20:16 /nsd01/
[root@server0 ~]# chmod 777 /nsd01/
[root@server0 ~]# ls -ld /nsd01/
drwxrwxrwx. 2 root root 6 11月 24 20:16 /nsd01/
第二種:符號類型   user=u ; group=g; other=o ; all=a
案例:
[root@server0 ~]# chmod u=rwx,g=rw,o=--- /nsd01/
[root@server0 ~]# ls -ld /nsd01/
drwxrw----. 2 root root 6 11月 24 20:16 /nsd01
[root@server0 ~]# mkdir /nsd01
[root@server0 ~]# chmod g+w /nsd01
[root@server0 ~]# chmod u-w /nsd01
[root@server0 ~]# chmod o=rwx /nsd01
[root@server0 ~]# chmod u=rwx,g=rx,o=--- /nsd01
臨時切換用戶身份:
[root@server0 ~]# su - zhangsan
(不能將 - 去掉,代表所處的環境也切到另一個用戶上去了)
目錄的 r 權限:能夠 ls 瀏覽此目錄內容
目錄的 w 權限:能夠執行 rm/mv/cp/mkdir/touch/等更改目錄內容的操作
目錄的 x 權限:能夠 cd 切換到此目錄
總結:在Linux中新建目錄默認的權限rwxr-xr-x
           在Linux中新建文件默認的權限rw-r--r--
為什么新建目錄或者文件是這樣的權限?
umask 命令了解一下
[root@localhost ~]# umask
0022
案例:以root用戶新建/nsddir/目錄,在此目錄下新建readme.txt文件,並進一步完成下列操作
1)使用戶zhangsan能夠在此目錄下創建子目錄  切換用戶  su - zhangsan
chmod o+w  /nsddir/
2)使用戶zhangsan不能夠在此目錄下創建子目錄
chmod o-w  /nsddir/
3)使用戶zhangsan能夠修改readme.txt文件
chmod o+w  /nsddir/readme.txt
4)調整此目錄的權限,使所有用戶都不能進入此目錄
chmod u-x,g-x,o-x  /nsddir/
5)為此目錄及其下所有文檔設置權限 rwxr-x---
chmod -R  u=rwx,g=rx,o=---  /nsddir/
 
2.2  使用 chown 命令
設置文檔歸屬
– chown [-R] 屬主 文檔...
– chown [-R] :屬組 文檔...
– chown [-R] 屬主:屬組 文檔...
 案例:
[root@server0 /]# mkdir /nsd03
[root@server0 /]# ls -ld /nsd03
[root@server0 /]# groupadd test
[root@server0 /]# chown zhangsan:test /nsd03
[root@server0 /]# ls -ld /nsd03
[root@server0 /]# chown student  /nsd03
[root@server0 /]# ls -ld /nsd03
[root@server0 /]# chown :root /nsd03
[root@server0 /]# ls -ld /nsd03
2.3 使用chgrp命令
change group
chgrp [-R] 組名 文件名/目錄名
組名信息存放在/etc/group下

3 、附加權限(特殊權限)

3.1 Set GID  在該父目錄上操作,屬組+s,新建的子目錄都會繼承父目錄的屬組
(1)特點:
附加在屬組的 x 位上;
屬組的權限標識會變為 s
適用於目錄,Set GID可以使目錄下新增的文檔自動設置與父目錄相同的屬組(繼承)
(2)對於屬組而言
如何判斷原來的權限是否有x:
大寫S 表示原來屬組的權限沒有x
小寫s表示原來的屬組的權限有x
(3)具有繼承作用
[root@server0 ~]# mkdir /nsd06
[root@server0 ~]# ls -ld /nsd06
drwxr-xr-x. 2 root root 6 11月 24 11:51 /nsd06    #nsd06剛開始的權限和屬組
[root@server0 ~]# chown :test /nsd06
[root@server0 ~]# ls -ld /nsd06
drwxr-xr-x. 2 root test 6 11月 24 11:51 /nsd06    #更改屬組之后的權限
[root@server0 ~]# mkdir /nsd06/abc01              #新建子目錄abc01
[root@server0 ~]# ls -ld /nsd06/abc01/
drwxr-xr-x. 2 root root 6 11月 24 11:53 /nsd06/abc01/  #屬組和父目錄沒有關系
[root@server0 ~]# chmod g+s /nsd06              #屬組權限+s
[root@server0 ~]# ls -ld /nsd06
drwxr-sr-x. 3 root test 18 11月 24 11:53 /nsd06
[root@server0 ~]# mkdir /nsd06/abc02            #新建子目錄abc02
[root@server0 ~]# ls -ld /nsd06/abc02
drwxr-sr-x. 2 root test 6 11月 24 11:54 /nsd06/abc02   #繼承了父目錄nsd06的所有者,屬組
 
3.2 Set Uid(並沒有繼承)
[root@server0 ~]# ls -ld /nsd/              #nsd目錄的權限
drwxr-sr-x. 2 harry adminuser 20 11月 25 09:58 /nsd/
[root@server0 ~]# chmod u+s /nsd/   #對所有者加s,是否能夠繼承?
[root@server0 ~]# ls -ld /nsd/
drwsr-sr-x. 2 harry adminuser 35 11月 25 10:09 /nsd/
[root@server0 ~]# touch /nsd/nsd2.txt     #在目錄下新建子文件
[root@server0 ~]# ls -ld /nsd/nsd2.txt      #查看新文件的權限
-rw-r--r--. 1 root adminuser 0 11月 25 10:10 /nsd/nsd2.txt
對Set uid一般情況下不使用s權限,這樣會造成 對系統的安全存在風險
 – 屬主的權限標識會變為 s
 – 適用於可執行文件,Set UID可以讓使用者具有文件屬主的身份及部分權限擁有root的權限
 
3.3 Sticky bit
附加在其他人的x位上
其他人的權限標識會變為t
適用於開放w權限的目錄,可以阻止用戶濫用w寫入權限(禁止操作別人的文檔)
 

4、ACL策略權限

使用場景:當用戶屬組具有寫(或者其他)的權限,其他人什么權限也沒有,來了一個想要查看文件的用戶,但不能使該用戶具有寫。
意義:能夠對個別用戶,個別組設置獨立的權限
4.1 acl策略的作用
文檔歸屬的局限性;
任何人只屬於三種角色:屬主、屬組、其他人;
無法實現更精細的控制。
4.2 acl訪問策略
能夠對個別用戶、個別組設置獨立的權限;
大多數掛載的EXT3/4、XFS文件系統默認已支持。
 案例:
[root@server0 /]# mkdir /nsd10       #新建目錄
[root@server0 /]# chmod o=--- /nsd10 #使該目錄對其他人沒有任何權限
[root@server0 /]# su - zhangsan      #驗證
[zhangsan@server0 ~]$ cd /nsd10
-bash: cd: /nsd10: Permission denied   #不能進入
[zhangsan@server0 ~]$ exit             #回到root
logout
[root@server0 /]# setfacl -m u:zhangsan:rx /nsd10  #設置ACL,使能夠具有讀和執行權限
[root@server0 /]# su - zhangsan        #驗證
[zhangsan@server0 ~]$ cd /nsd10        #可以進入
[zhangsan@server0 nsd10]$ pwd
[zhangsan@server0 nsd10]$ exit         #回到root
logout
4.3 使用 getfacl、setfacl 命令
– getfacl       文檔...                              #查看acl策略
– setfacl  -m  u:用戶名:權限類別 文檔...
– setfacl  -m  g:組名:權限類別 文檔...
– setfacl  -b   文檔...                             #清除所有的ACL策略
– setfacl  -x   文檔...                             #清除指定的ACL策略
 案例:
[root@localhost home]# getfacl happyday/     #查看未設置ACL策略的命令
# file: happyday/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@localhost home]# setfacl
-m u:happy:rwx happyday/ #對文件夾設置ACL策略 [root@localhost home]# setfacl -m u:nice:rwx happyday/ [root@localhost home]# setfacl -m u:good:rx happyday/ [root@localhost home]# getfacl happyday/ #查看 # file: happyday/ # owner: root # group: root user::rwx user:happy:rwx user:nice:rwx user:good:r-x group::r-x mask::rwx other::r-x [root@localhost home]# setfacl -x u:happy happyday/ [root@localhost home]# getfacl happyday/ # file: happyday/ # owner: root # group: root user::rwx user:nice:rwx user:good:r-x group::r-x mask::rwx other::r-x [root@localhost home]# setfacl -b happyday/ [root@localhost home]# getfacl happyday/ # file: happyday/ # owner: root # group: root user::rwx group::r-x other::r-x

5 文件與目錄的默認權限與隱藏權限

5.1 文件的默認權限  umask
第一個數字特殊權限使用的
后三個數字為默認值需要減掉的權限(r:4 w:2 x:1)
因為 umask 為 022 ,所以 user 並沒有被拿掉任何權限,不過 group 與 others 的權限被拿掉了 2 (也就是 w 這個權限)
該默認值得設置參考/etc/bashrc文件,建議不要修改此文件
5.2 文件的隱藏屬性
(1)使用chattr設置文件隱藏屬性
chattr 選項 參數 目錄或文件
選項:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設置一定,且僅有后面接的參數
參數:
A :當設置了 A 這個屬性時,若你有存取此文件(或目錄) 時,他的存取時間 atime 將不會被修改,可避免 I/O 較慢的機器過度的存取磁盤。(目前建議使用文件系統掛載參數處理這個項目)
S :一般文件是非同步寫入磁盤的(原理請參考[前一章sync](../Text/index.html#sync)的說明) ,如果加上 S 這個屬性時,當你進行任何文件的修改,該更動會“同步”寫入磁盤中。
a :當設置 a 之后,這個文件將只能增加數據,而不能刪除也不能修改數據,只有root 才能設置這屬性
c :這個屬性設置之后,將會自動的將此文件“壓縮”,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮后再儲存(看來對於大文件似乎蠻有用的!)
d :當 dump 程序被執行的時候,設置 d 屬性將可使該文件(或目錄) 不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個文件“不能被刪除、改名、設置鏈接也無法寫入或新增數據!”對於系統安全性有相當大的助益!只有 root 能設置此屬性
s :當文件設置了 s 屬性時,如果這個文件被刪除,他將會被完全的移除出這個硬盤空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設置文件時,如果該文件被刪除了,則數據內容其實還存在磁盤中,可以使用來救援該文件喔!
注意1:屬性設置常見的是 a 與 i 的設置值,而且很多設置值必須要身為 root 才能設置
注意2:xfs 文件系統僅支持 AadiS 而已
(2)使用lsattr 顯示文件的隱藏屬性
-a :將隱藏文件的屬性也顯示出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的文件名;
-R :連同子目錄的數據也一並列出來!
(3) 觀察文件的類型
文件是ASCII或者是data文件或者是binary(二進制文件)?
使用file命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM