武安網(wǎng)站制作培訓總結(jié)心得體會
文件權(quán)限屬性和權(quán)限管理
本章思維導圖:
注:本章思維導圖對應的Xmid
文件和.png
文件都以傳到“資源”
文章目錄
- 文件權(quán)限屬性和權(quán)限管理
- 1. sudo提權(quán)和sudoers文件
- 1.1 sudo提權(quán)和成為root的區(qū)別
- 2. 權(quán)限
- 2.1 Linux群體
- 2.1.1 為什么要有所屬組
- 2.1.2 修改文件的所屬組、擁有者
- 2.1.2.1更改擁有者 chown
- 2.1.2.2 更改所屬組 chgrp
- 2.2 文件權(quán)限屬性
- 2.2.1 認識文件權(quán)限屬性
- 2.2.2 修改文件權(quán)限屬性 chmod
- 2.2.3 目錄的權(quán)限
- 2.2.3.1 目錄/tmp和粘滯位
- 2.2.4 權(quán)限掩碼umask
- 2.2.5 文件類型
1. sudo提權(quán)和sudoers文件
在上一篇Linux新建用戶、刪除用戶以及用戶之間的切換說到,新建用戶adduser
、刪除用戶userdel
都需要在root賬戶下進行操作,或者說需要root的權(quán)限。我們也說到,如果普通用戶想要以root的權(quán)限進行操作,那就需要提權(quán)命令sudo
下面我們就來講講sudo
提權(quán)命令
命令:
sudo 命令
功能:
sudo 允許允許的用戶以超級用戶身份執(zhí)行命令??偟膩碚f,就是允許普通用戶以root的權(quán)限執(zhí)行各種操作
現(xiàn)在,有小伙伴就有疑惑了:
既然每個普通用戶都可以進行sudo
提權(quán)操作,那每個人都可以有root
的權(quán)限,那還需要root
這個超級管理員干嘛呢?
我們可以現(xiàn)在就來試一下:
可以看到,盡管通用戶Test_1
使用了提權(quán)命令,但是并沒有得到想要的結(jié)果,這是為什么呢?
我們發(fā)現(xiàn),系統(tǒng)提示我們用戶Test_1
并不處于sudoers
文件
那么sudoers
文件又是什么呢?
-
sudoers
文件是屬于root
賬戶的一個Linux配置文件我們可以用命令
ll
打開看一下:可以看到里面只有
root
賬戶 -
可以通俗地將
sudoers
文件比作是一個白名單,只有位于白名單里面的賬戶才可以使用sudo
命令提權(quán),以root的權(quán)限執(zhí)行操作 -
而要將用戶寫入
sudoers
文件,需要root
賬戶執(zhí)行操作
到了現(xiàn)在,應該就可以解決之前的那個疑惑了——不是所有的普通用戶可以使用sudo
提權(quán),只有得到root
賬戶的信任,將這個用戶添加到sudoers
文件中,這個普通用戶才可以進行sudo
提權(quán)。因此我們也就不需要擔心普通用戶會在系統(tǒng)中搗亂了。
1.1 sudo提權(quán)和成為root的區(qū)別
可不要天真的以為sudo
提權(quán)和成為,root用root賬戶操作都是以root
的身份執(zhí)行命令就沒有什么區(qū)別。
這二者其實有著本質(zhì)的區(qū)別:
- 給你root密碼,讓你成為root——直接讓你成員超級管理員
- 將你添加到sudoers—— 相信你,給你root權(quán)限,但是這個root權(quán)限可以被回收。
2. 權(quán)限
然我們先舉幾個生活中的例子來對權(quán)限有一個更加清楚的認識:
- 在騰訊視頻、愛奇藝等軟件看VIP電影,那我們就需要VIP的權(quán)限,需成為VIP會員,否則我們就只是普通用戶只能看免費電影。
- 盡管我們有愛奇藝視頻的VIP會員,但是無論如何,我們都不可能在愛奇藝視頻里面刷C++的編程題
因此,我們可以得出以下兩個結(jié)論:
- 權(quán)限一定是用來限制人的
- 對應的操作對象一定要有對應的滿足人的需求的屬性——就像你不能在騰訊視頻里面刷C語言,因為騰訊視頻并沒有刷題這一屬性。
而將這兩個結(jié)論和Linux系統(tǒng)的文件權(quán)限聯(lián)系在一起,同樣也可以推出兩個結(jié)論:
- Linux群體(也就是“被限制的人”)更多的是一種身份,在Linux中有:擁有者
u
、所屬組g
、other這三種身份o
,具體的人一定會在未來承擔某個文件的某個身份。- Linux的操作對象也就是Linux系統(tǒng)中的文件,其屬性一般叫做文件權(quán)限屬性,有三種:可讀
r
,可寫w
,可執(zhí)行x
下面,我們就對Linux群體和文件權(quán)限屬性展開具體的討論:
2.1 Linux群體
前面說過,Linux群體更多的是一種身份——擁有者u
、所屬組g
、othero
這三種身份
- 擁有者
user
一般就是該文件的創(chuàng)建者 - 所屬組
group
——可以在Linux系統(tǒng)中創(chuàng)建一個組群,并將特定的用戶拉入,這樣這些組里面的用戶就構(gòu)成了一個所屬組。他們享有這個所屬組被賦予的權(quán)限 - other——不屬于擁有者和所屬組的用戶統(tǒng)稱為other
2.1.1 為什么要有所屬組
有些小伙伴又會有疑惑了:
擁有者和other就可以確定一個文件的所屬關系了,為什么還要一個所屬組group
呢?
我們可以來舉一個生活中的例子:
兩個開發(fā)組A、B在競爭同一個項目,一天項目的領導想要看開發(fā)組A成員張三寫的代碼,但是代碼是張三所寫,張三是這個文件的擁有者,而領導是other,如果想要讓領導(other)看到張三所擁有的文件,那么張三就需要將這個文件的權(quán)限開放給other,但這就導致了一個問題——同為other的項目組B也可以看到項目組A的代碼,這顯然不是我們想要的,所以,就需要Linux有所屬組這一個概念,張三可以通過過創(chuàng)建一個所屬組,將領導拉到組里,同時將擁有者的權(quán)限開放給所屬組,這樣就可以了
所以,Linux所屬組的存在,方便了Linux系統(tǒng)文件權(quán)限的管理,是很重要的。
2.1.2 修改文件的所屬組、擁有者
注意:
只能在root的權(quán)限下更改一個文件的擁有者、所屬組、other,無論你是不是這個文件的擁有者。
2.1.2.1更改擁有者 chown
命令:
chown new_username filename
new_username
就是新的擁有者的用戶名,filename
就是被更改的文件名
例如:
2.1.2.2 更改所屬組 chgrp
命令:
ch chgrp new_groupname filename
new_groupname
就是新的擁有者的用戶名,filename
就是被更改的文件名
例如:
更改擁有者、所屬組的同時也就在更改other,因此并沒有更改other的命令
2.2 文件權(quán)限屬性
例如,我們用命令ll
來查看一個文件的具體屬性:
現(xiàn)在,就以文件code
為例,講一下ll
所展示的這一串信息都表示了什么:
- 文件的擁有者、所屬組前面已經(jīng)介紹完畢,這里便不再贅述
- 接下來,我們來深入探討一下文件權(quán)限屬性和文件類型
2.2.1 認識文件權(quán)限屬性
例如上面的 code1
文件,代表這個文件的權(quán)限屬性的就是下面的九個字符:
那么具體的,這九個字符又都表示什么含義呢?
Linux規(guī)定:
- 將九個字符分成三組,每組三個字符。例如上面的就是
rw-
、r--
、r--
這三組- 每組字符的每個位置代表著固定的含義:第一個位置表示可寫
r
,第二個位置表示可讀w
,第三個位置表示可執(zhí)行x
- 第一組表示擁有者的權(quán)限,第二組表示所屬組權(quán)限,第三組表示other權(quán)限
例如,對于上面的權(quán)限屬性,我們可以做出如下解釋:
Linux的文件權(quán)限值的表示方法:
字符表示法:
Linux表示 | 意義 | Linux表示 | 意義 |
---|---|---|---|
- - - | 無任何權(quán)限 | r - - | 只讀 |
- - x | 僅可執(zhí)行 | r - x | 可讀可執(zhí)行 |
- w - | 只寫 | r w - | 可讀可寫 |
- w x | 可寫可執(zhí)行 | r w x | 可讀可寫可執(zhí)行 |
八進制表示法:
權(quán)限符號 | 二進制 | 八進制 |
---|---|---|
- - - | 0 0 0 | 0 |
- - x | 0 0 1 | 1 |
- w - | 0 1 0 | 2 |
- w x | 0 1 1 | 3 |
r - - | 1 0 0 | 4 |
r - x | 1 0 1 | 5 |
r w - | 1 1 0 | 6 |
r w x | 1 1 1 | 7 |
那么可讀、可寫、可執(zhí)行都表示什么呢?我們一起來看看:
可以得出結(jié)論:
可讀
r
:即可以打開文件,查看文件內(nèi)容,執(zhí)行cat
、nano
等操作可寫
w
:即可向文件寫入內(nèi)容,執(zhí)行echo
、nano
等操作可執(zhí)行
x
:對一個可執(zhí)行文件進行執(zhí)行操作。
- 注:可以執(zhí)行一個文件的條件為:
- 擁有該文件的可執(zhí)行權(quán)限
x
- 該文件必須要有可執(zhí)行的功能(必須是一個可執(zhí)行的文件)——這也就是我們前面所說的“對應的操作對象一定要有對應的滿足人的需求的屬性”
再來看一個例子:
要解決這個問題,就需要知道Linux的一個特性:
- 要判斷一個用戶的權(quán)限,首先要判斷這個用戶是哪個身份,到底是擁有者還是所屬組還是other。
- 而匹配身份的順序為 —— 擁有者 → 所屬組 → other
- 只要匹配成功,就不會再繼續(xù)匹配
因此,上面的例子中,用戶匹配到擁有者就停止匹配了,而code
文件的擁有者沒有任何權(quán)限,所以上面的讀寫操作自然就不能成功了。
最后再來看一個例子:
可見,盡管root是code
的other,但是仍可以對code
文件執(zhí)行各項操作而不受限制。
我們可以說:
權(quán)限在root賬戶下,形同虛設。權(quán)限只限制普通用戶。這也在另一方面說明了root的強大和重要性
2.2.2 修改文件權(quán)限屬性 chmod
-
既然文件的權(quán)限值有字符表示法和八進制表示法,那么修改權(quán)限的屬性也有這兩種方法。
-
只有root賬戶或者文件的擁有者才可以修改文件的權(quán)限屬性
字符表示法修改文件權(quán)限屬性:
命令:
chmod u/g/o/a +/- rwx filename
其中:
u
——擁有者userg
——所屬組groupo
——othera
——所有人+/-
——添加或刪除權(quán)限rwx
——需要添加的權(quán)限
例如:
八進制表示法修改文件權(quán)限屬性:
命令:
chmod num1num2num3 filename
num1num2num3
為3個八進制數(shù),分別代表擁有者、所屬組、other的權(quán)限
例如:
2.2.3 目錄的權(quán)限
我們前面提到,在Linux系統(tǒng)中,一切皆文件。所以我們可以說:一個目錄也是一個文件
我們先來看一個目錄的詳細屬性:
可以發(fā)現(xiàn),目錄文件和普通文件一樣,也具有rwx
可讀可寫可執(zhí)行權(quán)限,也有擁有者、所屬組和other身份。
因此,修改目錄的權(quán)限屬性也和修改文件的操作一樣,這里不再過多贅述。
那么,目錄文件的rwx
文件又分別代表著什么呢?
可執(zhí)行x
:
可以進行總結(jié):
- 目錄的可執(zhí)行
x
權(quán)限限制的是普通用戶進入目錄和在該目錄底下執(zhí)行命令的能力。- 如果沒有
x
權(quán)限,用戶就不能cd
進入目錄,就算已經(jīng)在目錄里面,也不能執(zhí)行ll
等操作。- 權(quán)限在root賬戶面前形同虛設。
可讀r
:
可以進行總結(jié):
- 目錄的可讀
r
權(quán)限限制的是用戶在該目錄底下查看目錄內(nèi)容的能力- 如果沒有可讀
r
權(quán)限,用戶就不能用ls
命令查看文件內(nèi)容
有小伙伴可能會對上面的例子有疑惑:
我連這個目錄里的內(nèi)容都不能查看了,為什么我還可以cat
查看目錄里code
文件的內(nèi)容呢?
我們必須清楚,限制文件的讀寫權(quán)限是文件的權(quán)限屬性,限制目錄的讀寫權(quán)限是目錄的權(quán)限屬性,這二者是互不影響的,因此,只要對這個文件有讀權(quán)限,那么不管對這個目錄有沒有讀權(quán)限,我們都可以查看該文件的內(nèi)容。
可寫w
:
可以進行總結(jié):
- 目錄的可寫權(quán)限
w
限制的是用戶在該目錄底下新建和刪除文件的能力- 如果用戶沒有寫權(quán)限
w
,那么用戶就不能在該目錄底下執(zhí)行touch
、mkdir
、rm
等命令
2.2.3.1 目錄/tmp和粘滯位
我們先來看一下普通用戶的家目錄屬性:
我們發(fā)現(xiàn),只有家目錄的擁有者,即這個賬戶本身擁有對這個目錄的所有權(quán)限,而其他任何人對這個目錄都沒有任何權(quán)限
那么如果要在Linux中實現(xiàn)多個用戶之間的數(shù)據(jù)傳遞和資源共享,該怎么做呢?
為了滿足這一需求,Linux有一個專門的目錄
/tmp
提供給所有用戶,進行數(shù)據(jù)傳遞和共享。
我們可以看到:
/tmp
目錄為所有用戶都開放了可讀、可寫、可執(zhí)行權(quán)限- 所有用戶都可以進入該目錄,查看該目錄的內(nèi)容,同時在該目錄底下新建文件
到了這里,有的小伙伴又有疑惑了:
既然/tmp
目錄為所有用戶都開放了寫權(quán)限,那我豈不是可以在這個目錄里隨便刪除文件,搞破壞?
我們可以嘗試一下:、
在這里插入圖片描述
可以看到,Linux系統(tǒng)的設計者考慮到了我們的問題,通過實驗可以發(fā)現(xiàn):
在/tmp目錄中,如果涉及到刪除、剪切操作,只能對自己所擁有的文件生效,如果擁有者不是自己,那么就沒有權(quán)限執(zhí)行操作。
那么,Linux系統(tǒng)又是通過什么來實現(xiàn)這一功能的呢?
靠的就是我們所說的粘滯位
命令:
chmod +/-t d_name
- 粘滯位就是目錄可執(zhí)行權(quán)限
x
的升級版 - 粘滯位一般體現(xiàn)在
other
權(quán)限的可執(zhí)行權(quán)限x
上。 - 如果該目錄本來擁有可執(zhí)行
x
權(quán)限,那被賦予粘滯位后**,x
就會變成t
;如果原來沒有可執(zhí)行x
權(quán)限**,那被賦予粘滯位后,x
就會變成T
- 如果對一個目錄的某個身份設置了粘滯位
t
,那么該目錄下的文件只能由:- 超級管理員刪除
- 該目錄的所有者刪除
- 該文件的所有者刪除
2.2.4 權(quán)限掩碼umask
有必要清楚,在Linux系統(tǒng)中,文件的初始權(quán)限為666
,目錄的初始權(quán)限為777
但是,為什么我們新創(chuàng)建的目錄和文件,查看時,他們的權(quán)限一般都不是初始值呢?
這是因為Linux系統(tǒng)有權(quán)限掩碼這一概念。我們可以用下面的命令查看當前的權(quán)限掩碼:
umask
- 規(guī)定:
- 超級用戶默認掩碼值為0022,普通用戶默認為0002。
我們只看后三位數(shù)字002
,這是三個八進制數(shù),也就是用八進制表示法表示的權(quán)限值
實際創(chuàng)建出來的文件權(quán)限就是由umask
權(quán)限掩碼和權(quán)限初始值共同決定的:
- 文字描述:權(quán)限 = 從初始權(quán)限中去掉在umask中出現(xiàn)的權(quán)限
- 數(shù)學描述:權(quán)限 = 初始權(quán)限 & ~umaks
同時,我們也可以用命令來修改權(quán)限掩碼:
umask 0num1num2num3
- num1, num2, num3是三個八進制數(shù)
2.2.5 文件類型
在Windows系統(tǒng)中,我們通常用一個文件的后綴來區(qū)分文件的類型。但是在Linux系統(tǒng)中,我們靠命令ll
展示的文件屬性的第一個字符來區(qū)分文件的類型。
不同的字符代表著不同的類型,下面給出常見的Linux文件類型:
-
:普通文件、文本、源代碼、圖片、視頻、庫、可執(zhí)行程序等d
:目錄文件b
:block,塊設備文件c
:char,字符設備文件l
:鏈接文件p
:普通文件s
:socket文件
我們也可以用命令來查看文件到具體類型:
file filename
雖然在Linux中,文件后綴通常不像在Windows中那樣具有特定的意義,但是文件后綴在 Linux 中仍然具有一些用途:
- 提示文件類型:文件后綴可以為用戶提供一些關于文件類型的提示。例如,一個以
.jpg
結(jié)尾的文件通常是 JPEG 圖像文件,盡管這并不是強制性的。用戶和應用程序可以使用這些提示來決定如何處理文件。- 與應用程序關聯(lián):文件后綴可以與特定的應用程序相關聯(lián),以指示默認的打開方式。例如,以
.txt
結(jié)尾的文件通常會在文本編輯器中打開。- 便于組織文件:文件后綴有助于用戶在文件系統(tǒng)中組織和識別文件。例如,將所有圖片文件命名為
.jpg
或.png
結(jié)尾可以使用戶更容易找到它們。