秒懂Linux文件權限及chmod命令

【版權申明】非商業目的註明出處可自由轉載
博文地址:
出自:shusheng007

以後本人所有文章將首發於 ShuSheng007的博客 歡迎大家關注

概述

去年把自己的阿里雲服務器從Windows系統換成了 Ubuntu(一個Linux發行版本)。自己一直是使用Windows的,一直覺得Linux過於高深,自己非常抗拒去了解它,這次自己的服務器換成的Linux所以只能被動去了解了。

任何事物的流行都是存在原因的,Linux那麼流行,肯定是有其獨到的優勢的,那些站在門外面的人肯定覺得自己現在使用東西是最好的,等真的推開門進去後卻發現,原來世界上還有更好的,所以我們程序員要不輕易否定新事物,樂於接受新事物,用於嘗試新事物,才能不落後。

嘚嘚了這麼多,今天想總結一下關於Linux文件權限的一些知識,及相關命令。別害怕,書生的文章力求讓人秒懂。

Linux 安全體系簡述

Linux 是以用戶賬戶來管理權限的,每個進入Linux系統的用戶都會被分配唯一的用戶賬戶,每個賬戶擁有不同的權限,這個應該非常容易理解。

例如組長王二狗的賬戶A 權限肯定比實習生牛翠花的賬戶B 權限高。賬戶系統雖然在控制單個用戶安全性時很好用,但是涉及到共享資源的一組用戶時就比較尷尬了,例如公司又招了個一個實習生上官無雪,公司給她分配了賬戶C, 但是日常工作中,牛翠花和上官無雪都需要操作同一組資源,那麼就要分別給這兩個賬戶增刪權限,這隻有兩個實習生賬戶還好,但是以後賬戶多了可就不好管了,所以Linux還有**組(group)**的概念,在同一組的賬戶可以享有此組的所有權限。

賬戶

  1. 系統管理員賬戶(root)
    root是系統中唯一的超級用戶,具有系統中所有的權限,如啓動或停止一個進程,刪除或增加用戶,增加或者禁用硬件等等。
  2. 系統賬戶
    Linux爲滿足自身系統管理所內建的賬號,通常在安裝過程中自動創建,不能用於登錄操作系統。
  3. 自定義賬戶
    由root管理員創建供用戶登錄系統進行操作使用的賬號

  1. 用戶的主要組(primary group):一個用戶必須屬於一個且只有一個主要組
  2. 用戶的附加組(supplementary group):一個用戶可以屬於一個或者零個附加組

查看賬戶

賬戶信息位於/etc/passwd文件內,使用如下命令查看

cat /etc/passwd

結果如下:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
mysql:x:109:118:MySQL Server,,,:/nonexistent:/bin/false
tomcat:x:1000:1000::/opt/tomcat:/bin/false

我們看下root賬戶每一列的含義,如下圖所示:
在這裏插入圖片描述
註冊名:口令:用戶標識號(uid):組標識號(gid):註釋性描述:用戶主目錄:用戶登陸的shell類型

  1. 註冊名(username):用於區分不同的用戶,例如root。
  2. 口令(password): 爲了安全起見密碼被加密存在/etc/shadow 中,只顯示一個x
  3. 用戶標識(uid):是一個整數,系統內部用它來標識用戶, root 的uid是0。
  4. 組標識(gid):當前用戶的工作組標識。
  5. 註釋(comment):對此賬戶的一些描述。
  6. 用戶主目錄(home directory):是用戶的起始工作目錄,它是用戶在登錄到系統之後所處的目錄。
  7. shell類型(shell used):用戶登錄後,要啓動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程序,即Shell。Shell是用戶與Linux系統之間的接口

查看組

賬戶信息位於/etc/group文件內,使用如下命令查看

cat  /etc/group

結果如下:

root:x:0:
sudo:x:27:
...
mysql:x:118:
tomcat:x:1000:

我們看下root賬戶每一列的含義,如下圖所示:
在這裏插入圖片描述
含義圖中已經標記的很清晰了。

理解文件權限

上面之所以要嘚嘚那麼多Linux用戶和組的知識,主要是因爲不明白上面的知識,下面再怎麼講都是一團漿糊。

那麼一個文件的權限是指什麼呢?目錄的權限呢?

  • 文件的權限分爲:是否可讀,是否可寫,是否可執行,即 rwx
  • 目錄的權限分爲:是否可進入,是否可以讀/寫、執行其內部的文件.

這些權限又被分爲了3類:

  1. 文件擁有者
  2. 文件所屬的組
  3. 其他賬戶

使用 ls -l命令查看一個目錄下的所有文件
例如我查看一下我服務器上tomcat目錄下的文件

/opt/tomcat# ls -l
drwxrwx--- 2 tomcat tomcat  4096 Apr  5 16:09 bin
-rw-r----- 1 root   tomcat 18982 Dec  8 00:46 BUILDING.txt
drwxrwx--- 2 root   tomcat  4096 Jan 11 18:11 conf
-rw-r----- 1 root   tomcat  5409 Dec  8 00:46 CONTRIBUTING.md
drwxrwx--- 2 root   tomcat  4096 Jan 11 13:57 lib
-rw-r----- 1 root   tomcat 57092 Dec  8 00:46 LICENSE
drwxrwx--- 3 tomcat tomcat 12288 Apr  6 00:31 logs
-rw-r----- 1 root   tomcat  2333 Dec  8 00:46 NOTICE
-rw-r----- 1 root   tomcat  3255 Dec  8 00:46 README.md
-rw-r----- 1 root   tomcat  6898 Dec  8 00:46 RELEASE-NOTES
-rw-r----- 1 root   tomcat 16262 Dec  8 00:46 RUNNING.txt
drwxr-x--- 2 tomcat tomcat  4096 Apr  5 10:10 temp
drwxrwx--- 9 tomcat tomcat  4096 Apr  5 12:49 webapps
drwxr-x--- 3 tomcat tomcat  4096 Jan 11 14:11 work

