【版權申明】非商業目的註明出處可自由轉載
博文地址:
出自:shusheng007
以後本人所有文章將首發於 ShuSheng007的博客 歡迎大家關注
概述
去年把自己的阿里雲服務器從Windows系統換成了 Ubuntu(一個Linux發行版本)。自己一直是使用Windows的,一直覺得Linux過於高深,自己非常抗拒去了解它,這次自己的服務器換成的Linux所以只能被動去了解了。
任何事物的流行都是存在原因的,Linux那麼流行,肯定是有其獨到的優勢的,那些站在門外面的人肯定覺得自己現在使用東西是最好的,等真的推開門進去後卻發現,原來世界上還有更好的,所以我們程序員要不輕易否定新事物,樂於接受新事物,用於嘗試新事物,才能不落後。
嘚嘚了這麼多,今天想總結一下關於Linux文件權限的一些知識,及相關命令。別害怕,書生的文章力求讓人秒懂。
Linux 安全體系簡述
Linux 是以用戶賬戶來管理權限的,每個進入Linux系統的用戶都會被分配唯一的用戶賬戶,每個賬戶擁有不同的權限,這個應該非常容易理解。
例如組長王二狗的賬戶A 權限肯定比實習生牛翠花的賬戶B 權限高。賬戶系統雖然在控制單個用戶安全性時很好用,但是涉及到共享資源的一組用戶時就比較尷尬了,例如公司又招了個一個實習生上官無雪,公司給她分配了賬戶C, 但是日常工作中,牛翠花和上官無雪都需要操作同一組資源,那麼就要分別給這兩個賬戶增刪權限,這隻有兩個實習生賬戶還好,但是以後賬戶多了可就不好管了,所以Linux還有**組(group)**的概念,在同一組的賬戶可以享有此組的所有權限。
賬戶
- 系統管理員賬戶(root)
root是系統中唯一的超級用戶,具有系統中所有的權限,如啓動或停止一個進程,刪除或增加用戶,增加或者禁用硬件等等。 - 系統賬戶
Linux爲滿足自身系統管理所內建的賬號,通常在安裝過程中自動創建,不能用於登錄操作系統。 - 自定義賬戶
由root管理員創建供用戶登錄系統進行操作使用的賬號
組
- 用戶的主要組(primary group):一個用戶必須屬於一個且只有一個主要組
- 用戶的附加組(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類型
- 註冊名(username):用於區分不同的用戶,例如root。
- 口令(password): 爲了安全起見密碼被加密存在
/etc/shadow
中,只顯示一個x。 - 用戶標識(uid):是一個整數,系統內部用它來標識用戶, root 的uid是0。
- 組標識(gid):當前用戶的工作組標識。
- 註釋(comment):對此賬戶的一些描述。
- 用戶主目錄(home directory):是用戶的起始工作目錄,它是用戶在登錄到系統之後所處的目錄。
- 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類:
- 文件擁有者
- 文件所屬的組
- 其他賬戶
使用 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