Linux下文件/目錄的權限和歸屬
訪問權限
- 讀取(r): 允許查看文件內容,顯示目錄列表
- 寫入(w): 允許修改文件內容,允許在目錄中新建、刪除、移動文件或者子目錄
- 可執行(x): 允許運行程序,切換目錄
- 無權限(-): 沒有權限
權限介紹
- rw-r–r-- . 1 root root 1258 Jun 3 2019 initial-setup-ks.cfg
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的權限使用規範
-
設置ACL
setfacl -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
-
-
我們先拿一個 ping 命令來舉例,先將 /bin/ping 拷貝到 /home/ruochen 這個用戶下,然後執行 /home/ruochen/ping 127.0.0.1 看看會發生什麼?
[ruochen@localhost ~]$ /home/ruochen/ping 127.0.0.1 ping: icmp open socket: Operation not permitted
-
顯然,沒有權限。那麼我們如果給他設置 SUID 權限會怎麼樣?
[root@localhost ~]# chmod u+s /home/ruochen/ping
-
現在再來執行
[ruochen@localhost ~]$ /home/ruochen/ping 127.0.0.1 PING 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 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.069 ms
-
顯然,現在可執行。
-
-
-
SGID: 老鼠的兒子會打洞 2***
-
一般設置在目錄上,這時候在該目錄下新建的文件/目錄自動繼承父目錄的屬組
-
我們先在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]# ll total 0 drwxr-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
-
這時,我們發現 ,我們看一下 root_dir 父目錄的屬組
[root@localhost sgid_dir]# cd .. [root@localhost ruochen]# ll total 0 drwxrwxr-x. 2 ruochen ruochen 6 May 22 08:49 ruochen_dir -rw-rw-r--. 1 ruochen ruochen 0 May 22 08:49 ruochen_file drwxrwsr-x. 3 ruochen ruochen 54 May 22 09:37 sgid_dir
-
由此,我們可看出 sgid 權限的作用,也即
-
粘滯位權限(Sticky)
-
爲公共目錄設置(777), 標識爲 ‘t’
-
1***
-
用戶不能刪除其目錄中其他用戶的文件
-
/tmp, /var/tmp
drwxrwxrwt. 17 root root 4096 May 22 09:42 tmp
-
在roor 用戶下新建一個 /test 目錄
[root@localhost ~]# mkdir /test drwxr-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]$ ll total 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]$ ll total 0 -rw-rw-r--. 1 ruochen ruochen 0 May 22 09:54 ruochen.txt **[ruochen@localhost test]$ rm -rf ruochen.txt [ruochen@localhost test]$ ll total 0
-
我們發現 ruochen 用戶可以把裏面所有的文件都刪除,這樣,,這是不可以的, 這時,就派上用場了,其可以防止用戶刪除其他用戶的文件
-
我們在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.txt rm: cannot remove ‘root.txt’: Operation not permitted
-
發現刪除被拒絕,這樣,我們就可以理解粘滯位權限了
-
練習題-03
- 創建一個共享目錄 /home/cnrts, 特性如下
-
/home/cnrts 目錄的組所有權是 manager
-
manager組的成員對目錄有讀寫和執行的權限,除此之外的其他所有用戶沒有任何權限(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/
-