Linux文件和目錄權限詳細解析

文件權限

1.權限對於文件的解析

  • 讀(r): 能夠經過文件查看工具讀取文件內容node

  • 寫(w): 能夠修改文件的內容linux

  • 執行(x): 能夠把此文件提請內核啓動爲一個進程

2.權限對於目錄的解析

  • 讀(r): 讀取目錄列表的權限,能夠經過ls查詢此目錄下的文件名列表面試

  • 寫(w): 能夠目錄內刪除、更新、新建文件或目錄安全

  • 執行(x): 可使用ls -l查看此目錄中文件元數據(須配合r),能夠cd進入此目錄

  注意:要開發目錄給任何人瀏覽時,應該至少要給予r和x權限,w不能夠隨便給bash

新建文件和目錄的默認權限

1.umask的詳解

  • 在linux操做系統上,文件系統預設的默認權限是666;而目錄系統預設的默認權限是777
  • 普通用戶的umask值是002,root用戶的umask是022
  • 計算普通用戶的默認文件權限:664 默認目錄權限:775
  • 計算root用戶的默認文件權限:644 默認目錄權限:755
  • 計算方法是否是簡單的直接相減,而是看權限位「補碼」
  • 全部權限二進制的1:表明有這個權限
  • umask二進制1:表明要去掉這個權限,無論你原來有沒有權限,你最終必定沒有這個權限。
  • umask二進制的0:表明我不關心對應位的權限,你原來有權限就有權限,沒有就沒有, 我不影響你。
  • 對於目錄,直接使用777-umask便可,就獲得了最終結果。
  • 對於文件,先使用666-umask。若是對應位上爲偶數:最終權限就是這個偶數值。若是上面的對應爲上有奇數,就對應位+1。
  • 全局設置: /etc/bashrc 用戶設置:~/.bashrc

文件和目錄特殊權限

  在複雜多變的生產環境中,單純設置文件的rwx權限沒法知足咱們對安全和靈活性的需求,所以便有了SUID、SGID與SBIT的特殊權限位。這是一種對文件權限進行設置的特殊功能,能夠與通常權限同時使用,以彌補通常權限不能實現的功能。下面具體解釋這3個特殊權限位的功能以及用法。服務器

1.SUID

  有一個現象,有些普通用戶是能夠經過passwd命令進行修改本身密碼的,進而間接就修改了/etc/shadow的文件。仔細查看這個文件就會發現它的默認權限是000,也就是說除了root管理員之外,全部用戶都沒有查看或編輯該文件的權限。在這裏,普通用戶實際上是運用了SUID權限。
  查看passwd命令屬性時發現全部者的權限由rwx變成了rws,其中x改變成s就意味着該文件被賦予了SUID權限。ide

[root@linuxprobe ~]# ls -l /etc/shadow
----------. 1 root root 1004 Jan 3 06:23 /etc/shadow
[root@linuxprobe ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2017 /bin/passwd

結論: 工具

  • SUID通常都做用於二進制文件上,SUID設置在目錄上無心義。
  • 當一個普通用戶在執行設置了SUID的可執行程序時,那麼它就繼承了原有所屬者的權限。
  • 用法:chmod u+s FILE... chmod u-s FILE...
  • 特殊權限位八進制位4

2.SGID

可執行文件上的SGID權限

  SGID的第一種功能是參考SUID而設計的,不一樣點在於執行程序的用戶獲取的再也不是文件全部者的臨時權限,而是獲取到文件所屬組的權限ui

目錄上的SGID權限

  每一個文件都有其歸屬的全部者和所屬組,當建立或傳送一個文件後,這個文件就會自動歸屬於執行這個操做的用戶(即該用戶是文件的全部者)。若是如今須要在一個部門內設置共享目錄,讓部門內的全部人員都可以讀取目錄中的內容,那麼就能夠建立部門共享目錄後,在該目錄上設置SGID特殊權限位。這樣,部門內的任何人員在裏面建立的任何文件都會歸屬於該目錄的所屬組,而再也不是本身的基本用戶組。此時,咱們用到的就是SGID的第二個功能,即在某個目錄中建立的文件自動繼承該目錄的用戶組(只能夠對目錄進行設置)。操作系統

[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# mkdir testdir
[root@linuxprobe tmp]# ls -ald testdir/
drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/
[root@linuxprobe tmp]# chmod -Rf 777 testdir/
[root@linuxprobe tmp]# chmod -Rf g+s testdir/
[root@linuxprobe tmp]# ls -ald testdir/
drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/

  在使用上述命令設置好目錄的777權限(確保普通用戶能夠向其中寫入文件),併爲該目錄設置了SGID特殊權限位後,就能夠切換至一個普通用戶,而後嘗試在該目錄中建立文件,並查看新建立的文件是否會繼承新建立的文件所在的目錄的所屬組名稱:

[root@linuxprobe tmp]# su - linuxprobe
Last login: Wed Feb 11 11:49:16 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ cd /tmp/testdir/
[linuxprobe@linuxprobe testdir]$ echo "linuxprobe.com" > test
[linuxprobe@linuxprobe testdir]$ ls -al test
-rw-rw-r--. 1 linuxprobe root 15 Feb 11 11:50 test

結論:

  • 默認狀況下,用戶建立文件時,其屬組爲此用戶所屬的主組。一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中建立的文件所屬的組爲此目錄的屬組
  • 一般用於建立一個協做目錄
  • chmod g+s FILE... chmod g-s FILE...
  • chmod g+s DIR... chmod g-s DIR...
  • 特殊權限位8進制數爲2

3.Sticky Bit

  大學裏的不少老師都要求學生將做業上傳到服務器的特定共享目錄中,但老是有幾個「破壞分子」喜歡刪除其餘同窗的做業,這時就要設置SBIT(Sticky Bit)特殊權限位了(也能夠稱之爲特殊權限位之粘滯位)。SBIT特殊權限位可確保用戶只能刪除本身的文件,而不能刪除其餘用戶的文件。換句話說,當對某個目錄設置了SBIT粘滯位權限後,那麼該目錄中的文件就只能被其全部者執行刪除操做了。

  當目錄被設置SBIT特殊權限位後,文件的其餘人權限部分的x執行權限就會被替換成t或者T,本來有x執行權限則會寫成t,本來沒有x執行權限則會被寫成T。

  文件可否被刪除並不取決於自身的權限,而是看其所在目錄是否有寫入權限,若是用戶對目錄有讀寫執行權限,那麼任何人就能夠刪除目錄中的文件了,哪怕文件自己沒有寫權限和執權限。原理涉及到inode表相關內容,能夠打開傳送門瞭解。

結論:

  • Stricky Bit 只做用於目錄
  • 在目錄設置Sticky 位,只有文件的全部者或root能夠刪除該文件
  • 用法:chmod -R o+t DIR ; chmod -R o-t DIR
  • 特殊權限位爲1

面試題

問:cp /etc/fstab /data/dir 命令須要文件和目錄最少哪些權限

  1. cp 命令須要x權限(/usr/bin/cp)
  2. etc目錄須要x權限
  3. fstab文件須要r權限
  4. data目錄須要x權限
  5. dir目錄選用xw權限(新增目錄結構列表,須要寫權限)

問:查找linux系統內的suid文件,sgid文件,stricky bit文件

suid文件  find / -type f -perm -4000 -ls
sgid文件  find / -type d  -perm  -2000 -ls
          find / -type f  -perm  -2000 -ls
stricky bit目錄 find / -type d  -perm  -1000 -ls
相關文章
相關標籤/搜索