深入瞭解Linux的文件權限

一、Shell是什麼

Shell是操作系統外殼程序的統稱,Windos中的圖形化界面、Linux中的命令行外殼都是外殼程序。CentOS中的外殼程序被稱為bash。

1、Shell承擔用戶和內核間的翻譯工作

Shell是命令行解釋器。

Linux嚴格意義上說的是一個操作系統,我們稱之為"核心(Kernel)"。但是用戶和內核溝通的學習成本很高,所以在內核外部有一層Shell外殼程序,將用戶輸入的指令翻譯傳遞給內核,內核處理後,將結果返回給Shell,由Shell向用戶傳達指令的最終結果。

2、拒絕用戶非法請求,保護內核

當用戶輸入非法指令時,shell不會再去詢問內核結果,而是直接拒絕用戶的非法請求。

3、派生子進程執行用戶指令

因為Shell是用戶和內核溝通的唯一橋梁,一般Shell不參與指令的執行,而是通過派生子進程的方式執行用戶的指令。(子進程掛瞭,但Shell不會受到影響)

二、用戶切換與提權

1、普通用戶與root用戶的切換

su//切換後路徑不變
su -//切換後來到傢目錄

普通用戶切換為root用戶需要輸入root密碼,而root用戶切換成普通用戶無需 任何驗證。

2、普通用戶指令短暫提權

sudo whoami

當該用戶被添加至etc/sudoers中,sudo為最近的一條指令提權至root,需要輸入當前普通用戶密碼。

在一次密碼認證過後,接下來的幾分鐘使用sudo提權操作,將無需再次輸入密碼。

為什麼sudo提權需要輸入當前用戶的密碼,而不是root密碼呢?這樣做是為某些被信任的用戶,提供最少的執行障礙。而不是直接將root的密碼交給員工。

三、文件權限的理解

1、文件權限=角色的權限+文件屬性

對於Linux中的文件權限,有的角色對這個文件有可讀、可寫、可執行的權限,而有的角色卻隻有可讀權限。這是人的權限。

對於文件的可讀、可寫、可執行的屬性,如果一個文件不具備可讀權限,那麼角色在訪問文件時,也是沒有可讀權限的。

2、Linux中的三種角色

Linux中有三種角色,分別是擁有者(owner)、所屬組(grouper)、其他人(other),權限限制的不是用戶,而是這個用戶當前所處的角色。

2.1為什麼會存在所屬組(grouper)這種角色

舉個例子:現在公司有A、B、C等多個部門使用同一臺Linux的雲服務器,每個小組都有各自的小組成員,所以就有瞭所屬組的概念。把不同的組員放到各自的所屬組中,員工無權限訪問他組文件,防止項目信息互相泄露。

3、drwxrwxr-x代表的意義

3.1第一位字母代表的意義

第一位字母代表的意義是文件的類型。

在windows中,區分文件類型是通過文件名後綴,而Linux中,文件的類型由第一位字母決定,與文件本身的後綴無關。(Linux中文件後綴作用是幫助用戶快速區分這個文件的類型或者gcc等工具是需要關註後綴)

  • d:目錄文件
  • -:普通文件(源代碼、庫文件、可執行程序、文檔壓縮包等)
  • c:字符設備文件(鍵盤、顯示器等串口設備)
  • b:塊設備(硬盤、光驅等)
  • l:軟鏈接文件(類似於Windows中的快捷方式)
  • p:管道文件
  • s:socket套接口文件

3.2後九位代表的意義

後九位三三為一組,分別代表擁有者、所屬組、其他用戶的權限。其中r代表可讀,w代表可寫,x代表可執行。-代表不具備該權限。

3.3文件權限的字符修改方法

chmod u-r text.c//將text.c的擁有者減去可讀權限
chmod g+x text.c//將text.c的所屬組加上可執行權限
chmod o+rwx text.c//將text.c的其他用戶減去讀、寫、可執行權限
chmod u+rx,g-w,o-rwx text.c//可以組合操作權限的增減
chmod a-rwx text.c//對所有角色減去讀、寫、可執行權限

隻有文件的擁有者和root才能對文件角色的權限進行更改。

root不受角色權限的約束。

3.4角色的更改

sudu chown jly2 text.c//把text.c的擁有者改成jly2
sudo chgrp jly2 text.c//把text.c的所屬組改成jly2
sudo chown jly2:jly2 text.c//把text.c的擁有者、所屬組改成jly2

擁有者、所屬組更改後,other也變瞭,所以other不用特意改。

3.5文件權限的八進制修改方法

三三為一組,非-位用二進制1填充,-位用0填充,得到角色權限的二進制,在將這些二進制轉化為八進制,即可使用八進制來表達角色的權限。

chmod 000 text.c//用權限的八進制更改text.c的權限

3.6目錄的起始權限及權限掩碼umask

Linux規定,目錄的起始權限從777開始,普通文件的起始權限從666開始。

[jly@VM-4-11-centos text]$ umask
0002//第一位不管,系統會默認配置好權限掩碼為002,即000 000 010

凡是在umask中出現的權限,必須在起始權限中去掉,即最終權限=起始權限&(~umask)。

所以,我們創建出來的目錄的權限是775(rwx rwx r-x),普通文件的權限是664(rw- rw- r–)。

umask 0444//更改umask的值,即100 100 100

修改後創建出來的目錄權限變為333,普通文件權限變為222。

4、目錄的權限

目錄的r權限:能否查看目錄中的文件。

目錄的w權限:能否在目錄中創建文件。

目錄的x權限:能否進入、執行目錄中的文件

所以,目錄的起始權限從777開始,是因為所有角色都需要x權限進入目錄。

四、粘滯位(公共目錄使用)

Linux系統中有很多人,我們需要在一個公共的目錄下,進行臨時文件的操作(增刪查改)。這個公共目錄由root來創建。

在這個公共目錄中,通過文件自身的權限來約束不同的角色,但是無法阻止其他用戶私自刪除這些文件。因為在目錄中刪除一個文件,與這個文件本身無關,與它所處的目錄的權限有關。

這個公共目錄的擁有者和所屬組是root,粘滯位會限制other的權限。

chmod +t /mytmp   //在/目錄下的mytmp目錄中加上粘滯位

drwxrwxrwx
drwxrwxrwt

加上粘滯位後,該公共目錄的other的x權限變為t,也就是該目錄下other的可執行權限變為粘滯位,其他用戶無權刪除不屬於他的文件。

五、權限總結

1、目錄的可執行權限是表示你可否在目錄下執行命令。

2、如果目錄沒有-x權限,則無法對目錄執行任何命令,甚至無法cd進入目錄, 即使目錄仍然有-r 讀權限(這個地方很容易犯錯,認為有讀權限就可以進入目錄讀取目錄下的文件)

3、如果目錄具有-x權限,但沒有-r權限,則用戶可以執行命令,可以cd進入目錄。但由於沒有目錄的讀權限,所以在目錄下,即使可以執行ls命令,但仍然沒有權限讀出目錄下的文檔。

到此這篇關於深入瞭解Linux的文件權限的文章就介紹到這瞭,更多相關Linux文件權限內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: