歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

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