Linux 中的用戶和組是用來控制使用者或者進程可以或者不可以使用哪些資源和硬件,是Linux權限控制最基本的方式。
用戶和組可以看一下上一章的部分,先來看一下權限。
一、權限概覽
在Linux下,使用命令ls -l顯示文件詳細信息
[root@Host syzhao]# ls -l total 4848 -rwxrw-r-- 1 syzhao eng 194 Jun 15 2012 check_crc.v -rw-rw-r-- 1 syzhao eng 3713 Jun 13 2012 cshrc.v drwxr-xr-x 4 syzhao eng 4096 Sep 29 2013 dc_test_run drwx------ 2 syzhao eng 4096 Jun 1 2012 Desktop drwxr-xr-x 3 syzhao eng 4096 Jan 7 2013 fm_fw drwxr-xr-x 4 syzhao eng 4096 Sep 29 2012 fpga -rw-r--r-- 1 syzhao eng 4222885 Dec 1 2012 fpga_soc_top_ftc_sata.bit -rw-r--r-- 1 syzhao eng 214513 Nov 15 2012 ftc_ddr_issue.fsdb drwxr-xr-x 4 syzhao eng 4096 Jun 3 2013 ftc_pcs_fpga drwxr-xr-x 3 syzhao eng 4096 May 27 2013 ftc_sata_fpga
拿第一行來說,
【-rwxrw-r--】代表文件類型和權限【1】表示i-node連接數 【syzhao】表示所有者 【eng】表示所屬用戶組 【194】表示大小【 Jun 15 2012】表示文件創建日期 【check_crc.v】表示文件名
下面主要就【-rwxrw-r--】 來說一下,這里的-rwxrw-r--其實是分成四個部分的,第一個【-】是一部分代表文件類型,【-】代表是一般文件,【d】代表是目錄,【l】代表鏈接文件。第二組【rwx】代表文件所有者權限,這三個這3個字母從左到右分別表示該身份對文件權限【r】代表是否可讀【w】代表是否可寫【x】代表是否可執行。出現rwx相應的字母就表示有相應的權限,出現【-】則表示該用戶對該文件相應操作的權限。
拿第三組和第四組來說,第三組是【rw-】表示該文件所屬用戶組eng的成員對該文件有【r】讀取、【w】寫的權限,沒有【x】執行的權限。
我們來看看eng組下面都有哪些人。
[root@Host /etc]# cat group eng:x:501:zhou,syzhao,sky,richard
說明了zhou、syzhao、sky、richard這幾個人對文件check_crc.v有讀和寫的權限,沒有執行的權限。
第四組代表Others對該文件的權限,權限根據字母可以看出,是可讀不可寫,不可執行,那么Others是哪些人呢?Others是除了root(root擁有最高權限)、文件所有者、文件所屬用戶組以外的所有用戶。
drwxr-xr-x 4 syzhao eng 4096 Sep 29 2013 dc_test_run
拿第三行輸出來說,代表syzhao對文件夾dc_test_run有讀寫執行的權限,eng組對文件夾有讀取和執行的權限(題外話,如果對文件夾只有讀取而沒有執行的權限,那么也無法列出),除syzhao和eng組以外的組和用戶也可以對文件夾進行訪問。
二、修改權限
2.1 修改文件屬性
chown [-R] dir/file命令可以改變文件的所有者,加上-R則連遞歸目錄下的所有文件和目錄。
[root@Host /]# ll | grep saku drwxr-xr-x. 2 root root 4096 Mar 30 12:46 saku [root@Host /]# chown hao /saku [root@Host /]# ll | grep saku drwxr-xr-x. 2 hao root 4096 Mar 30 12:46 saku
這樣修改,只修改了saku文件夾的權限,里面並沒有修改,里面文件的所屬用戶並沒有改變,下面我們來修改所屬組,這次我們修改文件的所屬組,加上 [-R] 參數
[root@Host /]# ll /saku/
total 4 -rw-r--r--. 1 root hao 0 Mar 30 12:55 01.txt #可以看出來,文件夾saku內的文件和目錄並沒有改變所屬用戶,依然是root。
-rw-r--r--. 1 root hao 0 Mar 30 12:55 02.vim drwxr-xr-x. 2 root hao 4096 Mar 30 12:55 soci [root@Host /]# chgrp -R sw_eng /saku/ #修改saku及該目錄內所有文件和目錄的所屬用戶組為sw_eng [root@Host /]# ll /saku/ total 4 -rw-r--r--. 1 root sw_eng 0 Mar 30 12:55 01.txt #此時,可以看到,saku目錄內的文件因為上一條命令沒有加遞歸的參數 -R,所以所屬用戶並沒有改變,
-rw-r--r--. 1 root sw_eng 0 Mar 30 12:55 02.vim #但是所屬組因為加了參數的原因,目錄內的所有文件和目錄的所屬組已經改變。
drwxr-xr-x. 2 root sw_eng 4096 Mar 30 12:55 soci
[root@Host /]# ll | grep saku drwxr-xr-x. 3 hao sw_eng 4096 Mar 30 12:55 saku
2.2 修改文件權限
rwx每種權限都會有個數字,4代表r,2代表w,1代表x。每種身份(owner,group,others)的權限的數字表示是他擁有的權限所對應的數字的和。如上述代碼所示:所有者root對於02.vim的權限為:r+w,可讀寫,轉化為數字為:4 + 2= 6 (因為所有者是root,而root本身不受權限限制,其實root對該文的的權限為可讀寫可執行)按此方法算,文件02.vim的權限如下
Owner rw 6
Group r 4
Others r 4
這樣的話,我們就可以用一個三位數來表示一個文件的權限啦!例如,01.txt文件的權限是644!這樣我們就可以方便的利用數字來設置一個文件的權限了。
-rwxr-----. 1 hao sw_eng 445 Feb 13 16:02 di.zip
這個di.zip的文件代表數字也顯而易見:740。了解了這些,我們就可以修改權限了。針對di.zip文件而言,sw部門的工程師需要去修改其中的內容,其他工程師需要讀取該文件的內容,需要給sw組的人開通w權限,給Others組開通讀取權限,也就是將其的權限從-rwxr-----修改為-rwxrw-r--,根據數字的規則,新的權限數字碼為:764,通過命令chomd [-R] xxx dir/file 來修改權限,這里的chmod是change mode的縮寫,用來修改文件\目錄的權限。
[root@Host hao]# ll | grep di -rwxr-----. 1 hao sw_eng 445 Feb 13 16:02 di.zip [root@Host hao]# chmod 764 di.zip [root@Host hao]# ll | grep di -rwxrw-r--. 1 hao sw_eng 445 Feb 13 16:02 di.zip
數字權限雖然簡潔,但是卻不直觀。Linux給我們提供了另外一種直觀的符號類型權限設置方法!
由前面介紹你可以知道,文件有owner(也就是user),group,others三種身份,我們分別用 u,g,o來分別代表着三種身份,用a同時代表三種身份,用r,w,x代表三種權限,用+,-,=三種符號分別代表添加,去除以及設置某種或某些權限的動作。那么我們就可以用這幾種字符組合來靈活直觀的設置文件權限啦!
chmod | u g o a |
+(添加) -(去除) =(設置) |
r w x |
dir/file |
還是拿di.zip文件來說,項目完成了,已經不需要軟件開發工程師協助和Others部門協助測試了,為了數據安全的版本一致,要收回di.zip文件的所有權限。我們用設置(對應上表的第三行)操作來進行權限的管理。
[root@Host hao]# chmod u=r,g=---,o= di.zip #此處---與 設為空效果一樣,都是取消所有權限。 [root@Host hao]# ll | grep di -r--------. 1 hao sw_eng 445 Feb 13 16:02 di.zip
現在項目又有所新變化,要將文件權限還原,我們操作一下添加去除命令。
[root@Host hao]# chmod u+wx,g+rw,o+r di.zip #這里的u+wx為給u(用戶)加上wx權限,給g(所屬組)加上rw的權限。 [root@Host hao]# ll | grep di -rwxrw-r--. 1 hao sw_eng 445 Feb 13 16:02 di.zip
又要改回去了。
[root@Host hao]# chmod u=r,g-rw,o=--- di.zip [root@Host hao]# ll | grep di -r--------. 1 hao sw_eng 445 Feb 13 16:02 di.zip
權限的主要修改方法,就到這里就完成了,我本事是青睞數字的方式,大家可以選擇喜愛的方法進行權限的管理,哪一種都可以,只要不要搞混了。
需要注意的地方:1.對於文件來說,讀取的優先級比較高,如果用戶對文件的權限是-wx,那么你覺得他能寫入東西去這個文件嗎?
[hao@Host ~]$ ll |grep now.txt #注意這里的用戶,我已經切換至hao了,從文件信息中可以看到,hao用戶對文件有寫入和執行的權限。
--wx-w-r--. 1 hao sw_eng 1447 Mar 30 14:40 now.txt [hao@Host ~]$ cat now.txt cat: now.txt: Permission denied
看見了吧,沒有權限,所以在權限設置的時候盡量不要出現什么731、u=x,g=wx,o=wrx 這些很奇葩的權限。
2.對於文件的rwx比較好理解,對於目錄來說具有r權限的身份可以利用ls查看該目錄下的文件名列表,不能查看文件的詳細信息,具有x權限的身份可以利用cd進入該目錄作為自己的工作目錄,在這個目錄中,你可以訪問、修改你有權限的文件。所以對於目錄來說,有r權限沒有x權限是無法進入目錄的,只有r權限,不開放x權限基本沒有什么意義,所以需要讀取文件夾時最好將x權限也加上。
2.3默認權限的修改
在Linux中,新建一個文件,權限往往就固定,如何修改這個默認的權限呢,需要用到權限的掩碼,umask掩碼由於不太常用,本教程暫略過,有時間會將該坑填上。
圖片信息,圖片來自蘇勇課堂