linux下面權限的含義以及修改


linux中的權限

前言

最近使用ansible搭建了mongo的replica set。發現很多次的失敗都是文件權限不對造成的。那么就總結下吧。

數字權限

數字權限,我們常見的是三位的數字表示的權限,當然四位的我們也難免會遇到,接下我們看下他們直接的區別。

三位數字權限

linux中的文件權限分為讀、寫、執行.對應的字母就是r、w、x.

讀(r)

Read對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限。

寫(w)

Write對文件而言,具有修改文件內容的權限;對於目錄來說,具有刪除移動目錄內文件的權限。

執行(x)

Execute對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限。

無權限(-)

-表示不具有該項選項

linux下的權限粒度有 擁有者群組其他組三種。每個文件都可以針對這三個粒度,設置不同的(r,w,x)讀寫執行權限。通常情況下,一個文件只能歸屬於一個用戶和組, 如果其它的用戶想有這個文件的權限,則可以將該用戶加入具備權限的群組,一個用戶可以同時歸屬於多個組。

Linux上通常使用chmod命令對文件的權限進行設置和更改。

我們規定數字4、2、1表示讀、寫、執行的權限。即r=4,w=2,x=1。

栗如:

rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 +1 = 5

若要同時設置 rwx (可讀寫運行) 權限則將該權限位 設置 為 4 + 2 + 1 = 7

若要同時設置 rw- (可讀寫不可運行)權限則將該權限位 設置 為 4 + 2 = 6

若要同時設置 r-x (可讀可運行不可寫)權限則將該權限位 設置 為 4 +1 = 5

三位數字權限的轉換

讀,寫,執行對應的權限二進制表示為

r-- = 100
-w- = 010
--x = 001
--- = 000

將二進制轉換成十進制就是

r-- = 100 4
-w- = 010 2
--x = 001 1
--- = 000 0

rwx 權限就是 4 + 2 + 1 = 7  
rw- 權限就是 4 + 2 = 6 
...
如何設置權限

每個文件都有擁有者群組其他組三種權限的粒度。我們在設置權限的時候也是針對這幾個粒度進行配置的。即我們可以使用三個數字來配置這三個權限粒度的權限。

chmod file...

其中
a,b,c各為一個數字,分別代表User、Group、及Other的權限。
相當於簡化版的
chmod u=權限,g=權限,o=權限 file...
而此處的權限將用8進制的數字來表示User、Group、及Other的讀、寫、執行權限

栗子:

設置所有人可以讀寫及執行

chmod 777 file  (等價於  chmod u=rwx,g=rwx,o=rwx file 或  chmod a=rwx file)

設置擁有者可讀寫,其他人不可讀寫執行

chmod 600 file (等價於  chmod u=rw,g=---,o=--- file 或 chmod u=rw,go-rwx file )

一些常見的權限

-rw------- (600)      只有擁有者有讀寫權限。
-rw-r--r-- (644)      只有擁有者有讀寫權限;而屬組用戶和其他用戶只有讀權限。
-rwx------ (700)     只有擁有者有讀、寫、執行權限。
-rwxr-xr-x (755)    擁有者有讀、寫、執行權限;而屬組用戶和其他用戶只有讀、執行權限。
-rwx--x--x (711)    擁有者有讀、寫、執行權限;而屬組用戶和其他用戶只有執行權限。
-rw-rw-rw- (666)   所有用戶都有文件讀、寫權限。
-rwxrwxrwx (777)  所有用戶都有讀、寫、執行權限
最高位的含義

關於第一位最高位的解釋: 上面我們說到了權限表示中后九位的含義,剩下的第一位代表的是文件的類型,類型可以是下面幾個中的一個:

d代表的是目錄(directroy)
-代表的是文件(regular file)
s代表的是套字文件(socket)
p代表的管道文件(pipe)或命名管道文件(named pipe)
l代表的是符號鏈接文件(symbolic link)
b代表的是該文件是面向塊的設備文件(block-oriented device file)

四位數字權限

linux除了設置正常的讀寫操作權限外,還有關於一類設置也是涉及到權限,叫做Linxu附加權限。包括 SET位權限(suid,sgid)和粘滯位權限(sticky)。

SUID

讓本來沒有相應權限的用戶運行這個程序時,可以訪問他沒有權限訪問的資源。

1、SUID權限僅對二進制程序有效。
2、執行者對於該程序需要具有x的可執行權限。
3、本權限僅在執行該程序的過程中有效。
4、執行者將具有該程序擁有者的權限。

栗子:

$ ls -la /bin/su
-rwsr-xr-x 1 root root 63568 7月  16 06:52 /bin/su

對於su這個命令,擁有者是root,但是實際上是無論任何人,都可以執行,並且擁有的執行權限和root一樣。因為這個設置了SUID,並且設置了擁有者有可執行權限。從上面可以看到,不管是文件擁有者,文件擁有者所屬組,還是其他人,都是具有x權限的,所以都可以執行該程序,執行之后就將具有該程序擁有者的權限,即root的權限,這也就是su命令能夠切換用戶權限的實現原理。

SGID

和SUID類似,不過SGID是針對所屬用戶組權限的。

1、SGID對二進制程序有用;
2、程序執行者對於該程序來說需具備x的權限;
3、SGID主要用在目錄上;

