linux文件權限管理:文件權限類型,文件權限影響,設定文件權限,取消文件權限


一.關於文件權限

權限可以對文件所有者的內容進行保護,也可以分享內容給特定的用戶。一般給文件設置權限可以達到三種效果:

  • ​ 只允許自己訪問
  • ​ 允許某個指定用戶訪問
  • ​ 允許所有用戶訪問

二.查看文件權限

1.使用ll可以查看文件的權限

[root@node5 ~]# ll -h *.txt
-rw-r--r-- 1 root root  115 Oct 12 10:03 aaa.txt
-rw-r--r-- 1 root root  27K Oct 10 16:27 ceshi.txt
-rw-r--r-- 1 root root 1.2K Apr  3  2020 idea快捷鍵.txt
-rw-r--r-- 1 root root   16 Oct 10 16:35 test2.txt
-rw-r--r-- 1 root root   12 Oct 10 17:30 test.txt
-rw-r--r-- 1 root root   83 Oct 12 09:59 測試亂碼文件.txt

#-rw-r--r--即是文件權限的描述

2.文件權限釋義如下圖:

image-20201018005029886

image-20201018005115883

三.linux下常見文件類型

1.文件類型如下:

  • ​ p表示命名管道文件
  • ​ d表示目錄文件
  • ​ l表示符號鏈接文件
  • ​ -表示普通文件
  • ​ s表示socket套接口文件,比如我們啟用mysql時,會產生一個mysql.sock文件
  • ​ c表示字符設備文件,例: 虛擬控制台 或tty0
  • ​ b表示塊設備文件 例: sda, cdrom

2.系統常見的文件類型

#字符設備文件
[root@node5 ~]# ll /dev/tty
crw-rw-rw- 1 root tty 5, 0 Oct 14 02:40 /dev/tty

#塊設備文件
[root@node5 ~]# ll /dev/sd*
brw-rw---- 1 root disk 8,  0 Oct 14 02:40 /dev/sda
brw-rw---- 1 root disk 8,  1 Oct 14 02:40 /dev/sda1
brw-rw---- 1 root disk 8,  2 Oct 14 02:40 /dev/sda2
brw-rw---- 1 root disk 8, 16 Oct 14 02:40 /dev/sdb
brw-rw---- 1 root disk 8, 17 Oct 14 02:40 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Oct 14 02:40 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Oct 14 02:40 /dev/sdb5
brw-rw---- 1 root disk 8, 22 Oct 14 02:40 /dev/sdb6

#符號鏈接文件
[root@node5 ~]# ll /dev/cdrom 
lrwxrwxrwx 1 root root 3 Oct 14 02:40 /dev/cdrom -> sr0

#目錄文件
[root@node5 ~]# ll -d /
dr-xr-xr-x. 21 root root 4096 Oct 14 02:22 /

#普通文件
[root@node5 ~]# ll /etc/hosts
-rw-r--r--. 1 root root 356 Apr 28  2019 /etc/hosts

#套接字文件
[root@node5 ~]# ll /var/lib/gssproxy/default.sock
srw-rw-rw- 1 root root 0 Oct 14 02:40 /var/lib/gssproxy/default.sock

四.linux下常見的文件權限

1.Linux下的文件權限類型一般包括讀,寫,執行,對應的字母是: r ,w,x。

2.對於文件來說:

  • ​ r:讀
  • ​ w:寫
  • ​ x:執行

3.對於目錄來說:

  • ​ r:讀(看目錄里面有什么), ls
  • ​ w:在目錄里面建文件,刪除,移動 touch mkdir rm mv cp
  • ​ x:進入 cd cat

4.常見的文件權限如下:

  • ​ rwx------:文件所有者對文件具有讀取、寫入和執行的權限。
  • ​ rwxr-- r--: 文件所有者具有讀、寫與執行的權限,用戶組里用戶及其他用戶則具有讀取的權限
  • ​ rw-rw-r-x:文件所有者與同組用戶對文件具有讀寫的權限,而其他用戶僅具有讀取和執行的權限。
  • ​ drwx--x—x: 目錄所有者具有讀寫與進入目錄的權限,其他用戶近能進入該目錄,卻無法讀取任何數據。
  • ​ drwx------: 除了目錄所有者具有完整的權限之外,其他用戶對該目錄完全沒有任何權限。

5.每個用戶都有自己的專屬目錄,通常放置在/home下面

[root@node5 ~]# ll -h /home
total 4.0K
drwx------ 3 elk    elk     120 Oct 14 01:42 elk
drwx------ 6 esnode esnode 4.0K Apr 27 14:27 esnode
drwx------ 2 nginx  nginx    62 May  7  2019 nginx
drwx------ 3 www    www      73 May  7  2019 www

注:[rwx------]表示目錄所有者本身擁有的權限,其它用戶無法進入的,root除外

6.你以什么用戶身份登錄,那么你創建的目錄或文件,自動成為該文件或目錄的所屬

[root@node5 ~]# su - elk
Last login: Wed Oct 14 01:42:49 CST 2020 on pts/0

[elk@node5 ~]$ pwd
/home/elk
[elk@node5 ~]$ touch b.txt
[elk@node5 ~]$ ll b.txt 
-rw-rw-r-- 1 elk elk 0 Oct 14 15:10 b.txt
[elk@node5 ~]$ 
[elk@node5 ~]$ exit
logout

五.權限對文件和目錄的影響

權限 對文件的影響 對目錄的影響
r(讀取) 可以讀取文件的內容 可以列出目錄的內容(文件名):ls
w(寫入) 可以更改文件的內容 可以創建或刪除目錄中的任意文件:touch mkdir rm mv cp
x(執行) 可以作為命令執行文件 可以訪問目錄的內容(取決於目錄中文件的權限):cd cat

六.文件的用戶分類

1.文件的用戶分類:U(文件所有者)-G(用戶組)-O(其他用戶)

  • ​ 所有者: 就是創建文件的用戶,這個用戶擁有對它所創建的文件的一切權限,所有者可以允許其所在的用戶組可以訪問所有者的文件。
  • ​ 用戶組: 用戶組是具有相同特征用戶的邏輯集合,有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件的權限,一種方法是分別對多個用戶進行文件訪問授權,如果有10個用戶的話,就需要授權10次,顯然這種方法不太合理;另一種方法是建立一個組,讓這個組具有查看、修改此文件的權限,然后將所有需要訪問此文件的用戶放入這個組中,那么所有用戶就具有了和組一樣的權限。這就是用戶組。
  • 其它用戶:系統內的其他所有者用戶就是other用戶類

七.更改文件的屬主和屬組

1.改變文件的所屬關系用到命令:
chown:可以用來改變文件(或目錄)的屬主 change owner
chgrp:可以用來改變文件(或目錄)的默認屬組 change group
如果你要對目錄進行操作,加參數 -R

​ chown user:group filename 比如:chown hr:san a.txt 把文件的屬主和屬組改為hr,san
​ chown user: filename 比如:chown san: a.txt 自動繼承這個用戶所有的組
​ chown user filename 比如:chown san a.txt 把文件的屬主改為san用戶
​ chown :group filename 比如: chown :miao a.txt 把文件的屬組改為miao這個組
​ chgrp hr filename 比如: chgrp hr f.txt
​ -R :遞歸(目錄下的所有內容都更改,否則只修改目錄)

[root@node5 ~]# ll -h *.txt
-rw-r--r-- 1 root root 115 Oct 12 10:03 aaa.txt
-rw-r--r-- 1 root root 115 Oct 14 16:54 bbb.txt
-rw-r--r-- 1 root root 115 Oct 14 16:54 ccc.txt
-rw-r--r-- 1 root root 115 Oct 14 16:55 ddd.txt

[root@node5 ~]# chown esnode aaa.txt 

[root@node5 ~]# ll aaa.txt 
-rw-r--r-- 1 esnode root 115 Oct 12 10:03 aaa.txt

[root@node5 ~]# chown esnode:esnode bbb.txt 

[root@node5 ~]# ll bbb.txt 
-rw-r--r-- 1 esnode esnode 115 Oct 14 16:54 bbb.txt
 
[root@node5 ~]# chown :logstash ccc.txt 

[root@node5 ~]# ll ccc.txt 
-rw-r--r-- 1 root logstash 115 Oct 14 16:54 ccc.txt
 
[root@node5 ~]# chown elk: ddd.txt 

[root@node5 ~]# ll ddd.txt 
-rw-r--r-- 1 elk elk 115 Oct 14 16:55 ddd.txt

