linux 文件夾權限及umask
先創建一個目錄,看看權限:
$ ll 總用量 20 drwxrwxr-x 3 huangxm huangxm 4096 2月 16 16:35 ./ drwxr-xr-x 128 huangxm huangxm 12288 2月 16 16:35 ../ drwxrwxr-x 2 huangxm huangxm 4096 2月 16 16:35 test/
然後我們將權限更改為444, 即所有都是r權限
$ ll 總用量 20 drwxrwxr-x 3 huangxm huangxm 4096 2月 16 16:35 ./ drwxr-xr-x 128 huangxm huangxm 12288 2月 16 16:35 ../ dr--r--r-- 2 huangxm huangxm 4096 2月 16 16:35 test/
進入目錄試一下
$ whoami huangxm $ cd test bash: cd: test: 權限不夠 [email protected]
沒有權限進入目錄,看來只有r權限是不行的,那我們再加上w權限
$ ll 總用量 20 drwxrwxr-x 3 huangxm huangxm 4096 2月 16 16:35 ./ drwxr-xr-x 128 huangxm huangxm 12288 2月 16 16:35 ../ drw-rw-r-- 2 huangxm huangxm 4096 2月 16 16:35 test/
再cd進入目錄試一下
$ cd test bash: cd: test: 權限不夠
看來還是不行。那我們就加上X權限 吧
$ ll 總用量 20 drwxrwxr-x 3 huangxm huangxm 4096 2月 16 16:35 ./ drwxr-xr-x 128 huangxm huangxm 12288 2月 16 16:35 ../ dr-xr-xr-- 2 huangxm huangxm 4096 2月 16 16:35 test/
再cd進入目錄:
$ cd test $ pwd /home/huangxm/測試目錄/test
看來只有讀權限是沒有辦法進入目錄的,只有rw權限也是不能進入目錄的,所以一定要x權限都有才可以。
所以一般情況下,系統裏的文件夾都是755權限,允許所有用戶進入文件夾。
那我們在test目錄下新建一個文件a.txt,並將test目錄權限改為766,使所有用戶都有rw權限。
$ ll 總用量 20 drwxrwxr-x 3 huangxm huangxm 4096 2月 16 16:35 ./ drwxr-xr-x 128 huangxm huangxm 12288 2月 16 16:35 ../ drwxrw-rw- 2 huangxm huangxm 4096 2月 16 16:53 test/ $ ll 總用量 8 drwxrw-rw- 2 huangxm huangxm 4096 2月 16 16:53 ./ drwxrwxr-x 3 huangxm huangxm 4096 2月 16 16:35 ../ -rw-r--r-- 1 root root 0 2月 16 16:53 a.txt
可以看到test文件夾所有用戶都有w權限 , a.txt文件除root之外都只有r權限,現在我們以其它用戶嘗試修改一下
d fd fd f ffffffffff E45: 已設定選項 ‘readonly‘ (請加 ! 強制執行)
強制保存一下,發現保存成功了。再打開文件看看
$ cat a.txt ijfeihifh f e f ef e fe f ef
內容已經保存了。。明明文件是沒有寫入權限的,但是可以強制寫入,而且可以刪除文件,所以文件夾給w權限是相當危險的事情。
總結一下:
權限 | 操作 |
r | cd |
rx | cd ls |
wx | cd touch rm(self,other) vi(self,other) |
wxt | cd touch rm(self) vi(self) |
理一下思路:
1. 使用root用戶創建目錄test , 並給others wx權限,並創建a,b,c三個文件
# mkdir test #chmod o=wx test # touch test/{a,b,c}
查看一下, a,b,c是屬於root的
-rw-r--r-- 1 root root 0 2月 16 18:00 a -rw-r--r-- 1 root root 0 2月 16 18:00 b -rw-r--r-- 1 root root 0 2月 16 18:00 c
2. 切換到普通用戶身份,嘗試刪除a
$ rm -f a
到root用戶下ll看一下,普通用戶wx沒有ls權限
# ll 總用量 8 drwxr-x-wx 2 root root 4096 2月 16 18:01 ./ drwxrwxr-x 3 huangxm huangxm 4096 2月 16 17:56 ../ -rw-r--r-- 1 root root 0 2月 16 18:00 b -rw-r--r-- 1 root root 0 2月 16 18:00 c
a已經被刪掉了
3. 以普通用戶vi b,修改後強制保存,也是可以的。
4. 到root用戶下,給test目錄加個o=t權限
# chmod o+t test # ls -l 總用量 4 drwxr-x-wt 2 root root 4096 2月 16 18:02 test
到普通用戶下,嘗試刪除b
$ rm -f b rm: 無法刪除"b": 不允許的操作
加了t權限後已經無法刪除別人的文件了。再嘗試vi一下
"b" E212: 無法打開並寫入文件 請按 ENTER 或其它命令繼續
即使加!強制保存也不行了。
那麽用數字形式怎麽加t權限呢,比如tmp目錄,這是個臨時目錄,所有人都需要往裏放東西,所以它是777的權限,但是想一下,如果root放進去的東西,那別的用戶是不是也可以修改,那就不合理了。所以tmp目錄需要有個t權限,不允許其它用戶修改,使用數字形式就是:
#chmod 1777 /tmp
umask:
每個用戶在創建文件和文件夾的時候,都會給予文件和文件夾一個默認權限 ; 默認權限就是根據各用戶的umask值來確定的。我們用root和普通用戶創建文件和文件夾看看權限:
drwxr-xr-x 2 root root 4096 2月 17 11:15 rootdir -rw-r--r-- 1 root root 0 2月 17 11:15 rootfile drwxrwxr-x 2 huangxm huangxm 4096 2月 17 11:15 userdir -rw-rw-r-- 1 huangxm huangxm 0 2月 17 11:15 usertouch
可以看出root用戶創建的文件夾權限是755 ,創建的文件權限是644;普通用戶創建的文件夾權限是775,創建的文件權限是664
分別查看一下root和普通用戶的umask值
# umask 0022 $ umask 0002
root的umask是022 , 普通用戶的是002
文件夾的權限 777 – 022 = 755 , 文件權限 666 – 022 = 644
我們可以這麽理解,文件夾權限就是777 – umask 文件權限就是666 – umask
但並不是真的是減法,實際上是掩碼,嘗試一下將umask值設為777 (在當前用戶下umask 777可以設置),那麽文件權限是000,並不是-1
linux 文件夾權限及umask