首先簡單介紹一下文件的屬性:
使用ls -l 長列出
-rw-r–r–. 1 root root 1302 Jul 25 10:23 group
文件類型|owner權限group權限other權限|硬鏈接數|owner|group|文件大小(bytes)|mtime|文件名
文件類型:
– 普通文件
d 目錄文件
l 連接文件
b 塊設備文件
c 字符設備文件
p 管道文件
s 數據接口文件
-
普通文件(regular file ): 就是一般我們在進行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個字符為 [ – ],例如 [-rwxrwxrwx ]。另外,依照文件的內容,又大略可以分為:
- 純文本檔(ASCII):這是Linux系統中最多的一種文件類型, 稱為純文本檔是因為內容為我們人類可以直接讀到的數據,例如數字、字母等等。 幾乎只要我們可以用來做為設定的文件都屬于這一種文件類型。 舉例來說,你可以下達『 cat ~/.bashrc 』就可以看到該文件的內容。 (cat 是將一個文件內容讀出來的指令)
- 二進制文件(binary):,我們的系統其實僅認識且可以執行二進制文件(binary file) 在Linux當中的可執行文件(scripts, 文字型批處理文件不算)就是這種格式的 舉例來說,我們經常使用的 cat 命令就是一個binary file。
- 數據格式文件(data): 有些程序在運作的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件 (data file)。舉例來說,我們的Linux在使用者登入時,都會將登錄的數據記錄在 /var/log/wtmp那個文件內,該文件是一個data file,他能夠透過last這個指令讀出來! 但是使用cat時,會讀出亂碼 因為它是屬于一種特殊格式的文件。
- 目錄(directory): 就是目錄 第一個屬性為 [ d ],例如 [drwxrwxrwx]。
- 連接文件(link): 就是類似Windows系統底下的快捷方式! 第一個屬性為 [ l ](英文L的小寫),例如 [lrwxrwxrwx] ;
-
設備與裝置文件(device): 與系統周邊及儲存等相關的一些文件, 通常都集中在/dev這個目錄之下!通常又分為兩種:
- 區塊(block)設備檔 :就是一些儲存數據, 以提供系統隨機存取的接口設備,舉例來說,硬盤與軟盤等就是! 你可以隨機的在硬盤的不同區塊讀寫,這種裝置就是成組設備!你可以自行查一下/dev/sda看看, 會發現第一個屬性為[ b ]!
- 字符(character)設備文件:亦即是一些串行端口的接口設備, 例如鍵盤、鼠標等等!這些設備的特色就是『一次性讀取』的,不能夠截斷輸出。 舉例來說,你不可能讓鼠標『跳到』另一個畫面,而是『滑動』到另一個地方??!第一個屬性為 [ c ]。
- 數據接口文件(sockets): 既然被稱為數據接口文件, 想當然,這種類型的文件通常被用在網絡上的數據承接了。我們可以啟動一個程序來監聽客戶端的要求, 而客戶端就可以透過這個socket來進行數據的溝通了。第一個屬性為 [ s ], 最常在/var/run這個目錄中看到這種文件類型了。
- 數據輸送文件(FIFO, pipe): FIFO也是一種特殊的文件類型,他主要的目的在解決多個程序同時存取一個文件所造成的錯誤問題。 FIFO是first-in-first-out的縮寫。第一個屬性為[p] 。
Linux 文件的基本屬性就有九個,分別是 owner/group/others 組別的 read/write/execute 屬性,
-rwxrwxrwx 這9個屬性中3個位一組,其中可以使用數字來表示各個屬性。
r 4
w 2
x 1
八進制數字
— 0
–x 1
-w- 2
-wx 3
r– 4
r-x 5
rw- 6
rwx 7
這里我們簡單介紹一下,使用bc計算器進行數值進制間的轉換:
下面我們介紹文件的屬主和屬組的修改。
文件的屬性操作:
chown 設置文件的所有者。
chown : change owner
owner.group
owner:group
以上只有root才能修改文件的所有人
:group或 .group 文件的owner也可以使用chown修改文件的所屬組(owner必須屬于目標組)
-R 遞歸
–reference sourcefile tarfile
下面將house的屬主改為liubei,屬組改為shuguo。
接著我們使用chown .group filename和chgrp group filename 修改文件的屬組。
接著我們加上 -R ,可以將目錄下所有文件一并修改,可以看到owner:liubei,group:shuguo 變成owner:root,group:root,如下圖。
chgrp 設置文件的所有組。
chgrp : change group
文件的owner可以修改文件的所屬組(owner必須屬于目標組)
-R 遞歸
查看house文件夾的下文件屬組為root,如下。
然后遞歸修改屬組:
對于任何一個文件擁有權限才能進行操作:
普通文件
r: 可以讀取文件的內容
cat less more nano vim 執行腳本
w: 可以修改文件的內容
nano vim > >> tee gedit
x: 可以執行該文件
執行腳本
目錄文件
r: 用戶可以列出目錄下有哪些文件(不能查看文件的詳細信息)
w: 只有w無意義。
x: 用戶可以進入該目錄(如果知道文件名,且有相對應的文件權限 ,可以執行對應的操作)
rx: 用戶可以進入目錄,且可以長列出。
rw:等于只有r
wx: 能進入,能創建能刪除,不能列出。故用戶能否刪除文件與文件自身權限無關。
rwx: 全部權限。
—:null
下面我們介紹權限的判斷順序,首先列一條判斷準則:
先判斷是否是文件的所有人,如果是,則執行所屬人的權限后結束,如果不是所有人,則判斷是否所屬組(可以是主組也可以是輔助組),如果是,則執行所屬組的權限后結束,如果不是則執行其他人的權限后結束。
下面創建一個文件house夾,owner:root,group:root,通過chmod o= house 此時文件的基本屬性:drwxrwx—,此時我們切換到用戶:su – liubei,試著進入house,權限被拒絕(Permission denied),這是因為我們既不是屬主,也不再root組里,而且other權限是0(—)。
下面我們回到root下,將house的屬主和屬組均進行修改,分別改為owner:liubei ,group:shuguo,然后我們su – liubei 切換到用戶劉備下,發現就能進去,這是因為owner:liubei擁有rwx權限,接著su – guanyu 切換到用戶關羽下,此時關羽也能進入,進行rwx操作,接著su – caocao切換到用戶:caocao下,此時連house目錄也進不去,這是因為用戶:caocao既不是屬主,也不在屬組,而other權限:—,所以曹操進不去。
首先我們看下shuguo組的成員:
現在屬主劉備可以在house中創建、刪除、查看文件,屬組成員關羽、張飛,則可以進入和查看文件。
現在我們回到root下,將屬主(劉備)的權限改為 — ,再切換的用戶劉備下,此時雖然劉備在蜀國組找中,但是由于owner優先,所以無法訪問house。
現在我們已經了解到文件屬主和屬組的修改,下面介紹文件屬性修改及其修改工具chmod:
chmod :它的執行可以修改文件的權限和文件的屬性。注意:只有所屬人和root可以更改文件的權限。
方式一:字符方式
人物 動作 行為
ugoa +x= rwx
u owner
g group
o other
a ugo
chmod ugo+rwx
a=rwx
a=
u=….,g=…,o=…
X 當文件本身沒有x權限時,則跳過,一般用于批量修改多個文件、目錄的權限時,自動跳過沒有執行權限的文件。
rwxrw-r–
111,110,100
764
r:100:4
w:010:2
x:001:1
新建文件和目錄的默認權限:
umask值 可以用來保留在創建文件權限
新建FILE權限: 666-umask
如果所得結果某位存在執行(奇數)權限,則將其權限+1
新建DIR權限: 777-umask
非特權用戶umask是 002
root的umask 是 022
umask: 查看
umask #: 設定
umask 002
umask –S 模式方式顯示
umask –p 輸出可被調用
我們平時創建一個文件,在root用戶下,目錄文件默認屬性rwxr-xr-x(755),普通文件rw-r–r–(644),普通用戶下,目錄文件默認屬性rwxrwxr-x(775),普通文件默認屬性rw-rw-r–(664),原因就是umask的默認值。
普通用戶:umask 002
目錄文件 普通文件
最大權限 777 666
umask 002 002
默認權限 775 664
root用戶:umask 022
目錄文件 普通文件
最大權限 777 666
umask 022 022
默認權限 755 644
當我們需要大批量創建文件,但是現有文件權限已不能滿足需要,此時我們需要設置umask的默認值。
用戶設置: ~/.bashrc 對當前用戶生效。
全局設置: /etc/bashrc 對所有用戶生效。
對象 目錄文件 普通文件
777 rwxrwxrwx 666 rw-rw-rw-
021 —-w—x 021 —-w—x
756 rwxr-xrw- 646 rw-r–rw-
當umask中全部是偶數時,可以直接減,當umask中包含奇數時,對于目錄直接減,對于文件,在奇數所在的位減完后加一。
接下來我們介紹可執行文件的SUID,SGID,以及目錄上的SGID,首先看下/etc/shadow文件,這個文件是用來存儲用戶的賬戶與密碼等機密信息,默認情況沒有權限的,除了root,其他用戶沒有權限去訪問。
既然其他用戶連查看的權利都沒有,那么我們平時修改密碼的時候怎么完成對此文件的寫操作。是的,就是和SUID有關系。先看下 /bin/passwd :
SUID:當對一個可執行的二進制文件作用了SUID權限之后,任何擁有執行該文件權限的人,在執行的過程時都臨時擁有該文件所屬人的權限。就是因為這個,所以我們才有訪問/etc/shadow的權利。
接著介紹SGID:
SGID:當對一個可執行的二進制文件作用了SGID權限之后,任何擁有執行該文件權限的人,在執行的過程時都臨時擁有該文件所屬組的權限。
現在我們將/bin/cat 考到/app目錄下,然后在屬組上加上SGID,然后在創建文件file ,屬主和屬組均為:liubei ,其他人無任何權限。所以關羽通過cat想要偷看不行,但是通過/app/cat則可以。
SGID:當對一個目錄作用了SGID權限之后,任何對該目錄有wx權限的用戶在該目錄下創建的文件及目錄的所有屬均為該目錄的所有組。
STICKY:當對一個目錄作用了sticky之后(只限制組用戶,目錄的owner不受影響),該目錄下的文件僅其所屬人才能刪除。
首先以對/app/house目錄作用sticky,屬組設置為:shuguo,然后創建文件file,屬主:guanyu,切換到用戶:zhangfei,試著去刪除file,提示不能。
以用戶:caocao 試著去刪除file,Operation not permitted,雖然擁有rwx權限,這就是sticky在搞事情。
原創文章,作者:007,如若轉載,請注明出處:http://www.www58058.com/82750