[root@node5 ~]# cp ddd.txt eee.txt

[root@node5 ~]# ll eee.txt 
-rw-r--r-- 1 root root 115 Oct 14 17:00 eee.txt

[root@node5 ~]# chgrp elk eee.txt 
 
[root@node5 ~]# ll eee.txt 
-rw-r--r-- 1 root elk 115 Oct 14 17:00 eee.txt

八.一個文件取消所有權限,擁有者是否可以寫這個文件?

[root@node5 ~]# su - elk
Last login: Wed Oct 14 15:10:16 CST 2020 on pts/0

[elk@node5 ~]$ pwd
/home/elk

[elk@node5 ~]$ touch test.txt

[elk@node5 ~]$ echo "hello world ! " >> test.txt
[elk@node5 ~]$ 
[elk@node5 ~]$ ll -h
total 4.0K
-rw-rw-r-- 1 elk elk 15 Oct 14 19:17 test.txt
[elk@node5 ~]$ chmod 000 test.txt 
[elk@node5 ~]$ 
[elk@node5 ~]$ ll -h
total 4.0K
---------- 1 elk elk 15 Oct 14 19:17 test.txt
[elk@node5 ~]$ 
[elk@node5 ~]$ echo 12 >> test.txt 
-bash: test.txt: Permission denied
 
[elk@node5 ~]$ vim test.txt                                                                                                                                                                
[elk@node5 ~]$ cat test.txt 
cat: test.txt: Permission denied

[elk@node5 ~]$ pwd
/home/elk
[elk@node5 ~]$ ls
test.txt

[elk@node5 ~]$ exit
logout
[root@node5 ~]# cat /home/elk/test.txt 
hello world ! 
[root@node5 ~]# su - elk
Last login: Wed Oct 14 19:14:43 CST 2020 on pts/0

#強行寫入
[elk@node5 ~]$ vim test.txt 
qwe
qwe                                                                                                                                                            
"test.txt" 2L, 8C written
[elk@node5 ~]$ 
[elk@node5 ~]$ cat test.txt 
cat: test.txt: Permission denied
[elk@node5 ~]$ 
[elk@node5 ~]$ exit
logout
[root@node5 ~]# 
[root@node5 ~]# cat /home/elk/test.txt 
qwe
qwe

結論:文件所有者一定可以寫文件,就像root可以對shadow強制寫, 因為shadow的擁有者是root。

九.使用字符設定權限

1.修改權限用的命令:chmod,作用:修改文件,目錄的權限

2.chmod的命令格式:

chmod [對誰操作] [操作符] [賦於什么權限] 文件名
對誰操作:
u----> 用戶user,表示文件或目錄的所有者
g---->用戶組group,表示文件或目錄所屬的用戶組
o---->其它用戶others
a---->所有用戶all
操作符:

+:添加權限 ,- :減少權限 ;= :直接給定一個權限
權限:r w x

參數 描述
u-w 給文件擁有者減去讀的權限
g+x 給用戶組加上執行的權限
o=r 賦予其他用戶讀的權限
a+x 給所有用戶加上執行的權限
[root@node5 ~]# su - elk
[elk@node5 ~]$ touch test.txt
[elk@node5 ~]$ ll
total 0
-rw-rw-r-- 1 elk elk 0 Oct 14 19:32 test.txt

[elk@node5 ~]$ chmod u-w test.txt 

[elk@node5 ~]$ ll
total 0
-r--rw-r-- 1 elk elk 0 Oct 14 19:32 test.txt

[elk@node5 ~]$ chmod o=w test.txt 

[elk@node5 ~]$ ll
total 0
-r--rw--w- 1 elk elk 0 Oct 14 19:32 test.txt

[elk@node5 ~]$ chmod u+wx test.txt 
[elk@node5 ~]$ 
[elk@node5 ~]$ ll
total 0
-rwxrw--w- 1 elk elk 0 Oct 14 19:32 test.txt

[elk@node5 ~]$ chmod g=- test.txt 
[elk@node5 ~]$ 
[elk@node5 ~]$ ll
total 0
-rwx----w- 1 elk elk 0 Oct 14 19:32 test.txt
[elk@node5 ~]$ 
[elk@node5 ~]$ chmod a=r test.txt 
[elk@node5 ~]$ 
[elk@node5 ~]$ ll
total 0
-r--r--r-- 1 elk elk 0 Oct 14 19:32 test.txt

