Linux下文件及文件夾權限(學習筆記版)


本文遵循 CC 4.0 BY-SA 版權協議

 

 

注意:本文為學習筆記版,只記錄個人覺得重要的部分,內容較為片面。

 

 

 

 

 

 

Linux 下文件及文件夾的權限可以表示為rwx這三個字符,r代表read,w代表write,x代表excute。

其中,rwx分別可以用數字來表示,即4,2,1。  4代表r,2代表w,1代表x。

 

 

 

下圖引自:https://blog.csdn.net/lv8549510/article/details/85406215

 

 

 

 

 

其中,對於文件和文件夾來說“rwx”的意義有區別:

對於文件:

r   代表是否可以讀取文件內容;

w  代表可以修改文件內容,包括添加文件內容,刪除文件內容,清空文件內容(不能刪除文件,刪除文件的權限要看文件所屬的文件夾的權限,參看下文內容)

x   代表是否可以執行該文件。(這個權限只對可執行文件有限,如果不是可執行文件即使有x權限也並不會執行成功,這里的可執行文件包括二進制文件也包括腳本文件和shell文件)

 

 

對於文件夾:

r   代表讀取到文件夾下文件名稱(不代表能夠讀取到文件夾下文件的其他信息,如:大小,創建日期,文件權限等信息,關於文件的信息需要有進入到文件夾下的權限,即“x”權限)

w  代表對文件夾下的文件進行創建、重命名、刪除等,該權限不包括對文件內容的修改。有文件夾的w權限,但是沒有文件夾下文件的rwx權限,我們雖然不能修改文件夾下文件的內容但是我們可以刪除該文件。

x   代表是否能夠進入到文件夾下的權限。

 

有文件夾的r權限可以讀取到文件夾下有哪些文件,但是不能讀取到文件夾下文件的其他信息(如:大小,創建日期,文件權限等信息)。

有文件夾的rx權限,可以讀取到文件夾下有哪些文件及其其他信息(如:大小,創建日期,文件權限等信息)

 

只有文件夾的x權限,此時雖然沒有文件夾的rw權限但是如果知道文件夾下文件名同時該文件可讀我們也是可以讀取該文件夾下的文件內容的,但是只有文件夾的r權限而沒有x權限雖然能讀到文件夾下文件的名但是無法讀取文件夾下文件內容:

 

 

 

 

 

 

 

 

 

 

 

下段引自:https://blog.csdn.net/guozan523/article/details/4517790

對於一個目錄,如果設置了“read”標志,您可以列出目錄的內容;“write”表示您可以在目錄中創建文件,“execute”表示您可以進入該目錄並訪問內部的任何子目錄。沒有“execute”標志,目錄內的文件系統對象是不可訪問的。沒有“read”標志,目錄內的文件系統對象是不可查看的,但是只要有人知道磁盤上對象的完整路徑,就仍然可以訪問目錄內的對象。

 

 

 

 

 

======================================

 

說明下:在沒有設置特殊權限時,對於可執行文件來說不論其文件的所屬用戶和用戶組是什么,在運行時top中所顯示的用戶和用戶組都是調用者的。

 

 

特殊權限

其實文件和文件夾權限除了 rwx  以外還有  suid  ,   guid,   sticky    三個權限。如果用數字表示,其中suid是4、sgid是2、stricky粘滯位是1。一個文件或文件夾的權限一般可以用四個數字來表示0777是不考慮特殊權限時最高權限,考慮特殊權限的話則是7777。如果用字母表示不考慮特殊權限則是rwx,rwx,rwx,如果考慮特殊權限可以寫為rwsrwsrwt,其中一個s表示suid,第二個s表示guid,t表示sticky,當然如果考慮特殊權限的話也可以寫為rwSrwSrwT。

s與S  的區別在於若是用戶u 或用戶組g 沒有執行權限(x)  則其附加權限為  S , 若是有x(執行權限) 則為 s 。

