文件和目錄權限
認識Linux文件屬性以及它的所有者和所屬組
[root@localhost ~]# ls -lh word1.txt
-rw-r--r--. 1 root root 0 12月 20 08:36 word1.txt
第一列:我們從一個杠(-)開始認識,第一個杠(-)是表示文件屬于哪種類型
*-表示該文件為普通文件*d表示該文件為目錄*l表示該文件為鏈接文件*b表示該文件為塊設備文件(比如/dev/sda就是這樣的文件,硬盤*c表示該文件為串行端口設備文件(又稱字符設備文件),比如鼠標、鍵盤這些
第二列:9個權限位rw-r--r--,每三個權限位為一段,第一段rw-;表示所有者的權限,第二段r--;表示為所屬組的權限,第三段r--;表示為其他用戶的權限
權限里字母所表示的意思,以及權限位數字的表示:
*r(4):可讀*w(2):可寫*x(1):可執行*-(0):沒有權限;為空
rw-r--r--;所有者權限為rw-既表示為可讀可寫不可執行,接下來的所屬組和其他用戶以此類推。
u表示:所有者,g表示:所屬組,o表示:其他用戶,a=u+g+o
第三列:(.)表示該文件占用的節點(inode),如果是目錄,那這個數值與目錄下是子目錄數量有關
第四列:表示該文件的所有者
第五列:表示該文件的所屬組
chmod命令
chmod是用來更改文件權限的一個命令,在Linux系統中,一個目錄的默認權限為755:rwxr-xr-x,而一個文件的默認權限為644:
[root@localhost ~]# chmod 777 word1.txt
[root@localhost ~]# ls -lh word1.txt
-rwxrwxrwx. 1 root root 0 12月 20 08:36 word1.txt
更改所有者和所屬組chown_chgrp
chgrp命令
chgrp命令可以用來更改文件的所屬組,其格式為:chgrp[組名][文件名],示例
[root@localhost ~]# groupadd hch
[root@localhost ~]# chgrp hch word1.txt
[root@localhost ~]# ls -lh
總用量 4.0K
-rwxrwxrwx. 1 root hch? ? 0 12月 20 08:36 word1.txt
-rw-r--r--. 1 root root? ? 0 12月 20 08:37 word2.txt
上例中有用到groupadd命令,該命令是用來創建一個所屬組的。
chown命令
chown命令是用來更改文件或者目錄的所有者,其格式為:chown[賬戶名][文件名]或者chown[-R][賬戶名:組名][文件名],以下示例:
[root@localhost ~]# mkdir hch
[root@localhost ~]# cd hch
[root@localhost hch]# touch 123.txt
[root@localhost hch]# cd
[root@localhost ~]# chown -R hch1 hch
[root@localhost ~]# ls -lh hch/123.txt
-rw-r--r--. 1 hch1 root 0 12月 21 08:12 hch/123.txt
上例中用到useradd命令,該命令是用來創建一個用戶的。
命令umask
命令umask是用來改變文件的默認權限值的,其格式為:umask xxx(這里xxx表示數字),我們可以在命令行輸umask查看當前的默認值
*若用戶建立普通文件時,則預設沒有可執行權限,只有r、w兩個權限,最大值為666(-rw-rw-rw-)*若用戶建立普通目錄時,則預設所有權限均開放,最大值777(drwxrwxrwx)
umask數值代表的行以為以上兩條規則中的默認值需要減去的權限,所以結果為:
*目錄的權限為rwxrwxrwx - ----w--w-=rwxr-xr-x*普通文件的權限為rw-rw-rw- - ----w--w- =rw-r--r--
以下我們示例使用umask將數值改為002,在看下創建文件或者目錄的時候默認權限
[root@localhost ~]# umask 002
[root@localhost ~]# mkdir hch02
[root@localhost ~]# ls -l
總用量 4
drwxrwxr-x. 2 root root? ? 6 12月 21 08:20 hch02
drwxr-xr-x. 2 root root? 19 12月 20 08:44 hello
-rwxrwxrwx. 1 hch1 hch? ? 0 12月 20 08:36 word1.txt
-rw-r--r--. 1 root root? ? 0 12月 20 08:37 word2.txt
[root@localhost ~]# touch hch123.txt
[root@localhost ~]# ls -lh hch123.txt
-rw-rw-r--. 1 root root 0 12月 21 08:21 hch123.txt
隱藏權限lsattr/chattr
chattr命令
命令chattr的格式為:chattr[+-=][Asaci][文件或者目錄]其中+、-和=分別表示增加、減少和設定,各個權限如下。
*A:增加該屬性后,表示文件或目錄的atime將不可以修改*s:增加該屬性后,會見個數據同步寫入磁盤中*a:增加該屬性后,表示只能追加不能刪除,非root用戶不能設定該屬性*c:增加該屬性后,表示自動壓縮該文件,讀取是會自動解壓*i:增加該屬性后,表示文件不能刪除、重命名、設定鏈接、寫入以及新增數據。
以上參數中a和i連個常用的權限,我們舉例說明示范一下
[root@localhost ~]# chattr +i hch
[root@localhost ~]# touch hch/1234.txt
touch: 無法創建"hch/1234.txt": 權限不夠
[root@localhost ~]# chattr? -i hch
[root@localhost ~]# touch hch/1234.txt
[root@localhost ~]# chattr? +i hch
[root@localhost ~]# rm -f hch/1234.txt
rm: 無法刪除"hch/1234.txt": 權限不夠
示例中,給asklinux2目錄加了i權限后,即使是root用戶,也不能在asklinux2目錄中創建或刪除1.txt。
接下來我們看下a權限的作用
[root@localhost ~]# chattr -i hch
[root@localhost ~]# touch hch/456.txt
[root@localhost ~]# ls -lh hch
總用量 0
-rw-rw-r--. 1 root root 0 12月 21 08:26 1234.txt
-rw-r--r--. 1 hch1 root 0 12月 21 08:26 123.txt
-rw-rw-r--. 1 root root 0 12月 21 08:28 456.txt
[root@localhost ~]# chattr +a hch
[root@localhost ~]# rm -f hch/456.txt
rm: 無法刪除"hch/456.txt": 不允許的操作
[root@localhost ~]# touch hch/789.txt
[root@localhost ~]# ls hch
1234.txt? 123.txt? 456.txt? 789.txt
上例中,asklinux2目錄增加a權限后,只可以在里面創建文件,而不能刪除文件,文件同適用以上權限。
命令lsattr
lsattr命令是用來讀取文件或者目錄的特殊權限,格式為:lsattr[-aR][文件/目錄],我們看下a和R兩個參數的定義
*-a:類似于ls的-a參數,既連同隱藏文件一同列出* -R:連同子目錄的數據一同列出
示例:
[root@localhost ~]# chattr +i hch/456.txt
[root@localhost ~]# chattr +a hch/789.txt
[root@localhost ~]# lsattr hch
---------------- hch/123.txt
---------------- hch/1234.txt
----i----------- hch/456.txt
-----a---------- hch/789.txt
[root@localhost ~]# lsattr -aR hch
-----a---------- hch/.
---------------- hch/..
---------------- hch/123.txt
---------------- hch/1234.txt
----i----------- hch/456.txt
-----a---------- hch/789.txt