Linux下檔案/目錄的許可權和歸屬訪問許可權讀取(r): 允許檢視檔案內容,顯示目錄列表寫入(w): 允許修改檔案內容,允許在目錄中新建、刪除、移動檔案或者子目錄可執行(x): 允許執行程式,切換目錄無許可權(-): 沒有許可權許可權介紹
d rwxr-xr-x . 2 root root 6 Jun 3 2019 Music
- |
代表普通檔案 |
d |
代表目錄 |
c |
代表字元型檔案 |
l |
代表連結檔案 |
| rwx | r-x | r-x | root | root
| - | - | - | - | - |
| 屬主許可權 | 屬組許可權 | 其他人許可權 | 屬主 | 屬組
許可權項 |
讀 |
寫 |
執行 |
讀 |
寫 |
執行 |
讀 |
寫 |
執行 |
字元表示 |
r |
w |
x | r |
w |
x |
r |
w |
x |
數字表示 |
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
許可權分配 |
檔案所有者(屬主) |
檔案所有者(屬主) |
檔案所有者(屬主) |
檔案所屬組(屬組) |
檔案所屬組(屬組) |
檔案所屬組(屬組) |
其他使用者 |
其他使用者 |
其他使用者 |
| r | w | - | r | - | - | r | - | -
| - | - | - | - | - | - | - | - | - |
4 | 2 | 0 | 4 | 0 | 0 | 4 | 0 | 0
這個檔案許可權就是 6 4 4許可權修改格式一:chmod ugoa[rwx] 檔案/目錄- u,g,o,a 分別代表 屬主,陣列,其他使用者,所有使用者 - +,-,= 分別代表 增加,減去,設定一個許可權ex:[root@localhost ~]# touch /root/a.txt [root@localhost ~]# ls a.txt -l -rw-r--r--. 1 root root 0 May 21 05:56 a.txt [root@localhost ~]# chmod g+w,o+w /root/a.txt [root@localhost ~]# ls a.txt -l -rw-rw-rw-. 1 root root 0 May 21 05:56 a.txt格式二chmod nnn(三位八進位制數) 檔案/目錄ex:[root@localhost ~]# chmod 644 /root/a.txt [root@localhost ~]# ls a.txt -l -rw-r--r--. 1 root root 0 May 21 05:56 a.txt常用選項-R 遞迴修改指定目錄下所有檔案或子目錄的許可權歸屬(所有權)屬主: 擁有該檔案或目錄的使用者賬號屬組: 擁有該檔案或目錄的組賬號許可權修改格式:chown 屬主 檔案/目錄chown :屬組 檔案/目錄chown 屬主:屬組 檔案/目錄常用選項-R: 遞迴修改指定目錄下所有檔案或子目錄的歸屬許可權ex:[root@localhost ~]# chown tom a.txt[root@localhost ~]# chown :manager a.txt[root@localhost ~]# ls a.txt -l-rw-r--r--. 1 tom manager 0 May 21 05:56 a.txt[root@localhost ~]# chown root:root a.txt[root@localhost ~]# ls a.txt -l-rw-r--r--. 1 root root 0 May 21 05:56 a.txt[root@localhost ~]#練習題-01新建檔案 /root/bb.txt,屬主為 harry,屬組為manager,屬主可以讀寫執行,屬組可以讀寫執行,其他人只讀[root@localhost ~]# touch /root/bb.txt [root@localhost ~]# useradd harry [root@localhost ~]# groupadd manager [root@localhost ~]# chown harry:manager /root/bb.txt [root@localhost ~]# chmod 774 /root/bb.txt [root@localhost ~]# ls bb.txt -l -rwxrwxr--. 1 harry manager 0 May 21 10:40 bb.txt新需求設定susa使用者對檔案擁有讀和執行許可權設定group組內的成員對檔案擁有讀的許可權此需求根據上面知識無法解決,需要設定 ACL 許可權[root@localhost ~]# useradd susa [root@localhost ~]# setfacl -m u:susa:rw bb.txt [root@localhost ~]# getfacl bb.txt # file: bb.txt # owner: harry # group: manager user::rwx user:susa:rw- group::rwx mask::rwx other::r-- [root@localhost ~]# groupadd group [root@localhost ~]# setfacl -m g:group:r bb.txt [root@localhost ~]# getfacl bb.txt # file: bb.txt # owner: harry # group: manager user::rwx user:susa:rw- group::rwx group:group:r-- mask::rwx other::r--ACL許可權ACL(Access Control List),主要目錄是在提供傳統的owner,group,otherd的read,write,execute許可權之外細部許可權設頂ACL 可以針對單一使用者,或者單一檔案/目錄進行r,w,x的許可權使用規範設定ACLsetfacl -m u:username:rwx filename u: 屬主 username: 使用者名稱稱 rwx: 許可權 filename: 檔案 setfacl -m g:groupname:rwx filename g: 屬組 groupname: 組名稱 檢視 getfacl filename 刪除 setfacl -x u:username filename 刪除使用者許可權 [root@localhost ~]# setfacl -m u:susa:rw a.txt [root@localhost ~]# getfacl a.txt # file: a.txt # owner: root # group: root user::rw- user:susa:rw- group::r-- mask::rw- other::r-- [root@localhost ~]# setfacl -x u:susa a.txt [root@localhost ~]# getfacl a.txt # file: a.txt # owner: root # group: root user::rw- group::r-- mask::r-- other::r-- 刪除組許可權 [root@localhost ~]# setfacl -m g:group:r a.txt [root@localhost ~]# getfacl a.txt # file: a.txt # owner: root # group: root user::rw- group::r-- group:group:r-- mask::r-- other::r-- [root@localhost ~]# setfacl -x g:group a.txt [root@localhost ~]# getfacl a.txt # file: a.txt # owner: root # group: root user::rw- group::r-- mask::r-- other::r--
練習題-02複製檔案 /etc/fstab到 /var/tmp/fstab,配置檔案 /var/tmp/fstab的許可權檔案 /var/tmp/fstab的擁有者是root使用者檔案 /var/tmp/fstab屬於root組檔案 /var/tmp/fstab對任何人都不可執行使用者natasha 能夠對檔案 /var/tmp/fstab執行讀和寫操作使用者harry 對檔案 /var/tmp/fstab既不能讀,也不能寫所有其他使用者(當前的和將來的)能夠對檔案 /var/tmp/fstab進行讀操作[root@localhost ~]# useradd harry [root@localhost ~]# useradd natasha [root@localhost ~]# cp /etc/fstab /var/tmp/fstab [root@localhost ~]# cd /var/tmp/ [root@localhost tmp]# ls fstab -l -rw-r--r--. 1 root root 465 May 21 11:09 fstab [root@localhost tmp]# setfacl -m u:natasha:rw fstab [root@localhost tmp]# setfacl -m u:harry:-- fstab [root@localhost tmp]# getfacl fstab # file: fstab # owner: root # group: root user::rw- user:harry:--- user:natasha:rw- group::r-- mask::rw- other::r--
特殊許可權umask 反掩碼 0022 許可權的一種補碼 777-022=755# root身份預設許可權 [root@localhost ~]# mkdir root_dir [root@localhost ~]# touch root_file drwxr-xr-x. 2 root root 6 May 22 08:46 root_dir 755 -rw-r--r--. 1 root root 0 May 22 08:46 root_file 644 # 普通使用者身份預設許可權 [ruochen@localhost ~]$ touch ruochen_file [ruochen@localhost ~]$ mkdir ruochen_dir drwxrwxr-x. 2 ruochen ruochen 6 May 22 08:49 ruochen_dir 775 -rw-rw-r--. 1 ruochen ruochen 0 May 22 08:49 ruochen_file 664 [root@localhost ~]# umask 0 [root@localhost ~]# umask 0000 [root@localhost ~]# touch new_file [root@localhost ~]# mkdir new_dir drwxrwxrwx. 2 root root 6 May 22 08:55 new_dir -rw-rw-rw-. 1 root root 0 May 22 08:55 new_file附加許可權SET位許可權SUID:為可執行檔案設定(檔案具有x位許可權),許可權標識字元: 's' u+s 4 4***當執行這個可執行檔案時,呼叫該檔案的屬主的身份執行[root@localhost ~]# ll /etc/shadow----------. 1 root root 1585 May 22 07:33 /etc/shadow$\color{red}為什麼shadow 檔案無許可權,普通使用者還能登入/修改密碼?$我們先拿一個 ping 命令來舉例,先將 /bin/ping 複製到 /home/ruochen 這個使用者下,然後執行 /home/ruochen/ping 127.0.0.1 看看會發生什麼?[ruochen@localhost ~]$ /home/ruochen/ping 127.0.0.1ping: icmp open socket: Operation not permitted顯然,沒有許可權。那麼我們如果給他設定 SUID 許可權會怎麼樣?[root@localhost ~]# chmod u+s /home/ruochen/ping現在再來執行[ruochen@localhost ~]$ /home/ruochen/ping 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.019 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.069 ms顯然,現在可執行。$\color{red}由此,我們可以看出SUID許可權的作用也就能解釋前面所說的普通使用者登入/修改密碼問題$SGID: 老鼠的兒子會打洞一般設定在目錄上,這時候在該目錄下新建的檔案/目錄自動繼承父目錄的屬組我們先在ruochen 使用者下新建一個資料夾和一個檔案[ruochen@localhost ~]$ mkdir sgid_dir[ruochen@localhost ~]$ cd sgid_dir/[ruochen@localhost sgid_dir]$ touch ruochen.txt然後,我們在root 使用者下,切換到/home/ruochen/sgid_dir 目錄下,新建一個 root.txt 檔案[root@localhost ~]# cd /home/ruochen/sgid_dir/[root@localhost sgid_dir]# touch root.txt然後,我們給剛才新建的目錄加一個 sgid 許可權[root@localhost ruochen]# chmod g+s sgid_dir/在root 使用者下,在 sgid_dir 資料夾中繼續新建一個目錄[root@localhost sgid_dir]# mkdir root_dir[root@localhost sgid_dir]# lltotal 0drwxr-sr-x. 2 root ruochen 6 May 22 09:37 root_dir-rw-r--r--. 1 root root 0 May 22 09:32 root.txt-rw-rw-r--. 1 ruochen ruochen 0 May 22 09:30 ruochen.txt這時,我們發現 $\color{red}root\_dir 的屬組不是root,而是 ruochen$,我們看一下 root_dir 父目錄的屬組[root@localhost sgid_dir]# cd ..[root@localhost ruochen]# lltotal 0drwxrwxr-x. 2 ruochen ruochen 6 May 22 08:49 ruochen_dir-rw-rw-r--. 1 ruochen ruochen 0 May 22 08:49 ruochen_filedrwxrwsr-x. 3 ruochen ruochen 54 May 22 09:37 sgid_dir由此,我們可看出 sgid 許可權的作用,也即 $\color{red}“老鼠的兒子會打洞”$粘滯位許可權(Sticky)為公共目錄設定(777), 標識為 't'1***使用者不能刪除其目錄中其他使用者的檔案/tmp, /var/tmpdrwxrwxrwt. 17 root root 4096 May 22 09:42 tmp在roor 使用者下新建一個 /test 目錄[root@localhost ~]# mkdir /testdrwxr-xr-x. 2 root root 6 May 22 09:50 test將其許可權改為 777,並在目錄下新建一個 root.txt 檔案[root@localhost ~]# chmod 777 /test/drwxrwxrwx. 2 root root 6 May 22 09:50 test[root@localhost test]# touch root.txt然後我們切換到 ruochen 使用者,發現可以切換到 /test 目錄,也能建立和檢視檔案[ruochen@localhost share]$ cd /test/[ruochen@localhost test]$ touch ruochen.txt[ruochen@localhost test]$ lltotal 0-rw-r--r--. 1 root root 0 May 22 09:53 root.txt-rw-rw-r--. 1 ruochen ruochen 0 May 22 09:54 ruochen.txt我們嘗試在ruochen 使用者下,刪除 /test 目錄中的檔案[ruochen@localhost test]$ rm -rf root.txt[ruochen@localhost test]$ lltotal 0-rw-rw-r--. 1 ruochen ruochen 0 May 22 09:54 ruochen.txt**[ruochen@localhost test]$ rm -rf ruochen.txt[ruochen@localhost test]$ lltotal 0我們發現 ruochen 使用者可以把裡面所有的檔案都刪除,這樣,$\color{red}共享檔案就可以被隨意刪除$,這是不可以的, 這時,$\color{red}粘滯位許可權$就派上用場了,其可以防止使用者刪除其他使用者的檔案我們在root 使用者下,給 /test/ 目錄加一個粘滯位許可權,然後在該目錄下新建一個 root.txt 檔案[root@localhost ~]# chmod o+t /test/[root@localhost test]# touch root.txt我們再次嘗試在 ruochen 使用者下刪除 root.txt 檔案[ruochen@localhost test]$ rm -rf root.txtrm: cannot remove ‘root.txt’: Operation not permitted發現刪除被拒絕,這樣,我們就可以理解粘滯位許可權了練習題-03建立一個共享目錄 /home/cnrts, 特性如下/home/cnrts 目錄的組所有權是 managermanager組的成員對目錄有讀寫和執行的許可權,除此之外的其他所有使用者沒有任何許可權(root使用者能夠訪問系統中的所有檔案和目錄)在/home/cnrts 目錄中建立檔案,其組所有權會自動設定為屬於manager組[root@localhost ~]# mkdir /home/cnrts [root@localhost ~]# groupadd manager [root@localhost ~]# chown :manager /home/cnrts/ [root@localhost ~]# chmod 2770 /home/cnrts/