SET位權限表示形式:

如果一個文件被設置了suid或sgid位,會分別表現在所有者或同組用戶的權限的可執行位上;如果文件設置了suid還設置了x(執行)位,則相應的執行位表示為s(小寫)。但是,如果沒有設置x位,它將表示為S(大寫)。如:

1、-rwsr-xr-x 表示設置了suid,且擁有者有可執行權限
2、-rwSr--r-- 表示suid被設置,但擁有者沒有可執行權限
3、-rwxr-sr-x 表示sgid被設置,且群組用戶有可執行權限
4、-rw-r-Sr-- 表示sgid被設置,但群組用戶沒有可執行權限

設置方式:

SET位權限可以可以使用chmod命令設置,栗子:

chmod u+s filename 	設置suid位
chmod u-s filename 	去掉suid設置
chmod g+s filename 	設置sgid位
chmod g-s filename 	去掉sgid設置
SBIT

目前只針對目錄有效,對於目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅有自己與 root才有權力刪除。

栗子:

最具有代表的就是/tmp目錄,任何人都可以在/tmp內增加、修改文件(因為權限全是rwx),但僅有該文件/目錄建立者與 root能夠刪除自己的目錄或文件

注:SBIT對文件不起作用。

粘滯位權限表示形式:

一個文件或目錄被設置了粘滯位權限,會表現在其他組用戶的權限的可執行位上。如果文件設置了sticky還設置了x(執行)位,其他組用戶的權限的可執行位為t(小寫)。但是,如果沒有設置x位,它將表示為T(大寫)。如:

1、-rwsr-xr-t 表示設置了粘滯位且其他用戶組有可執行權限
2、-rwSr--r-T 表示設置了粘滯位但其他用戶組沒有可執行權限
四位數字權限的轉換

同樣使用二進制表示下:

SGT分別表示SUID權限、SGID權限、和 粘滯位權限

S-- = 100
-G- = 010
--T = 001
--- = 000

和前面的rwx的轉換一樣,轉換成是十進制就是

S-- = 100 4
-G- = 010 2
--T = 001 1
--- = 000 0
  • suid 位代表數字是 4
  • sgid 位代表數字是 2
  • sticky 位代表數字是 1
如何設置權限

使用chmod進行權限的設置

chmod <abcd> file

栗子:

使用一個栗子對比下吧

設置 netlogin 的權限為擁有者可讀寫執行,群組和其他權限為可讀可執行

chmod 755 netlogin

設置 netlogin 的權限為擁有者可讀寫執行,群組和其他權限為可讀可執行,並且設置SUID

chmod 4755 netlogin

chmod 4755與chmod 755對比多了附加權限值4,這個4表示其他用戶執行文件時,具有與所有者同樣的權限(設置了SUID)。

為什么要設置4755 而不是 755?

假設netlogin是root用戶創建的一個上網認證程序,如果其他用戶要上網也要用到這個程序,那就需要root用戶運行chmod 755 netlogin命令使其他用戶也能運行netlogin。但假如netlogin執行時需要訪問一些只有root用戶才有權訪問的文件,那么其他用戶執行netlogin時可能因為權限不夠還是不能上網。這種情況下,就可以用 chmod 4755 netlogin 設置其他用戶在執行netlogin也有root用戶的權限,從而順利上網。

如何改變文件屬性

我們先介紹幾個常用於群組、擁有者、各種身份的權限之修改的指令,如下所示:

chgrp :改變文件所屬群組
chown :改變文件擁有者
chmod :改變文件的權限, SUID, SGID, SBIT等等的特性

改變所屬群組, chgrp

改變一個文件的群組真是很簡單的,直接以chgrp來改變即可。chgrp的拼寫也是有點意思的,這個指令就是change group的縮寫。

不過需要注意的是,我們要改變的用戶組,必須在在/etc/group文件內存在才行。

假設你是以root的身份登入Linux系統的,那么在你的家目錄內有一個install.log的文件, 如何將該文件的群組改變一下呢?假設你已經知道在/etc/group里面已經存在一個名為users的群組, 但是testing這個群組名字就不存在/etc/group當中了,此時改變群組成為users與testing分別會有什么現象發生呢?

發現了嗎?文件的群組被改成users了,但是要改成testing的時候, 就會發生錯誤

改變文件擁有者, chown

chown的拼寫也是change owner的拼寫。同樣用戶必須是已經存在系統中的賬號,也就是在/etc/passwd 這個文件中有紀錄的用戶名稱才能改變。

chown同時也可以修改所屬群組

同時chown也可以簡單的修改用戶的組

chown .sshd install.log

其中的sshd代表的就是用戶的群組

改變權限, chmod

文章開頭已經描述的很清楚了

參考

【第六章、Linux 的文件權限與目錄配置】http://cn.linux.vbird.org/linux_basic/0210filepermission.php
【Linux權限詳解(chmod、600、644、666、700、711、755、777、4755、6755、7755)】https://blog.csdn.net/u013197629/article/details/73608613
【深入Linux文件權限 SUID/SGID/SBIT】https://blog.csdn.net/imkelt/article/details/53054309?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
【第六章、Linux 的文件權限與目錄配置】http://cn.linux.vbird.org/linux_basic/0210filepermission.php#filepermission_ch


免責聲明!

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



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