看到最左邊一列了嗎,我第一次接觸的時候太懵逼了,完全不知道什麼意思,-rw-r----- 什麼jb玩意啊?弄懂了也就不難了,讓我們一起來看一下:

總共10個字符:

第一個字符表示文件的性質:

  • - :表示此行展示的是一個文件
  • d:表示此行展示的是一個目錄

第2到4個字符表示此文件所有者對此文件的權限
第5到7個字符表示此文件所屬於的組裏面的賬戶對此文件的權限
第8到10個字符表示除了上面兩類型的其他用戶對此文件的權限
其中

  • r(read):可讀,文件可以被查看。
  • w(write): 可寫,文件可以被修改,刪除。
  • x(execute):可執行,如果文件是腳本活程序,可以被執行。
  • - :無以上權限

我們來舉個例子:

-rw-r----- 1 root   tomcat 57092 Dec  8 00:46 LICENSE

上面的語句表明,LICENSE 是一個文件,其可以被其所有者讀寫,但不能執行。其僅僅可以被所屬的組的用戶查看,對於其他用戶無權查看、修改、執行此文件。

修改文件的權限

終於到了chmod命令出場的時候了,我不會刻板的講述此命令的各種參數,那是文檔應該乾的事情,依據二八定律,我們只講那個八,就是最常使用的情形。

chmod 概述

使用chmod 來修改權限,我們需要告訴此命令如下幾個關鍵信息:

  • Who:我們在爲誰設置權限
  • What:我們要增加還是移除這些權限
  • Which: 我們要修改哪些權限

我們來舉個例子

使用 ls -l命令查看filePermissionTest.txt 文件

-rw-r--r-- 1 root root 12 Apr  5 09:23 filePermissionTest.txt

可以看到其所有者對其具有讀寫權限,下面我們使用下面的命令給此用戶加上可執行權限。

chmod u+x filePermissionTest.txt

執行後查看結果如下:

-rwxr--r-- 1 root root 12 Apr  5 09:23 filePermissionTest.txt

可見此文件所有者權限的標識已經從rw-變成了rwx了,說明其已經擁有了此文件的執行權限。

我們看一下 chmod u+x filePermissionTest.txt 這個命令是怎麼起作用的:
who:u 表示是爲此文件的用戶設置權限
what:+ 表示是爲此文件增加一個權限
which:x 表示要修改可執行權限

可見只要按照chmod who what which 來來使用這個命令就會變得很簡單。那接下來的問題就是who、what、which 分別取什麼值了。

常用參數

who

  • u:User, 此文件的所有者
  • g:Group, 此文件所屬的組
  • o:Others, 其他用戶
  • a:All,爲以上三種用戶設置權限
    如果who 被省略了的話,默認使用a.

what

  • -: 減號,表示移除權限
  • +:加號,表示增加權限
  • =:等號,表示設置此權限並移除其他權限

which

  • r: Read, 可讀權限
  • w: Write,可寫權限
  • x: execute,可執行權限

如果理解了上面的內容就足以應對日常工作中的使用情形了。

實例

下面我們來實際操作一下,畢竟理論和實踐直接往往隔着巨大的鴻溝!

假設我有如下3個文件

-rw-r--r-- 1 root root  2 Apr  6 20:04 filePermissionTest2.txt
-rwxr--r-- 1 root root 12 Apr  5 09:23 filePermissionTest.txt
-rw-r--r-- 1 root root 12 Apr  6 20:04 helloLinux.html

修改單個文件權限

我要給helloLinux.html 文件所屬於的組(root組)加上寫權限

chmod g+w helloLinux.html

執行後的結果爲

-rw-rw-r-- 1 root root 12 Apr  6 20:04 helloLinux.html

其已經從-rw-r--r--變成了-rw-rw-r--,說明寫權限已經加上了。

修改多個文件權限

我一次性爲others用戶增加對後綴爲.txt的文件的寫權限

chmod o+w *.txt

結果:

-rw-r--rw- 1 root root  2 Apr  6 20:04 filePermissionTest2.txt
-rwxr--rw- 1 root root 12 Apr  5 09:23 filePermissionTest.txt
-rw-rw-r-- 1 root root 12 Apr  6 20:04 helloLinux.html

數字速記法

當我想修改文件權限的時候就google了一下,看到chmod 776 xxx的命令一臉懵逼,776是什麼東東?
其實這是rxw的數字簡記法。其值如下所示,0到7的數字就代表了rxw的所有組合

權限 二進制 十進制 描述
- - - 000 0 無權限
- -x 001 1 只有執行權限
-w- 010 2 只有寫入權限
-wx 011 3 寫和執行權限
r- - 100 4 讀權限
r-x 101 5 讀取和執行的權限
rw- 110 6 讀取和寫入的權限
rwx 111 7 所有權限

例如上面chmod 776 xxx 的命令表示爲此文件的所有者和所屬的組設置所有權限,爲其他用戶設置讀寫權限。

總結

如果你完整了閱讀了以上內容,相信你對於如何修改文件權限已經胸有成竹了,好文難得注意點贊和收藏。祝編碼愉快,生活愉快,疫情之下,不被裁員。

哪裏可以找到我?
博客
知乎

引用文章:
How to Use the chmod Command on Linux
How To List Users and Groups on Linux

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章