Linux文件權限之不完全解析
本文著重介紹與Linux文件權限相關等問題,比如用戶與用戶組,文件權限,文件默認權限和文件特殊權限等。
Linux 為什麼需要那麼多的權限限制呢?其實這些都是為了“安全起見”啊!如果你的Linux系統裡存了你給心上人寫的情書,或者是某亞洲島國的動作大片,你總不希望誰都可以翻翻看吧?!好了,廢話少收,讓我們一起來看看Linux文件權限到底是什麼東東!
1.文件所有者
對於文件來說,訪問該文件的賬號的身份有三類:文件所有者(owner),文件所屬的用戶組(group),以及用戶組外的其他人(others)。由於本文著重介紹文件權限,這些概念簡單介紹,不做全面闡述。
1.1文件所有者(owner)
這個就不用解釋了吧?不過還是有些注意點,文件剛剛創建的時候,文件所有者是創建文件的用戶,但是文件所有者是可以通過chown來改變的!這個後面會介紹到。
1.2用戶組(group)
文件所在用戶組,用戶組的概念請自行百度之!用戶組和用戶的關系好比家庭裡你家人和你的關系。注意,文件所有者的賬號可能不屬於該用戶組。
1.3其他人(others)
除了用戶組和文件所有者的之外的其他訪問者統稱為others,也就是你家庭以外的人!
除了這三種賬號以外,還有就是那個超級賬號root,這是個無所不能的賬號!你可以暫時把他當做你家所在村的村長,管著這個村的各個家庭(group),
2.Linux文件權限的概念
2.1Linux文件權限概念
Linux系統內文件的三種身份(擁有者、群組與其他人),知道每種身份都有三種權限(rwx)、
有上面介紹我們可以知道一個文件的訪問者有三種身份:owner(user),group,others。而文件權限也有三種,即:可讀,可寫,可執行權限。簡寫為 r,w,x,分別是read,write,execute的縮寫。那麼排列組合一下,一個文件就會有多大9種的權限(實際上更多!後面會介紹!):owner的權限r,w,x,group的權限rwx,以及others的權限rwx。這些權限分別限制了這三種用戶是否對該文件擁有可讀和(或)可寫和(或)可執行的權限。
2.2 查看Linux文件的權限
[plain]
[root@Cherish linux]# touch test -->創建一個空文件!
[root@Cherish linux]# ls -al -->顯示文件屬性!
總用量 8
drwxr-xr-x. 2 root root 4096 12月 11 22:36 .
dr-xr-x---. 37 root root 4096 12月 11 22:32 ..
-rw-r--r--. 1 root root 0 12月 11 22:36 test
簡短標注:
-rw-r--r--. 1 root root 0 12月 11 22:36 test
文件類型和權限 i-node連接數 所有者 所屬用戶組 文件大小 文件ctime或者mtime 文件名
我們可以看到文件有非常多的屬性(其實還有很多!)這裡著重介紹第一列,因為他們表示了該文件的文件權限!
我們將第一列表示文件類型和權限的十個字符抽出來單獨分析,可以分為三組:
- rw- r-- r--
第一組 第二組 第三組 第四組
第一組一個字符,表示文件的類型,[-]代表是一般文件,[d]代表是目錄,[l]代表鏈接文件。
第二組3個字符,表示文件所有者的權限。這3個字符從左到右分別表示該身份對文件權限 是否可讀? 是否可寫?是否可執行? 出現rwx相應的字母就表示有相應的權限,出現 - 則表示沒有相應的權限。例如,test文件所有者的權限是rw-,表示該文件所有者對文件具有可讀可寫權限,但是不具有可執行權限。
第三組3個字符表示所屬用戶組的權限,格式同上。test文件只具有可讀權限。
第四組3個字符表示others的權限,格式同上。test文件只具有可讀權限
3.改變文件權限和屬性的方法
3.1.改變文件屬性的方法
chown [-R] dir/file 改變文件的所有者,加上-R則連同子目錄下的所有文件和目錄都更新
例:將test文件的文件所有者從root,改為Cherish
[plain]
[root@Cherish linux]# ll test
-rw-r--r--. 1 root root 0 12月 11 22:36 test
[root@Cherish linux]# chown Cherish test
[root@Cherish linux]# ll test
-rw-r--r--. 1 Cherish root 0 12月 11 22:36 test
chgrp [-R] dir/file 改變文件所屬用戶組,加上-R則連同子目錄下的所有文件和目錄都更新
例:將test文件的用戶組從root ,改為Cherish
[plain]
[root@Cherish linux]# ll test
-rw-r--r--. 1 Cherish root 0 12月 11 22:36 test
[root@Cherish linux]# chgrp Cherish test
[root@Cherish linux]# ll test
-rw-r--r--. 1 Cherish Cherish 0 12月 11 22:36 test
3.2.改變文件權限(chmod)
(1)數字類型權限
使用數字來代表各個權限,以便將三種權限(r,w,x)量化為數字,對照表如下
r -> 4
w->2
x->1
每種身份(owner,group,others)的權限的數字表示是他擁有的權限所對應的數字的和。比如,文件test的文件擁有者Cherish對該文件的權限為 rw-即,可讀可寫,則量化為數字為:4(r) + 2(w) = 6,按照這種算法,文件test的權限如下:
owner = rw- = 4 + 2 = 6
group = r-- = 4 + 0 + 0 = 4
others = r-- = 4 + 0 + 0 = 4
這樣的話,我們就可以用一個三位數來表示一個文件的權限啦!例如,test文件的權限是644!這樣我們就可以方便的利用數字來設置一個文件的權限了。
例如,我們如果想將文件test分享給所有人,那麼我們可以將該文件的權限設置為 rwxrwxrwx,計算數字權限得 777,那麼我們可以這樣做:
chomd [-R] abc dir/file abc就代表那個三位的數字權限啦!
[plain]
[root@Cherish linux]# chomd [-R] abc dir/file
[root@Cherish linux]# ll test
-rw-r--r--. 1 Cherish Cherish 0 12月 11 22:36 test
[root@Cherish linux]# chmod 777 test
[root@Cherish linux]# ll test
-rwxrwxrwx. 1 Cherish Cherish 0 12月 11 22:36 test
我們發現執行命令chmod 777 test後,文件test的權限真的變成了 rwxrwxrwx ,是不是很方便呢!
(2)符號類型權限
數字權限雖然簡潔,但是卻不直觀。Linux給我們提供了另外一種直觀的符號類型權限設置方法!
由前面介紹你可以知道,文件有owner(也就是user),group,others三種身份,我們分別用 u,g,o來分別代表著三種身份,用a同時代表三種身份,用r,w,x代表三種權限,用+,-,=三種符號分別代表添加,去除以及設置某種或某些權限的動作。那麼我們就可以用這幾種字符組合來靈活直觀的設置文件權限啦!下面這個圖其實是偷了鳥哥的,希望他老人家不要生氣!
chmod u
g
o
a +(添加)
-(去除)
=(設置) r
w
x dir/file
下面我們就舉幾個例子!
將test文件的文件權限設置為rwxrw-r--
[plain]
[root@Cherish linux]# chmod u=rwx,g=rw,o=r test
[root@Cherish linux]# ll test
-rwxrw-r--. 1 root root 0 12月 12 09:39 test
將test文件的others的 r 權限去掉!
[plain]
[root@Cherish linux]# chmod o-r test
[root@Cherish linux]# ll test
-rwxrw----. 1 root root 0 12月 12 09:39 test
我們看到test的others的r權限真的消失了!
我們再來將test 文件的 x 權限賦予所用身份:
[plain]
[root@Cherish linux]# chmod a+x test
[root@Cherish linux]# ll test
-rwxrwx--x. 1 root root 0 12月 12 09:39 test
這個命令在給可執行文件設置權限的時候很有用!
另外還有其他靈活的設置方式,如:
[plain]
[root@Cherish linux]# chmod u=--- test
[root@Cherish linux]# ll test
----rwx--x. 1 root root 0 12月 12 11:41 test
[root@Cherish linux]# chmod g= test
[root@Cherish linux]# ll test
---------x. 1 root root 0 12月 12 11:41 test
4.文件的默認權限和權限掩碼
4.1文件的默認權限
文件和目錄創建的時候,都會有一個默認的權限。
如果創建的是文件, 那麼默認權限為 rw-rw-rw
如果創建的是目錄,則默認權限為 rwxrwxrwx
我們可以創建一個文件看看:
[plain]
[root@Cherish linux]# touch test1
[root@Cherish linux]# ll test1
-rw-r--r--. 1 root root 0 12月 12 10:09 test1
[root@Cherish linux]# mkdir testdir
[root@Cherish linux]# ll -d testdir
drwxr-xr-x. 2 root root 4096 12月 12 10:09 testdir
什麼?為啥跟默認權限對不上號呢?你忽悠我呢?別著急,這裡還有一個umask的問題!我們知道要得到一個ip地址所在的網段,必須要將ip和子網掩碼(netmask)相與才可以得到。這裡類似ip的子網掩碼,文件默認權限也有一個權限掩碼(unmask),默認權限只有經過unmask的處理後,才能得到真正的默認權限,讓我們來看看這個unmask吧!
4.2文件權限掩碼(unmask)
[plain]
[root@Cherish linux]# umask -->掩碼的數字表示,我們只關注後三位數,第一位數後面會講到!
0022
[root@Cherish linux]# umask -S -->掩碼的字符表示(<span style="font-family:新細明體, 'Times New Roman', serif;font-size: 15px;">Symbolic</span>)
u=rwx,g=rx,o=rx
注意,umask 並沒有給出真正的默認權限,文件默認權限要經過umaks的處理才行!umask的意義就是屏蔽掉默認權限中的某些權限。
4.2.1數字形態的掩碼
數字形態的掩碼告訴我們要去掉的權限。比如上面的022(暫時只關注後三位數)代表文件默認權限需要拿掉group和others的w權限(因為w權限的數字表示是2!):
文件:默認權限(rw-rw-rw) - 權限掩碼(----w--w-) = 真正的默認權限(rw-r--r--)
明白了嗎?目錄的處理方式也一樣,請讀者自行計算。這裡我們也可以采用類似二進制相或的處理方式 (rw-rw-rw) || (----w--w-) = (110110110) || (000010010) = 110100100 = rw-r--r--
4.2.2字符形態的掩碼
看了數字形態的掩碼後,讀者是不是可以猜到字符形態的掩碼的意義?字符型態的掩碼意義,其實就是默認權限應該保留的權限,有點暈?沒關系,我們舉個例子就明白了。比如字符掩碼中owner(user)的權限是u=rwx,這代表默認權限中的user如果有r權限,則保留;如果沒有則不保留。文件的user的默認權限為 rw-,那麼根據掩碼,保留rw,由於沒有x權限,則不保留。那麼文件的user的最終默認權限為rw-,明白了嗎?若果還是不明白,那就來個二進制相與吧!
文件:rw-rw-rw) && (rwxr-x-r-x) = 110110110 && 111101101= 110100100 = rw-r--r--
這下明白了吧!
4.2.3.修改umask
很簡單umask後面直接接上修改後的值就可以了,這個值可以是數字形態的,也可以是字符形態的!
[plain]
[root@Cherish linux]# umask 077
[root@Cherish linux]# umask
0077
[root@Cherish linux]# umask u=rwx,g=rwx,o=rwx
[root@Cherish linux]# umask
0000
[root@Cherish linux]# umask -S
u=rwx,g=rwx,o=rwx
最後還有個有趣的現象,留給讀者自己思考!
[plain]
[root@Cherish linux]# chmod +x test
[root@Cherish linux]# ll test
-rwxr-xr-x. 1 root root 0 12月 12 11:46 test
[root@Cherish linux]# chmod +w test
[root@Cherish linux]# ll test
-rwxr-xr-x. 1 root root 0 12月 12 11:46 test
[root@Cherish linux]# chmod a+w test
[root@Cherish linux]# ll test
-rwxrwxrwx. 1 root root 0 12月 12 11:46 test
5.文件權限的意義
說了那麼多文件權限相關的問題,那麼,到底這些權限代表了什麼意義呢?下面我們來分析下。
5.1文件權限對文件的意義
這個不用太多解釋你也明白,可讀,可寫,可執行。也就不羅嗦了。
5.2文件權限對目錄的意義
這個非常重要!一定要仔細理解!那到底r w x 對目錄有什麼意義呢?
r:對於目錄來說,具有r權限的身份可以利用ls查看該目錄下的文件名列表,不能查看文件的詳細信息
w:具有w權限的身份可以更改目錄的內部結構,也就是說,你可以刪除、添加、移動、重命名文件等
x:具有x權限的身份可以利用cd進入該目錄作為自己的工作目錄,在這個目錄中,你可以訪問、修改你有權限的文件,前提是你知道這個文件的文件名。
明白了吧?!下面我們用一些例子來說明。我用root賬號新建四個文件,分別給others身份r,rx,w,wx權限。然後用cherish賬號登陸,來看看我們用cherish這個身份都能對這些文件進行哪些操作!
[plain]
[cherish@Cherish ~]$ ll -d /tmp/tesdir_*
dr--r--r--. 3 root root 4096 12月 12 14:05 /tmp/tesdir_r #只給others r權限
dr-xr-xr-x. 3 root root 4096 12月 12 14:05 /tmp/tesdir_rx #給rx權限
d-w-----w-. 3 root root 4096 12月 12 14:05 /tmp/tesdir_w #給w權限
d-wx--x-wx. 3 root root 4096 12月 12 14:10 /tmp/tesdir_wx #給wx權限
[cherish@Cherish ~]$ ll /tmp/tesdir_r -->只能查看文件名,詳細信息不能看哦!
ls: 無法訪問/tmp/tesdir_r/testfile: 權限不夠
總用量 0
d????????? ? ? ? ? ? testfile
[cherish@Cherish ~]$ ll /tmp/tesdir_rx/ -->終於可以查看詳細信息了!當然,你也可以用cd進入這個文件!
總用量 4
drwxr-xr-x. 2 root root 4096 12月 12 14:05 testfile
[cherish@Cherish ~]$ mkdir /tmp/tesdir_w/chenbin -->有w權限是不夠的,必須同時具有x權限才可以修改目錄內的結構!記住了!
mkdir: 無法創建目錄"/tmp/tesdir_w/chenbin": 權限不夠
[cherish@Cherish ~]$ mkdir /tmp/tesdir_wx/chenbin -->可以創建啦!
[cherish@Cherish ~]$ cd /tmp/tesdir_r
tesdir_r/ tesdir_rx/
[cherish@Cherish ~]$ cd /tmp/tesdir_r
-bash: cd: /tmp/tesdir_r: 權限不夠
一開始接觸這些東西的確讓人很感覺很坑爹!但是多多練習多多揣摩後悔發現,Linux真的很強大!學會了這些,你就不用像在windows下面一樣,想隱藏某些文件的時候,還要用拙劣的“隱藏文件”,或者大動干戈的下個神馬文件加密軟件。在Linux下面只要一兩條命令就搞定了,是不是很強大呢?!