十.使用八進制(0-7)數字設定權限

1.八進制表示法

權限 二進制值 八進制值 描述
--- 000 0 沒有任何權限
--x 001 1 只有執行權限
-w- 010 2 只有寫入權限
-wx 011 3 有寫入和執行權限
r-- 100 4 只有讀取權限
r-x 101 5 有讀取和執行權限
rw- 110 6 有讀取和寫入權限
rwx 111 7 有全部權限

image-20201019143624993

2.改變權限的語法:chmod 755 文件或目錄

chmod a=rwx b.txt 等價於 chmod 777 b.txt

[root@node5 ~]# su - elk
Last login: Wed Oct 14 19:30:54 CST 2020 on pts/0
[elk@node5 ~]$ ll
total 0
-r--r--r-- 1 elk elk 0 Oct 14 19:32 test.txt
 
[elk@node5 ~]$ chmod 755 test.txt 

[elk@node5 ~]$ ll
total 0
-rwxr-xr-x 1 elk elk 0 Oct 14 19:32 test.txt
[elk@node5 ~]$ 
[elk@node5 ~]$ chmod 700 test.txt 
[elk@node5 ~]$ 
[elk@node5 ~]$ ll
total 0
-rwx------ 1 elk elk 0 Oct 14 19:32 test.txt

[elk@node5 ~]$ stat -c%a test.txt 
700

[elk@node5 ~]$ stat -c%A test.txt 
-rwx------

十一.補碼 umask

1.為什么我們創建的文件的權限是644呢?我們創建文件的默認權限是怎么來的?

​ 答:umask命令允許你設定文件創建時的缺省模式,對應每一類用戶(文件屬主、同組用戶、其他用戶)存在一個相應的umask值中的數

字,當我們登錄系統之后創建一個文件是會有一個默認權限的,那么這個權限是怎么來的呢?這就是umask干的事情。umask用於設置用

戶創建文件或者目錄的默認權限,umask設置的是權限的“補碼”,而我們常用chmod設置的是文件權限碼。

2.文件默認權限=666 ,目錄默認權限=777

3.為什么文件比目錄權限少1? x cd

4.我們一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中設置umask值。永久生效,編輯用戶的配置文件vim

.bash_profile

[elk@node5 ~]$ cat /etc/profile
......
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
......

[elk@node5 ~]$ id -gn
elk

[elk@node5 ~]$ id -un
elk

注釋:UID大於199 且用戶的組名和用戶名一樣,那么 umask值為002,否則為022。
注釋: -gt 在shell中表示大於; id -un 顯示用戶組ID ,id -gn顯示組名。

5.設置umask臨時生效

[root@node5 ~]# umask 044
[root@node5 ~]# touch b.txt
[root@node5 ~]# stat -c %a b.txt 
622
[root@node5 ~]# ll b.txt 
-rw--w--w- 1 root root 0 Jul  7 21:51 b.txt

6.umask權限的算法

權限的算法:一般情況是:目錄默認權限-umask 值

666-022=644

777-022=755

這是一個好的記憶方法,但不嚴謹。

互動:umask掩碼為033 創建普通文件后,權限是什么? 666-033=633 ( rw- -wx -wx) ?

[root@node5 ~]# umask 033
[root@node5 ~]# touch c.txt
[root@node5 ~]# ll c.txt 
-rw-r--r-- 1 root root 0 Jul  7 21:54 c.txt
[root@node5 ~]# stat -c %a c.txt 
644

權限科學的計算方法:
1、將默認權限(目錄777,文件666)和umask值都轉換為2進制
2、對umask取反
3、將默認權限和umask取反后的值做與運算
4、將得到的二進制值再轉換8進制,即為權限,

例1:umask為022
6 6 6 umask 0 2 2
110 110 110 000 010 010 #轉成二進制
111 101 101 #umask取反的值
做運算
110 110 110
111 101 101
結果
110 100 100 #轉成8進制 6 4 4

例2: umask 為033 結果為: 644
6 6 6 umask 0 3 3
110 110 110 000 011 011 # 轉成二進制
111 100 100 # umask取反的值
110 110 110 與 #默認權限和umask取反后的值做與運算
111 100 100 # umask取反的值
110 100 100
6 4 4 #轉成8進制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM