歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux文件權限之不完全解析

Linux文件權限之不完全解析

日期:2017/3/1 14:44:30   编辑:關於Linux
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下面只要一兩條命令就搞定了,是不是很強大呢?!
Copyright © Linux教程網 All Rights Reserved