tft每日頭條

 > 科技

 > linux文件權限信息詳解

linux文件權限信息詳解

科技 更新时间:2024-09-03 02:19:37

衆所周知,Linux之所以更加安全,其根源在于對文件權限有着非常嚴格的控制。本文将簡單介紹一下Linux的文件權限及其相關操作。

一、相關概念

1.1 權限簡介

執行“ls -l”命令後就可以查看某一個目錄文件的目錄項以及對應的權限,如下圖所示:

linux文件權限信息詳解(帶你了解Linux的文件權限)1

示例内容

對于上圖中的結果而言,每列均代表不同的含義。

(1)第一列由10個字符組成,首個字符用于表示該文件的類型。對于該字符而言,每個字符對應的含義如下所示:

第一個字符

目錄

d

目錄

-

普通文件

l

鍊接文件

b

塊文件

c

字符文件

s

socket文件

p

管道文件

接下來的屬性中,每3個字符為一組,每組分别代表不同的含義。其中,第2~4個字符代表該文件所有者(user)的權限,第5~7個字符代表該文件所屬組(group)的權限,第8~10個字符代表其他用戶(others)能夠擁有的權限。

對于每組而言,都由rwx這三個字符組合。其中,r表示讀權限,位于首個字符;w表示寫權限,位于第二個字符;x表示執行權限,位于最後一個字符。若無對應的權限,則對應位置處會用 " - " 代替。

(2)第二列表示"連接數”。若文件為非目錄文件,則連接數為1。若該文件為目錄文件,則其連接數是該目錄中所有直接子目錄的總個數 2,假如目錄A中包含目錄B和C,則目錄A的連接數為4。

(3)第三列表示該文件所屬的用戶

(4)第四列代表該文件所屬的用戶組。

(5)第五列表示該文件的大小。

(6)第六列到第八列表示文件的創建時間或最近修改時間,每列依次表示為:月份、日期和時刻。

(7)第九列為文件名。

1.2 隐藏屬性

查看文件的隐藏屬性需要使用lsattr命令,默認情況下,文件的隐藏屬性不會進行設置。下面給出對應的例子:

linux文件權限信息詳解(帶你了解Linux的文件權限)2

從上述結果中可知,第一列是13個小短橫,其中每一個小橫線都是一個屬性,如果當前位置上設置了該屬性就會顯示相對應的字符。

如果要設置文件的隐藏屬性,需要使用chattr命令。這裡介紹幾個常用的隐藏屬性,第一種就是 a 屬性。擁有這種屬性的文件隻能在尾部增加數據而不能被删除。比如下面的例子:

linux文件權限信息詳解(帶你了解Linux的文件權限)3

還有一種比較常用的屬性,也就是 i 屬性。當一個文件被設置了i屬性後,将無法進行寫入、重命名、删除等操作,即便該用戶是root用戶也依然不會被允許。這種屬性常用于系統或者關鍵服務中相關配置文件的設置,可以在一定程度上提升系統的安全性。

參數

作用

i

禁止對文件進行修改;如果設置該屬性的文件是目錄,則僅能修改其子文件的内容,而不能新建或删除文件

a

僅允許追加内容,而無法覆蓋或删除對應的内容

S

文件内容變更後會立即同步到硬盤(Sync)

s

徹底從硬盤中删除,不可進行恢複(将原文件所在地硬盤區域用0進行填充)

A

不能再修改該文件或目錄的最後訪問時間

b

不能再修改該文件或目錄的最後存取時間

d

使用dump命令備份時忽略該文本或目錄

D

檢查壓縮文件中的錯誤

如果需要了解更多的隐藏屬性,可以使用man chattr來查詢。

1.3 默認權限和遮罩值

所有的文件在創建時都被系統分配默認的權限,下面給出一個例子。

首先使用root用戶登錄系統,并執行如下命令:

touch root_file1 root_file2 mkdir root_dir1 root_dir2

接着使用如下命令來查看創建文件的默認權限:

ls -ld root_*

執行結果如下所示:

linux文件權限信息詳解(帶你了解Linux的文件權限)4

從上面可以得知,創建的root_file1、root_file2文件的權限都是644;而創建的root_dir1、root_dir2目錄的權限都是755。此時好像可以得出一個結論:文件的權限默認是644,目錄的默認權限是755。

為了驗證這個結論是否正确,我們需要切換另一個普通用戶再次進行嘗試,執行的命令如下所示:

touch u_file1 u_file2 mkdir u_dir1 u_dir2

接着使用如下命令來查看創建文件的默認權限:

ls -ld u_*

執行結果如下所示:

linux文件權限信息詳解(帶你了解Linux的文件權限)5

這裡創建的u1_file1、u1_file2文件的權限都是664;而創建的u1_dir1、u1_dir2目錄的權限都是775。

此時就會産生一個疑問,這個默認權限是從何而來的?為何root用戶和普通用戶的默認權限會有所不同?

此時就需要引入umask概念,中文翻譯為:遮罩。在Linux下,目錄創建後的默認權限的值是“被umask遮罩777後的權限”;而對于文件而言,其創建後的默認權限是“umask遮罩666後的權限”。系統在/etc/profile文件中,設置了不同用戶的遮罩值。因此,我們使用cat命令查看/etc/profile如下所示:

linux文件權限信息詳解(帶你了解Linux的文件權限)6

從上面可以看出,UID大于199的用戶設置的umask值為002,相反,小于199的用戶則設置為022。也就是說,umask值對于root用戶來說是022,對于普通用戶則是002。不同用戶設置不同的遮罩值,這導緻root用戶和普通用戶創建出來的文件和目錄默認權限也有所不同。

那麼如何使用遮罩計算權限呢?

777可以表示為:rwxrwxrwx,如果遮罩值是022,用字符串表示為:----w--w-,那麼前者第五位和第八位的w被遮罩掉,權限變為rwxr-xr-x,用數字表示就是755。如果遮罩值是002,用字符串表示為:-------w-,那麼第八位的w被遮罩掉,權限變為rwxrwxr-x,用數字表示就是775。

666用字符串表示為:rw-Rw-rw-,如果遮罩值是022,用字符串表示為:----w--w-,那麼前者第五位和第八位的w被遮罩掉,權限變為rw-r--r--,用數字表示就是644。如果遮罩值是002,用字符串表示為:-------w-,那麼第八位的w被遮罩掉,權限變為rw-rw-r--,用數字表示就是664。

二、相關操作

對于文件的權限的操作有三種,分别是:改變權限改變文件擁有者改變文件擁有組

2.1 改變文件權限

改變文件權限對應命令為:chmod。在Linux下,每個文件都會定義對應的文件創建者(user)、擁有組(group)以及其他用戶(others)的權限,用字母u(user)、g(group)、o(other)來分别代表擁有者、擁有組和其他人,而對應的具體權限則使用rwx的組合來定義。如果是增加權限,則使用 号;如果是删除權限,則使用-号;如果是設置為某個權限,則使用=号。

如果要給用戶組或其他人添加或删除相關權限,隻需要将上面的u相應地更換成g或o即可。但是正如大家看到的,這種方式在同一時刻隻能給文件擁有者、文件擁有組或是其他所有人設置權限,如果要想同時為所有用戶設置權限就需要使用數字表示法。需要說明的是,r為4,w為2,x為1。如果權限是rwx,則用數字7表示;如果權限是r-x,則用數字5表示。假設想設置一個文件的權限是:擁有者的權限是讀、寫、執行(rwx),擁有組的權限是讀、執行(r-x),其他人的權限是隻讀(r--),那麼可以使用命令chmod 754 somefile來進行設置。

下面給出對應的例子。

[root@localhost src]# ll 總用量 0 -rw-r--r--. 1 root root 0 5月 20 17:54 test.txt # 為test.txt所屬的用戶增加執行權限 [root@localhost src]# chmod u x test.txt [root@localhost src]# ll 總用量 0 -rwxr--r--. 1 root root 0 5月 20 17:54 test.txt # 為test.txt所屬用戶組增加寫入權限 [root@localhost src]# chmod g w test.txt [root@localhost src]# ll 總用量 0 -rwxrw-r--. 1 root root 0 5月 20 17:54 test.txt # 為test.txt文件設置權限:776表示所屬用戶和所屬用戶組有讀取、寫入和執行權限,而其他用戶隻有讀取和寫入權限 [root@localhost src]# chmod 776 test.txt [root@localhost src]# ll 總用量 0 -rwxrwxrw-. 1 root root 0 5月 20 17:54 test.txt

此外,如果需要修改的對象是一個目錄而非文件,并且需要對該目錄下所有的文件、子目錄、以及子目錄下所有的文件和目錄都進權限設置,此時需要使用-R參數,也就是chmod -R 754 somedir。

2.2 改變文件擁有者

更改文件擁有者的命令為:chown,該命令也具備更改文件擁有組的功能。默認情況下,當前登錄系統的用戶即為新創建文件或目錄的擁有者。下面給出對應的示例:

[root@localhost src]# ll 總用量 0 -rwxrwxrw-. 1 root root 0 5月 20 17:54 test.txt # 将test.txt的文件擁有者修改為user1 [root@localhost src]# chown user1:user2 test.txt [root@localhost src]# ll 總用量 0 # 此時發現文件的擁有者已經變為了user1 -rwxrwxrw-. 1 user1 user2 0 5月 20 17:54 test.txt

需要說明的一點,如果修改的對象不是一個文件而是一個目錄時,且需要對該目錄下所有的文件、子目錄以及子目錄下所有的文件和目錄都需要進行修改時,就需要使用-R參數。

2.3 改變文件擁有組

改變文件擁有者使用的命令為:chgrp,下面給出對應的例子:

[root@localhost src]# ll 總用量 0 -rwxrwxrw-. 1 user1 user2 0 5月 20 17:54 test.txt # 将test.txt的所屬組修改為user1用戶組 [root@localhost src]# chgrp user1 test.txt [root@localhost src]# ll 總用量 0 -rwxrwxrw-. 1 user1 user1 0 5月 20 17:54 test.txt

到此,關于Linux文件權限的接收就已經完畢,希望對大家有所幫助。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved