2.14文件或者目錄權限chmonlinux
2.14.1
算法
[root@MOMOCO-02 ~]# ls -lbash
總用量 4ssh
-rw-r--r--. 1 root root 0 12月 20 10:42 2.txtide
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfgspa
【以前咱們用ls -l的時候會詳細的顯示一個文件或者目錄,紅色標記的就是一個文件或者目錄的權限,×××是所屬主,紫色是所屬組。他一共有9個權限(rwxrwxrwx:r表明可讀,w表明可寫,x表明可執行,-表明不能夠讀、寫或者執行)位前三個是全部者權限。後面的那個點他是受制於selinux,若是你把selinux關閉了再建立目錄或者文件就不會有這個點了,中間三個是所組權限,最後面的三個是其餘用戶權限】orm
2.14.2權限用數字表示ci
r:咱們用r=4表示get
w:咱們用w=2表示it
x:咱們用x=1表示
-:咱們用-=0表示
例以下面
三個權限位一段表示方法:rwx=7 rw-=6 r-x=5 r--=4 -wx=3 -w-=2 --x=1
九個權限位三段表示方法:rw-r--r--=644 rwx------=700 rwx-w-r-x=725
2.14.3 chomd 全稱:change mode
[root@MOMOCO-02 ~]# chmod 700 2.txt
【更改一個目錄的權限的命令,咱們把2.txt改爲了全部者可讀可寫可執行,所屬組和其餘用戶不可讀不可寫不可執行。以前咱們介紹密鑰的時候用到了一個】
[root@MOMOCO-02 ~]# !l
ls -l
總用量 4
-rwx------. 1 root root 0 12月 20 10:42 2.txt
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg
[root@MOMOCO-02 ~]# chmod 700 /root/.ssh
[root@MOMOCO-02 ~]# ls -ld !$
drwx------. 2 root root 80 12月 14 17:41 /root/.ssh
[root@MOMOCO-02 ~]# getenforce
Enforcing
【查看selinux的狀態】
[root@MOMOCO-02 ~]# setenforce 0
【臨時關閉selinux,建立目錄或者文件仍是會有點的】
[root@MOMOCO-02 ~]# getenforce
Permissive
[root@MOMOCO-02 ~]# ls -l
總用量 4
drwxr-xr-x. 3 root root 28 12月 20 11:03 2
-rwx------. 1 root root 0 12月 20 10:42 2.txt
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg
[root@MOMOCO-02 ~]# chmod 777 2
[root@MOMOCO-02 ~]# !l
ls -l
總用量 4
drwxrwxrwx. 3 root root 28 12月 20 11:03 2
-rwx------. 1 root root 0 12月 20 10:42 2.txt
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg
[root@MOMOCO-02 ~]# ls -l 2/
總用量 0
-rw-r--r--. 1 root root 0 12月 20 11:02 2.txt
drwxr-xr-x. 2 root root 19 12月 20 11:03 3
【上面的紫色部分咱們直接用chmod改目錄的權限的時候,目錄下面的子目錄或者子文件的權限是不發生變化的。若是想子目錄或者子文件一塊兒跟着改能夠用相面×××的命令,再看下面的紫色部分就生效了】
[root@MOMOCO-02 ~]# chmod -R 777 2
[root@MOMOCO-02 ~]# ls -l
總用量 4
drwxrwxrwx. 3 root root 28 12月 20 11:03 2
-rwx------. 1 root root 0 12月 20 10:42 2.txt
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg
[root@MOMOCO-02 ~]# ls -l 2/
總用量 0
-rwxrwxrwx. 1 root root 0 12月 20 11:02 2.txt
drwxrwxrwx. 2 root root 19 12月 20 11:03
2.14.4 用字母表示更改權限
[root@MOMOCO-02 ~]# chmod u=rwx,g=r,o=rx 2
【u表明全部者,g表明所屬組,o表明其餘用戶,a表明ugo所有。建議使用數字表明】
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 root root 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# chmod a-r 2
[root@MOMOCO-02 ~]# ls -ld 2
d-wx-----x. 3 root root 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# chmod a+r 2
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 root root 28 12月 20 11:03 2
2.15更改全部者和所屬組chown
2.15.1 chown 全稱:chown owner 格式:[root@MOMOCO-02 ~]#chown -R username:group filename
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 root root 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# chown GYB:gyb 2
【更改全部者和所屬組的命令】
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 GYB gyb 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# chown :root 2
【只更改所屬組】
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 GYB root 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# chown root 2
【只更改全部者】
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 root root 28 12月 20 11:03 2
咱們也能夠用另外的一個命令更改所屬組以下:
[root@MOMOCO-02 ~]# chgrp GYB 2
【更改所屬組】
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 root GYB 28 12月 20 11:03 2
2.15.2
若是想把目錄下的子目錄或者子文件一塊兒更改了咱們能夠用-R選項
[root@MOMOCO-02 ~]# chown GYB:GYB 2
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 GYB GYB 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# ls -l 2
總用量 0
-rwxrwxrwx. 1 root root 0 12月 20 11:02 2.txt
drwxrwxrwx. 2 root root 19 12月 20 11:03 3
[root@MOMOCO-02 ~]# chown -R GYB:gyb 2
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 3 GYB gyb 28 12月 20 11:03 2
[root@MOMOCO-02 ~]# ls -l 2
總用量 0
-rwxrwxrwx. 1 GYB gyb 0 12月 20 11:02 2.txt
drwxrwxrwx. 2 GYB gyb 19 12月 20 11:03 3
2.16umask
2.16.1
[root@MOMOCO-02 ~]# touch 3.txt
[root@MOMOCO-02 ~]# ls -ld 3.txt
-rw-r--r--. 1 root root 0 12月 20 11:48 3.txt
[root@MOMOCO-02 ~]# mkdir 3
[root@MOMOCO-02 ~]# ls -ld 3
drwxr-xr-x. 2 root root 6 12月 20 11:49 3
【爲何咱們建立的文件權限是644,建立的目錄權限是755。他是有系統的umask值肯定的】
[root@MOMOCO-02 ~]# umask
0022
【查看umask的值】
[root@MOMOCO-02 ~]# umask 002
【更改umask的值,你也能夠寫成0002】
[root@MOMOCO-02 ~]# umask
0002
咱們再次建立目錄和文件
[root@MOMOCO-02 ~]# touch 4.txt
[root@MOMOCO-02 ~]# ls -ld 4.txt
-rw-rw-r--. 1 root root 0 12月 20 11:54 4.txt
[root@MOMOCO-02 ~]# mkdir 4
[root@MOMOCO-02 ~]# ls -ld 4
drwxrwxr-x. 2 root root 6 12月 20 11:54 4
【文件的權限變成了664,目錄的權限變成了775】
咱們來總結一下:
umask 文件 目錄
002 644 755
002 664 775
【你可能會認爲文件的權限等於666-umask,文件的權限等於777-umask。這樣理解不徹底是對的,你能夠試試umask等於3時。】
[root@MOMOCO-02 ~]# umask 003
[root@MOMOCO-02 ~]# touch 5.txt
[root@MOMOCO-02 ~]# ls -ld 5.txt
-rw-rw-r--. 1 root root 0 12月 20 12:09 5.txt
[root@MOMOCO-02 ~]# mkdir 5
[root@MOMOCO-02 ~]# ls -ld 5
drwxrwxr--. 2 root root 6 12月 20 12:09 5
【能夠看到文件的權限是664,咱們要是用666-003該是663的。目錄的權限是774這裏是對的。爲何會這樣那其實真正的算法是這樣的】
文件:666=(rw-rw-rw-)-003=(-------wx)=(rw-rw-r--)004
【最後的x權限原本就沒有你減了仍是沒有,--x=-】
目錄:777=(rwxrwxrwx)-003=(-------wx)=(rwxrwxr--)774
2.17隱藏權限lsattr-chattr
2.17.1 文件
[root@MOMOCO-02 ~]# chattr +i 3.txt
【給一個文件加上i權限】
[root@MOMOCO-02 ~]# vi 3.txt
顯示不能夠編輯
編輯了不能保存
:wq 強制保存仍是沒有用,咱們有:q! 退出來
[root@MOMOCO-02 ~]# head -n 2 /etc/passwd > 3.txt
-bash: 3.txt: 權限不夠
[root@MOMOCO-02 ~]# ls -l 3.txt
-rw-r--r--. 1 root root 0 12月 20 11:48 3.txt
【咱們查看的權限是能夠寫的爲何不能夠寫,那這個時候咱們就看看是否是有什麼特殊權限】
[root@MOMOCO-02 ~]# lsattr 3.txt
----i----------- 3.txt
【查看一個文件或是否是有特殊權限,能夠看到這個文件是有的,沒有的以下。】
[root@MOMOCO-02 ~]# lsattr 4.txt
---------------- 4.txt
[root@MOMOCO-02 ~]# mv 3.txt 33.txt
mv: 沒法將"3.txt" 移動至"33.txt": 不容許的操做
[root@MOMOCO-02 ~]# rm 3.txt
rm:是否刪除普通空文件 "3.txt"?y
rm: 沒法刪除"3.txt": 不容許的操做
【能夠看到加上i權限你不能夠寫文件、不能夠刪除、不能夠更名字、也不能夠touch。若是咱們使用a權限只能夠在文件的末尾追加內容和touch。】
[root@MOMOCO-02 ~]# chattr -i 3.txt
【刪除i權限】
[root@MOMOCO-02 ~]# lsattr 3.txt
---------------- 3.txt
[root@MOMOCO-02 ~]# head -n 2 /etc/passwd > 3.txt
[root@MOMOCO-02 ~]# chattr +a 3.txt
[root@MOMOCO-02 ~]# head -n 2 /etc/passwd > 3.txt
-bash: 3.txt: 不容許的操做
【>重定向】
[root@MOMOCO-02 ~]# head -n 2 /etc/passwd >> 3.txt
【>>追加】
[root@MOMOCO-02 ~]# cat 3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@MOMOCO-02 ~]# touch 3.txt
[root@MOMOCO-02 ~]# cat 3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@MOMOCO-02 ~]# ls -l 3.txt
-rw-r--r--. 1 root root 130 12月 20 13:00 3.txt
【更改時間信息】
[root@MOMOCO-02 ~]# chattr -a 3.txt
[root@MOMOCO-02 ~]# lsattr 3.txt
---------------- 3.txt
【去掉a權限】
1.17.2 目錄
[root@MOMOCO-02 ~]# tree 2
2
├── 3
└── 3.txt
1 directory, 1 file
[root@MOMOCO-02 ~]# chattr +i 2
【給目錄加上i權限】
[root@MOMOCO-02 ~]# lsattr 2
---------------- 2/3
---------------- 2/3.txt
[root@MOMOCO-02 ~]# lsattr -d 2
----i----------- 2
【不加-d選項他會查看該目錄下的子目錄或者子文件有沒有i權限】
[root@MOMOCO-02 ~]# rm -rf 2
rm: 沒法刪除"2/3": 權限不夠
【不能夠刪除】
[root@MOMOCO-02 ~]# mv 2 3
mv: 沒法將"2" 移動至"3": 不容許的操做
【不能夠更名字】
[root@MOMOCO-02 ~]# touch 2/2.txt
touch: 沒法建立"2/2.txt": 權限不夠
【不能夠touch該目錄下的子文件】
[root@MOMOCO-02 ~]# head -n2 /etc/passwd > 2/3.txt
[root@MOMOCO-02 ~]# cat 2/3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
【能夠更改該目錄下的子文件】
[root@MOMOCO-02 ~]# rm 2/3.txt
rm:是否刪除普通文件 "2/3.txt"?y
rm: 沒法刪除"2/3.txt": 權限不夠
【不能夠刪除該目錄下的子文件】
[root@MOMOCO-02 ~]# rm -r 2/3
rm:是否刪除目錄 "2/3"?y
rm: 沒法刪除"2/3": 權限不夠
【不能夠刪除該目錄下的子目錄】
[root@MOMOCO-02 ~]# chattr +a 2
【給目錄加上a權限】
[root@MOMOCO-02 ~]# lsattr 2
---------------- 2/3
---------------- 2/3.txt
[root@MOMOCO-02 ~]# lsattr -d 2
-----a---------- 2
【不加-d選項他會查看該目錄下的子目錄或者子文件有沒有a權限】
[root@MOMOCO-02 ~]# head -n2 /etc/passwd > 2/3.txt
[root@MOMOCO-02 ~]# cat 2/3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
【能夠更改該目錄下的子文件】
[root@MOMOCO-02 ~]# mv 2 3
mv: 沒法將"2" 移動至"3": 不容許的操做
【不能夠更名字】
[root@MOMOCO-02 ~]# rm -r 2
rm:是否進入目錄"2"? y
rm:是否進入目錄"2/3"? y
rm:是否進入目錄"2/3/4"? y
rm:是否刪除普通空文件 "2/3/4/3.txt"?y
rm:是否刪除目錄 "2/3/4"?y
【能夠刪除該目錄下的子目錄或者子文件的子目錄或子文件】
rm:是否刪除目錄 "2/3"?y
rm: 沒法刪除"2/3": 不容許的操做
【不能夠刪除該目錄下的子目錄或者子文件】
rm:是否刪除普通文件 "2/3.txt"?y
rm: 沒法刪除"2/3.txt": 不容許的操做
[root@MOMOCO-02 ~]# rm 2/3.txt
rm:是否刪除普通文件 "2/3.txt"?y
rm: 沒法刪除"2/3.txt": 不容許的操做
[root@MOMOCO-02 ~]# rm -r 2/3
rm:是否刪除目錄 "2/3"?y
rm: 沒法刪除"2/3": 不容許的操做
【不能夠刪除該目錄下的子目錄或者子文件】
[root@MOMOCO-02 ~]# touch 2/3.txt
[root@MOMOCO-02 ~]# ls -l 2/3.txt
-rw-rw-r--. 1 root root 65 12月 20 13:36 2/3.txt
【能夠touch該目錄下的子文件】
小知識:
當咱們chattr -R +-i/+-a filaname 的時候他會級聯的把目錄下的因此子目錄或者子文件都加上i或a權限.
當咱們lsattr -R filaname 的時候他會顯示該目錄下全部的子目錄或者子文件有什麼權限,不加-R只會顯示兩層。
[root@MOMOCO-02 ~]# chattr -R +i 2
[root@MOMOCO-02 ~]# lsattr 2
----i----------- 2/3
----i----------- 2/3.txt
[root@MOMOCO-02 ~]# lsattr -R 2
----i----------- 2/3
2/3:
----i----------- 2/3.txt
[root@MOMOCO-02 ~]# chattr -R -i 2
[root@MOMOCO-02 ~]# lsattr -R 2
---------------- 2/3
2/3:
---------------- 2/3.txt
[root@MOMOCO-02 ~]# chattr -R +a 2
[root@MOMOCO-02 ~]# lsattr 2
-----a---------- 2/3
-----a---------- 2/3.txt
[root@MOMOCO-02 ~]# lsattr -R 2
-----a---------- 2/3
2/3:
-----a---------- 2/3.txt
[root@MOMOCO-02 ~]# chattr -R -a 2