t與T  的區別在於若是其他組o 沒有執行權限(x)  則其附加權限為  T , 若是有x(執行權限) 則為 t 。

 (下面內容引自CSDN博主「白小黑..」的原創文章,遵循CC 4.0 BY-SA版權協議:https://blog.csdn.net/weixin_42711549/article/details/81156370

 

 

 

 

1.suid 冒險位

(1)作用

只針對與二進制可執行文件

本權限僅在執行該程序的過程中有效

執行者將具有該程序所有者的權限

(2) 設定方式

chmod u+s file /dir 或 chmod 4xxx file/dir

 

 

例子:

在沒設定冒險位之前先 執行 watch  並查看其進程的所有者為 root

 

 

 

 

查看進程權限:

 

ps ax -o comm,user,group|grep watch

 

 

 

修改/bin/watch 的所有者,設定冒險位,執行watch ,查看其進程的所有者改為 student

sudo chown  student  /usr/bin/watch

sudo  u+s  /usr/bin/watch

 

查詢此時/bin/watch文件權限:

root@rootroot:/tmp# ll /usr/bin/watch
-rwxr-xr-x 1 student root 22952 Aug 9 2019 /usr/bin/watch*

 

再次執行watch應用:

查看進程權限:

ps ax -o comm,user,group|grep watch

結果:

watch   student    root

 

 

 

個人添加的例子:

suid的設置不僅可以針對二進制可執行文件,也可以針對腳本文件,主要區別是針對二進制執行文件的話設置了suid后只要保證調用的用戶具有x權限即可,但是如果是腳本文件設置suid后不僅調用用戶需要有x權限也得有r權限。畢竟腳本文件不是直接執行的而是需要讀取內容給解釋器的,所以需要調用用戶有r權限。

如:x.c 文件

#include<stdio.h>
int main(){
printf("hello world \n");
return 0;}

 

gcc x.c

 

賦予二進制文件 x 權限后即可執行:

 

 

 

 

對於腳本文件在設置suid后調用用戶必須有rx權限,只有x權限是不行的,如:

 

 

 

 

 

需要注意的是suid雖然可以給文件夾進行設置但是沒有任何其他特殊作用。

 

 

 

 

 

 

 

 

 

 

2.sgid 強制位

(1)作用

對文件:只針對二進制可執行文件,當文件上有sgid時任何執行此文件產成的進程都屬於文件的組

對目錄:當目錄上有sgid權限時任何人在此目錄中建立的文件都屬於目錄的所有組

(2)設定方式

chmod g+s file /dir 或 chnod 2xxx file/dir

 

 

 

 

 

 

 

 

 

3.sticky     粘制位

(1)作用

    只針對目錄生效,當一個目錄上有sticky權限時,在這個目錄中的文件只能被文件的所有者刪除

(2)設定方式

     chmod o+t  dir 或  chmod 1xxx dir

 

在設置了 sticky位的文件夾下面的文件或文件夾都只能被所屬用戶刪除,即使這些文件夾和文件的權限為777,但是由於其父目錄設置了sticky位也只能被所屬用戶刪除,其他用戶無法刪除。

需要注意的是一個文件夾設置了sticky權限只會影響該目錄下的文件及這一層的文件夾,如果帶有sticky的文件夾下的文件夾不具備sticky,那么sticky的文件夾下的文件夾不會對其下的文件或文件夾有sticky限制,或者說sticky不具備傳遞性。

 

 

 

 ==================================

引自:https://www.cnblogs.com/wangtao-blog/p/11156297.html

 

 

目錄如果啟用了目錄的“sgid”標志,在目錄內創建的任何文件系統對象將繼承目錄的組。當您需要創建一個屬於同一組的一組人使用的目錄樹時,這種特殊的功能很管用。只需要這樣做:

# mkdir /home/groupspace
  
# chgrp mygroup /home/groupspace
  
# chmod g+s /home/groupspace

 

 

一般來說,只要對一個目錄有寫訪問權,任何人都可以重命名或刪除該目錄中的文件。對於個別用戶使用的目錄,這種行為是很合理的。但是,對於很多用戶使用的目錄來說,尤其是 /tmp 和 /var/tmp,這種行為可能會產生麻煩。因為任何人都可以寫這些目錄,任何人都可以刪除或重命名任何其他人的文件 — 即使是不屬於他們的!顯然,當任何其他用戶在任何時候都可以輸入“rm -rf /tmp/*”並損壞每個人的文件時,很難把 /tmp 用於任何有意義的文件。所幸,Linux 有叫做“粘滯位”(sticky bit)的東西。當給 /tmp 設置了粘滯位(用 chmod +t),唯一能夠刪除或重命名 /tmp 中文件的是該目錄的所有者(通常是 root 用戶)、文件的所有者或 root 用戶。

 

s與S  的區別在於若是用戶或用戶組沒有執行權限(x)  則其附加權限為  S 。 若是有x(執行權限) 則為 s 。

我們的附加權限也可以用數字表示,當我們寫三個數字的時候默認是屬主屬組和其他用戶的權限;但是當我們寫四個數字的時候,后三個默認還是屬主屬組和其他用戶的權限,但是第一個數字就代表附加權限,其中suid是4、sgid是2、粘滯位是1

 

 

 ==================================

 

 以下內容引自:

版權聲明:本文為CSDN博主「綠夜」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lv8549510/article/details/85406215

 

 

三種特殊權限suid、sgid、sticky(sticky權限工作環境中相對常用)

 

1.  suid

作用:給一個用戶繼承二進制程序所有者擁有的權限

suid權限位 位於所有者的執行權限位上,如果一個文件具有suid權限,則所有者執行位為s,文件表現為紅色背景

 

 例:ll /usr/bin/passwd
     -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

 給file文件增加suid權限
 
     chmod u+s file
     
     chmod 4755 file               suid數字法表示為4

注: suid只適合作用在二進制程序上

 

 

 

 

 

2.  sgid

作用1:給一個用戶繼承二進制程序所有組擁有的權限

sgid權限位 位於所有組的執行權限位,如果一個文件具有suid權限,則所有組的執行位為s,文件表現為黃色背景

 

例:ll `which cat`
    -rwxr-sr-x. 1 root root 48568 Mar 23  2017 /bin/cat

給file文件增加sgid權限

    chmod g+s file
    
    chmod 2755 file               sgid數字法表示為2

 

 

作用2:作用在目錄上時,使一個目錄下的新建的文件繼承目錄的所屬組

 

 

 

 

 

 

 

3.  sticky

作用:作用於目錄上,此目錄的文件只能被所有者刪除

sticky權限位 位於其他的執行權限位上,如果一個文件具有sticky權限,則其他的執行位為t,目錄表現為綠色背景

如:ll -d /tmp
    drwxrwxrwt. 17 root root 4096 Apr  4 10:02 /tmp

給dir目錄添加sticky權限

    chmod o+t dir

    chmod 1777 dir                sticky數字法表示為1

 

 

 

 

 

 ==================================

 

 

 

 

 

 

 

參考:

https://blog.csdn.net/guozan523/article/details/4517790

https://blog.csdn.net/weixin_42711549/article/details/81156370

 


免責聲明!

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



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