1. 程式人生 > >linux 文件夾權限及umask

linux 文件夾權限及umask

ble 強制寫 linu lba 並不是 -- -1 是個 總結

先創建一個目錄,看看權限:

$ 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