Linux權限管理:
二、權限管理
1、3種基本權限
在Linux中,將使用系統資源的人員分為4類:超級用戶、文件或目錄的屬主、屬主的同組人和其他人員。超級用戶擁有對Linux系統一切操作權限,對 于其他3類用戶都要指定對文件和目錄的訪問權限。
代表字符 ? ? ? 權限? ?? ?? ?? ?? ?? ?? ? 對文件的含義? ?? ?? ?? ?? ?? ?? ?? ?對目錄的含義
r? ?? ?? ?? ?? ? 讀權限? ?? ?? ?? ?? ???可以讀文件的內容? ?? ?? ?? ?? ???可以列出目錄中的文件列表
w? ?? ?? ?? ?? ?寫權限? ?? ?? ?? ?? ?? ? 可以修改該文件? ?? ?? ?? ?? ?? ?可以在目錄中創建刪除文件
x? ?? ?? ?? ?? ?執行權限? ?? ?? ?? ?? ???可以執行該文件? ?? ?? ?? ?? ?? ?可以使用cd命令進入該目錄
2、查看文件和目錄的權限 可以使用帶l參數的ls命令查看文件或目錄的權限
每一行顯示一個文件或目錄的信息,這些信息包括文件的類型、文件的權限、文件的屬主和文件的所屬組,還有文件的大小以及創建時間和文件名。
輸出列表中每 一行第一列的第一個字母指示了該文件的類型。各種文件類型及代表字符如下:
-:普通文件
b:塊文件設備
d:目錄文件
c:字符文件設備
l:符號鏈接文件
p:管道文件
除開第一列的字符外,其余9個字母可分為三組,3個字母一組,這3組分別代表:文件屬主的權限、文件所屬組的權限和其他用戶的權限。每組中的3個欄位分別表示讀、 寫、執行權限。
3、更改操作權限(chmod)
系統管理員和文件屬主可以根據需要來設置文件的權限,有兩種設置方法:文字設定法和數值設定法。
(1)文字設定法
chomd的文字設定法的格式為:chmod [ugoa][+-=][rwxugo]
其中第1個選項表示要賦予權限的用戶,具體說明如下:
u:屬主????? g:所屬組用戶????? o:其他用戶????? a:所有用戶
第2個選項表示要進行的操作,具體說明如下:
+:增加權限
-:刪除權限
=:分配權限,同時將原有權限刪除
第3個選項是要分配的權限,具體說明如下:
r/x/w:允許讀取/寫入/執行??????? u/g/o:和屬主/所屬組用戶/其他用戶的權限相同
例如:
chmod go -r users????? //取消組用戶和其他用戶對文件users的讀取權限
chmod u+x users????? //對文件users的屬主增加招待權限
chmod u+x,go-r users????? //對文件users的屬主添加執行權限,同時取消組用戶和其他用戶對文件的讀取權限
(2)數值設定法
chmod的數值設定法的格式為:chmod n1n2n3
其中n1、n2、n3分別代表屬主的權限、組用戶的權限和其他用戶的權限,這三個選項都是八進制數字。例如:
chmod 755 adduser????? //對文件adduser的屬設置可讀、寫和執行的權限,所屬組和其他用戶只設置讀和執行權限,沒有寫權限
chmod 600 user1???????? //取消組用戶和其他用戶對文件user1的一切權限(原權限為-rw-rCrC)
4、更改屬組或同組人
改變文件的屬主和組可以用chown命令,命令格式為:chown [-R] 。 例如:
chmod osmond user1????? //將文件user1的屬主改為osmond
chmod osmond.osmond user1????? //將文件user1的屬主和組都改成osmond
chmod -R osmond.osmond mydir????? //將mydir目錄及其子目錄下的所有文件或目錄的屬主和組都改成osmond
5、設置文件和目錄的生成掩碼
用戶可以使用umask命令設置文件夾的默認生成掩碼。默認的生成掩碼告訴系統當創建一個文件或目錄時不應該賦予哪些權限。如果用戶將umask命令放 在環境文件(.bash_profile)中,就可以控制所有的新建文件或目錄的訪問權限。其命令格式為:umask [u1u2u3]
其中,u1、u2、u3分別表示的是不允許屬主有的權限、不允許同組人有的權限和不允許其他人有的權限。例如:
umask 022????? //設置不允許同組用戶和其他用戶有寫權限
umask??????????? //顯示當前的默認生成掩碼
用戶和用戶組
linux的系統是“多用戶、多任務環境”的,也就是說“linux系統允許多個用戶同時使用系統,并且可以同時執行不同的任務”。所以為了確保各個用戶的文件安全,?linux系統具有非常嚴格的文件權限管理機制。
主要體現在兩個方面:
1.?? 對文件操作的權限:
三種: 讀、寫、執行。
2.?? 文件的訪問方式:
三種: owner/group/other。
讀、寫、執行的操作權限比較容易理解,主要是文件的訪問方式。它們的含義如下:
擁有者 owner
也就是文件的所有者,通常是建立文件的用戶。在linux系統中,每個文件都有一個所有者。每一個用戶都會被分配唯一的uid。
用戶組
一個用戶組包含若干用戶。值得注意的是:一個用戶也可以屬于多個用戶組,也可以不屬于任何用戶組。每一個用戶組都會被分配唯一的gid。
其他人
對于一個文件來說,如果某用戶既不是owner,也和owner不在同一個用戶組,那么該用戶對于文件來說就是其他人。
另外:在linux系統中,
①各個用戶賬號的信息都保存在/etc/passwd文件中;
②密碼保存在/etc/shadow文件中;
③用戶組信息保存在/etc/group文件中。
1. chmod 改變文件或文件夾權限
chmod ?r:4 w:2: x:1 改變檔案權限
a=擁有者 g=所在群組 o=其他
引出問題:[root@qmfsun]# ls -al /opt/qmfsun
total 1
-rwxr-xr-x?1?root?root?7?04-21?12:47?test.txt
-rwxr-xr-x?1?root?root?7?04-21?12:47?test.txt
① ? ? ? ② ? ③ ? ?④ ?⑤ ? ⑥ ? ? ? ⑦
其中各個部分的含義如下圖:
把從左到右依次編號,各個字段的含義如下:
1. ? 文件的屬性,一共有10個屬性,具體含義見下圖:
用數字表示:
第一個屬性,表示這個文件的類型,常見的有:文件、目錄或連接文件等。
當為[?d?]則是目錄
當為[?-?]則是文件
若是[?l?]則表示為連結檔(link file);
若是[?b?]則表示為裝置文件里面的可供儲存的接口設備(可隨機存取裝置);
若是[?c?]則表示為裝置文件里面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)
2.?? 第二列表示鏈接占用的節點,這個主要是和link node有關,初學linux的可以先不用研究。
3.?? 第三列表示文件的“擁有者”,即owner。
4.?? 第四列表示擁有者的“用戶組”。
5.?? 第五列表示這個文件的大小。
6.?? 第六列表示文件的最后“修改時間”(即modification time, 簡稱mtime),對于新創建的文件就是指其創建的時間。
Linux的文件權限分為三級 : 文件擁有者、群組、其他。利用 chmod 可以
控制文件如何被他人所存取。利用ls -l顯示的文件屬性中,第一個字段是檔案的權限,共有十個位
例如:-rwxr-xr-w
第一個位是文件類型,
接下來的9位,按照每三個字符為一組共三組,每一組均為『rwx』 的三個參數的組合,每一組又依次代表使用者(u)、群組(g)、其他人(o)的權限,每組中的r(可讀),w(可寫),x(可執行),-(沒有權限)代表一種權限,要注意的是,這三個權限的位置不會改變
當權限用數字表示時,4,2,1分別代替r,w,x;此時上述-rwxr-xr-w權限屬性用數字表示就是chmod 755 qmfsun.txt
755:共有三個數字,按照順序,
第一個數字代表u(擁有者)權限,
第二個數字代表g(群組)權限,
第三個數字代表o(其他人)權限
每一個數字都是通過4(表示r),2(表示w),1(表示x)三個數字相加得到的
所以數字表示:只是將字符中的r,w,x分別用4,2,1替換在相加的結果
文件屬性這塊共有十個字段,如:drwxr-xr-x
我們把這10個列分成4塊:[d] [rwx] [r-x] [r-x]
第一塊:也就是第一列,用來表示這個文件的類型,有如下值:
(1)[ d ]則是目錄,我這里的是d,表示的是一個目錄
(2)[ - ]則是文件;
(3)[ l ]則表示為連結檔(link file);
(4)[ b ]則表示為裝置文件里面的可供儲存的接口設備;
(5)[ c ]則表示為裝置文件里面的串行端口設備,例如鍵盤、鼠標。
第二塊:第?2到4?列,表示文件擁有者的權限。
第三塊:第5到7?列,表示擁有者同組人的權限。
第四塊:第8到10列,表示是非擁有者組人的權限。
這些權限均有[rwx]?三個參數表示,而且分別對應不同的位置。每塊由3個列組成,每列對應一個值。?[ r ]代表可讀、[ w ]代表可寫、[ x ]代表可執行。
舉例:?如果擁有者只有只讀的權限,那么第2到4列就是[r--],有讀寫的權限就是[rw-],有讀寫和執行的權利就是[rwx].
4.2?使用數字賦權
在4.1?中了解準備知識之后,就可以使用數字賦權了。?每塊用戶有3個權限[rwx].?他們對應數字:
r -->4
w-->2
x-->1
使用數字賦權的命令格式如下:
chmod abc filename
其中的abc?分別代表3個數字,并且分別對應問個不同的屬組。?即:
數字a?對應?第2到4位,表示擁有者的權限。
數字b?對應?第5到7位,表示同組用戶的權限。
數字c?對應第8到10位,表示其他組的權限。
rwx?對應4,2,1.?那么只讀的權限用4表示[r--],讀寫用6(4+2)表示[rw-],寫加執行用7(4+2+1)表示[rwx]。?只讀加執行用5(4+1)表示[r-x]。
綜合這兩點:上面圖中的的10個屬性含義為:是一個文件,這個文件的“擁有者”可讀、可寫、可執行, “同用戶組的人”也是可讀、可寫、可執行,但是“其他人”沒有任何權限。
下面介紹chmod的文件權限的兩種表示方法:
第一種表示法:符號類型
參數:
用法:
chmod ?[{ugo} {+-=} {xrw}] 文件或目錄(可以是多個文件,以空格分開的要改變權限的文件列表,支持通配符)
參數含義:u 表示“用戶(user)”,文件或目錄的所有者。
g 表示“同組(group)用戶”,用戶所屬組。
o 表示“其他(others)用戶”,其他人。
a 表示“所有(all)用戶”。它是系統默認值,a代表u,g,o三個操作符號可以是:
+ 添加某個權限。
- 取消某個權限。
= 賦予給定權限并取消其他所有權限(如果有的話)。
設置 mode 所表示的權限可用下述字母的任意組合:
r 可讀;w 可寫;x 可執行。
第二種表示方法:數字類型
chmod 權限 文件名
r=4(Read,讀取權限):對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽目 錄的權限。
w=2(Write,寫入權限):對文件而言,具有新增、修改文件內容的權限;對目錄來說,具有刪除、移動目錄內文件的權限。
x=1(eXecute,執行權限):對文件而言,具有執行文件的權限;對目錄了來說該用戶具有進入目錄的權限。
0表示沒有權限,用"-"表示,
通過r=4;w=2;x=1將其相加。所以數字屬性的格式應為3個從0到7的八進制數,其順序是(u)(g)(o)。
即:u,g,o分別對應一個八進制數字,每個數字都是是由r=4;w=2;x=1相加的結果得出來的
權限
數值
rwx rw- r–
764
rw- r– r–
644
rw- rw- r–
664
舉例:
$ chmod +x scriptfile.sh;+x前面省略了a(表示u,g,o)
chmod ? a+w qmfsun.txt
chmod ug+w,o-x text.txt;文件屬主(u) 增加寫權限,與文件屬主同組用戶(g) 增加寫權限,其他用戶(o) 刪除執行權限
chmod a–x mm.txt;chmod –x mm.txt;chmod ugo–x mm.txt 以上這三個命令都是將文件mm.txt的執行權限刪除,它設定的對象為所有使用者。
chmod g+r,o+r qmfsun.txt;使同組和其他用戶對文件qmfsun.txt有讀權限。(在一個命令行中可給出多個權限方式,其間用逗號隔開)
chmod 644 mm.txt;即設定文件mm.txt的屬性為:-rw-r--r--
文件屬主(u)inin 擁有讀、寫權限
與文件屬主同組人用戶(g) 擁有讀權限
其他人(o) 擁有讀權限
chmod 750 wch.txt;即設定wchtxt這個文件的屬性為:-rwxr-x---
文件主本人(u)inin 可讀/可寫/可執行權
與文件主同組人(g) 可讀/可執行權
其他人(o) 沒有任何權限
將檔案 file1.txt 設為所有人皆可讀取 :
chmod ugo+r file1.txt
將檔案 file1.txt 設為所有人皆可讀取 :
chmod a+r file1.txt
將檔案 file1.txt 與 file2.txt 設為該檔案擁有者,與其所屬同一個群體者可寫入,但其他以外的
人則不可寫入 :
chmod ug+w,o-w file1.txt file2.txt
將 ex1.py 設定為只有該檔案擁有者可以執行 :
chmod u+x ex1.py
將目前目錄下的所有檔案與子目錄皆設為任何人可讀取 :
chmod -R a+r *
此外chmod也可以用數字來表示權限如 chmod 777 file
語法為:chmod abc file
其中a,b,c各為一個數字,分別表示User、Group、及Other的權限。
r=4,w=2,x=1
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=7。
范例:
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
若用chmod 4755 filename可使此程式具有root的權限
-rw------- (600) -- 只有屬主有讀寫權限。
-rw-r--r-- (644) -- 只有屬主有讀寫權限;而屬組用戶和其他用戶只有讀權限。
-rwx------ (700) -- 只有屬主有讀、寫、執行權限。
-rwxr-xr-x (755) -- 屬主有讀、寫、執行權限;而屬組用戶和其他用戶只有讀、執行權限。
-rwx--x--x (711) -- 屬主有讀、寫、執行權限;而屬組用戶和其他用戶只有執行權限。
-rw-rw-rw- (666) -- 所有用戶都有文件讀、寫權限。這種做法不可取。
-rwxrwxrwx (777) -- 所有用戶都有讀、寫、執行權限。更不可取的做法。
[root@localhost ~]# chmod 664 a.txt
按照上面的規則,rwx合起來就是4+2+1=7,一個rwxrwxrwx權限全開放的文件,數值表示為777;而完全不開放權限的文件“---------”其數字表示為000。下面舉幾個例子:
-rwx------:等于數字表示700。
-rwxr—r--:等于數字表示744。
-rw-rw-r-x:等于數字表示665。
drwx—x—x:等于數字表示711。
drwx------:等于數字表示700。
實例:
1.將檔案a.txt?設為其他人皆可執行:
amosli@amosli-pc:~/learn/re$ ls -l
total 0
-rw-rw-r-- 1 amosli amosli 0 12月 27 00:18 a.txt
amosli@amosli-pc:~/learn/re$ chmod o+x a.txt
amosli@amosli-pc:~/learn/re$ ls -l
total 0
-rwxrw-r-x 1 amosli amosli 0 12月 27 00:18 a.txt
2.將檔案a.txt設為所有人皆不可讀取:
方法1:
amosli@amosli-pc:~/learn/re$ chmod a-r a.txt
amosli@amosli-pc:~/learn/re$ ls -l
total 0
--wx-w---x 1 amosli amosli 0 12月 27 00:18 a.txt
方法2:
amosli@amosli-pc:~/learn/re$ chmod ugo-r a.txt
amosli@amosli-pc:~/learn/re$ ls -l
total 0
--wx-w---x 1 amosli amosli 0 12月 27 00:18 a.txt
反之,若將讀權限賦給所有人,則將ugo-r 和a-r改為ugo+r ?、a+r即可。
3.將讀寫執行三種權限賦給所有人
amosli@amosli-pc:~/learn/re$ chmod a+rwx a.txt
amosli@amosli-pc:~/learn/re$ ls -l
total 0
-rwxrwxrwx 1 amosli amosli 0 12月 27 00:18 a.txt
使用數字來進行權限管理:
r-- = 4;4(r)+0(-)+0=4;代表u
-w-=2;0+2(w)+0=2;代表g
--x=1; 0+0+1(x)=1;代表o
將對應的值相加即可進行權限管理,如:
rw-=4+2=6;
r-x=4+1=5;
rwx=4+2+1=7;
-wx=2+1=3;
實例:
755就表示rwx ?r-x ?r-x
amosli@amosli-pc:~/learn/re$ chmod 755 a.txt
amosli@amosli-pc:~/learn/re$ ls -l
total 0
-rwxr-xr-x 1 amosli amosli 0 12月 27 00:18 a.txt
其他皆可依照。如:
chmod 777 file1 <==> chmod?a=rwx?file
chmod?771?file? <==> chmod?ug=rwx,o=x?file
$ chmod u+x file 給file的屬主增加執行權限
$ chmod 751 file 給file的屬主分配讀、寫、執行(7)的權限,給file的所在組分配讀、執行(5)的權限,給其他用戶分配執行(1)的權限
$ chmod u=rwx,g=rx,o=x file 上例的另一種形式 (u=rwx,g=rx,o=x中間不能有空格)
$ chmod =r file 為所有用戶分配讀權限
$ chmod 444 file 同上例
$ chmod a-wx,a+r 同上例
$ chmod -R u+r 目錄名稱 遞歸地給directory目錄下所有文件和子目錄的屬主分配讀的權限
1. chmod 的八進制語法的數字說明;
r 4
w 2
x 1
- 0
屬主的權限用數字表達:屬主的那三個權限位的數字加起來的總和。比如上面的例子中屬主的權限是rwx ,也就是4+2+1 ,應該是7;
屬組的權限用數字表達:屬組的那個權限位數字的相加的總和。比如上面的例子中的r-x ,也就是4+0+1 ,應該是5;
其它用戶的權限數字表達:其它用戶權限位的數字相加的總和。比如上面例子中是 r-x ,也就是4+0+1 ,應該是5;
例如:改變一個文件的權限
Linux?chmod遞歸設置目錄755和文件644權限
find /path -type f -exec chmod 644 {} \;?//設置文件權限為644
find /path -type d -exec chmod 755 {} \;?//設置目錄權限為755
[root@localhost ~]# chmod -R 644 bin/.[a-z]*;chmod 會匹配所有以.a到.z 開頭的文件。
[root@localhost ~]# chmod ugo-x linuxsir007.txt 注:把屬主、用戶組及其它用戶的執行權限都減掉
[root@localhost ~]# chmod u+x linuxsir007.txt 注:為文件的屬主增加執行權限
[root@localhost ~]# chmod u-x,go+rw linuxsir007.txt 注:減去文件屬主對文件的執行權,增加屬組和其它用戶對文件的可讀可寫權
用助記語法比較靈活,組合起來比較方便;比如;
u=r+x 為文件屬主添加讀寫權限;
ug=rwx,o=r 為屬主和屬組添加讀、寫、執行權限,為其它用戶設置讀權限。
a+x 為文件的屬主、屬組和其它用戶添加執行權限;
g=u 讓文件的屬組和屬主和權限相同;
對于目錄權限的設置,要用到-R參數;
參數:-R??遞歸更改,即目錄下的所有子目錄以及子目錄下的所有文件?、目錄的屬性都更新成為這個屬性。
用法:chmod ?-R ?755 /opt/huawei;-R表示遞歸處理,如果不加-R,則改的只是文件夾huawei的屬性,文件夾里面的文件屬性沒改,如果我們為一個目錄及其下的子目錄和文件具有相同的屬性,就可以用-R參數;
[root@localhost ~]# chmod -R a+rwx testdir/
對于一個文件夾
1.對于一個文件夾bin,不加-R參數,執行chmod 644 bin,只會改變文件夾本身的權限而不改變其子文件的權限
查看文件夾以及文件夾下全部子文件
2. 改變自身和子文件夾權限,遞歸改權限需要加-R參數
3.對一個目錄,即便你有read的權限,但是沒有x權限,也無法進入目錄
chmod u=rwx,go=rx .bashrc
即便我是一個普通用戶,用戶root的文件在我是屬主的目錄下,我也一樣可以刪除。
很多時候我們僅僅是想為目錄或者子目錄提供可執行的權限使得其可以被搜尋到,卻不想改變在這些目錄中的文件的權限。在我指導這個命令之前,我一般都是找到所有的目錄然后改變它們的權限。但是在unix中我們可以使用chmod有一個更好地方法來做到。你可以使用‘X’(大寫的X)參數來僅僅改變文件目錄的的權限而不影響到文件。讓我們從下面的例子中來看看這種用法。
example@localhost~/test?ls?-lrt
total?8.0K
-r--r--r--??1?example?Domain?Users????0?Jul?15?11:42?stock_trading_systems
drw-rw-rw-+?1?example?Domain?Users????0?Jul?15?14:33?stocks/
example@localhost~/test?chmod?a+X?*
example@localhost~/test?ls?-lrt
total?8.0K
-r--r--r--??1?example?Domain?Users????0?Jul?15?11:42?stock_trading_systems
drwxrwxrwx+?1?example?Domain?Users????0?Jul?15?14:33?stocks/
2. chown 更改文件或文件夾的所屬用戶和用戶組
chown?:更改與文件、目錄的所有者和所屬組
功能:更改某個文件或目錄的屬主和屬組。這個命令也很常用。例如root用戶把自己的一個文件拷貝給用戶xu,為了讓用戶xu能夠存取這個文件,root用戶應該把這個文件的屬主設為xu,否則,用戶xu無法存取這個文件。
用法:chmod [-R] ?user[:group] 文件名/目錄
或者
chown [-R] 賬號名稱:組名 文件或目錄
參數:-R??遞歸更改,即目錄下的所有子目錄以及子目錄下的所有文件?、目錄的擁有者都更新成為這個擁有者。
1.chown userA:group 文件名;用戶和用戶組同時改變,:也可以用.(最好多用:格式)
將文件file1.txt 的擁有者設為users, 群體的使用者 jessie :
chown jessie:users file1.txt
2.chown -R userA:group 文件名/目錄;遞歸改變目錄下所有文件的擁有者和群組
將目錄/tmp/src下的所有檔案與子目錄的擁有者皆設為 users 群體的使用者 lamport :
chown -R lamport:users /tmp/src
3.chown user 文件名/目錄(chown . user 文件名/目錄)
把目錄/his及其下的所有文件和子目錄的屬主改成wang,屬組改成users.
$ chown - R wang.users /his
[root@localhost ~]# ls -l
總用量 1
-rwxrwxrwx 1 root root 12172 8月 15 23:18 qmfsun.txt
可以看到qmfsun.txt文件的所屬用戶組為root,所有者為root。執行下面命令,把qmfsun.txt文件的所有權轉移到用戶qmf:
[root@localhost ~]#chown qmf?qmfsun.txt(chown . qmf qmfsun.txt);這個.可要可不要
[root@localhost ~]# ls -l
總用量 1
-rwxrwxrwx 1 qmf root 12172 8月 15 23:18?qmfsun.txt
4.chown :group 文件名/目錄(或chown _:group 文件名/目錄)
要改變所屬組,可使用下面命令:
[root@localhost ~]# chown :group qmfsun.txt
[root@localhost ~]# ls -l
總用量 1
-rwxrwxrwx 1 user group 12172 8月 15 23:18 conkyrc.sample
如果沒有指定所有者,則不會更改。 所屬組若沒有指定也不會更改,但當加上
“:”時 GROUP 會更改為指定所有者的所屬組。
示例:
chown root /u 將 /u 的屬主更改為”root”。
chown root:staff /u 和上面類似,但同時也將其屬組更改為”staff”。
chown -hR root /u 將 /u 及其子目錄下所有文件的屬主更改為”root”。
范例:將install.log的擁有者改為bin這個賬號:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
將install.log的擁有者與群組改回為root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
當你復制文件給你之外的其他人時,由于復制行為(cp)會復制執行者的屬性與權限,那么別人會無法使用你復制給他的文件所以你要更改這個文件的擁有者與群組
要更改文件 program.c 的所有者:
chown jim program.c;
program.c的用戶訪問權限現在應用到 jim。作為所有者,jim 可以使用
chmod
命令允許或拒絕其他用戶訪問 program.c。
要將目錄 /tmp/src 中所有文件的所有者和組更改為用戶 john 和組 build:
chown -R john:build /tmp/src
文件
/usr/bin/chown
chown命令
/etc/group
包含組標識的文件
/etc/passwd
包含用戶標識的文件
權限規劃:
前三位-》自己
中三位-》組
后三位-》其他人
d:代表目錄
3. chgrp 改變文件或文件夾組
chgrp 改變群組
chgrp命令
功能:改變文件或目錄所屬的組。
用法:chgrp ? [ -R] ?群組名稱??文件/目錄;-R??遞歸更改,即目錄下的所有子目錄以及子目錄下的所有文件?、目錄的用戶組都更新成為這個用戶組。
該命令改變指定指定文件所屬的用戶組。其中group可以是用戶組ID,也可以是/etc/group文件中用戶組的組名。文件名是以空格分開的要改變屬組的文件列表,支持通配符。如果用戶不是該文件的屬主或超級用戶,則不能改變該文件的組。
例1:$ chgrp -R group /opt/local /book
改變/opt/local /book/及其子目錄下的所有文件的屬組為group。
改變用戶和組所有權
為了改變文件或其它文件系統對象的所有者或組,分別使用?chown?或chgrp。這兩個命令都要一個用戶名或組名作參數,后面跟上一個或多個文件名。
# chown root /etc/passwd
# chgrp wheel /etc/passwd
也可以用 chown 命令的另一種形式同時設置所有者和組:
#chown root:wheel /etc/passwd(chown root.wheel /etc/passwd),這種方式用的比較多,所以chgrp用的少
另外:chown改變文件的所屬組,需要用:
chgrp 群組名 文件名
除非您是超級用戶,否則您不可以使用?chown,然而任何人都可以使用?chgrp?來將文件的組所有權改為他們所屬的組。
范例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log
文件默認權限:umask
umask 就是指定 『目前使用者在創建文件或目錄時候的權限默認值』
[root@www ~]# umask
0022?<==與一般權限有關的是后面三個數字!
[root@www ~]# umask -S
u=rwx,g=rx,o=rx
[root@www ~]# umask 002
umask 的分數指的是『該默認值需要減掉的權限!』因為 r、w、x 分別是 4、2、1 分
在默認權限的屬性上,目錄與文件是不一樣的。 x 權限對於目錄是非常重要的! 但是一般文件的創建則不應該有運行的權限,默認的情況如下:
若使用者創建為『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大為 666 分
若使用者創建為『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認為所有權限均開放,亦即為 777 分
例題:
假設你的 umask 為 003 ,請問該 umask 情況下,創建的文件與目錄權限為?
答:
umask 為 003 ,所以拿掉的權限為 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--
umask決定了文件創建(包括目錄)時默認訪問權限。對于文件,執行權限不可以在創建時賦予。必須在創建后使用chmod命令。
umask值是777減去默認權限。
如umask為022,則文件默認訪問權限為644,目錄為755。
查看用戶當前umask
[oracle@odilab?~]$?umask
0022
[oracle@odilab?~]$?umask?066
[oracle@odilab?~]$?umask
0066
[oracle@odilab?~]$?touch?aa.txt
[oracle@odilab?~]$?ls?-ltrh?aa.txt
-rw-------?1?oracle?oinstall?0?Jan?15?08:16?aa.txt
在bash中,通常在~/.bash_profile中配置umask。
1. 文件的默認權限
linux下當我們新建一個文件和目錄時,該文件和目錄的默認權限是什么?
通過umask命令來查看:
$?umask
0002
$?umask?-S
u=rwx,g=rwx,o=rx
權限我們知道有r, w, x三種,umask返回4位的數字,第一位是特殊權限,先看后三位。
002權限表示 --------w-
通過-S參數,以符號類型顯示。
2. 文件與目錄權限
文件:
文件一般為數據記錄,不需要執行(x)權限, 即 ?-rw-rw-rw-,最大為666.
目錄:
目錄的x權限表示用戶能否進入, 默認應該所有權限打開, 即 drwxrwxrwx, 為777權限。
3. 用戶默認權限計算
文件權限:
為最大權限減去umask權限
666 - 002 = (-rw-rw-rw-)- ( --------w-) = -rw-rw-r-- = 664
目錄權限:
777 - 002 = (drwxrwxrwx)- ( d-------w-) = drwxrwxr-x = 775
$?touch?a
$?mkdir?b
$?ll
-rw-rw-r--??1?work?work?????????0?Jun?15?18:59?a
drwxrwxr-x??2?work?work??????4096?Jun?15?19:00?b
一般root賬號的umask為022,
一般用戶為002.保留同組用戶的寫入權限。
Linux 文件、目錄權限探索
2010-05-31 09:58:47|??分類: 學習筆記 |??標簽:|字號大中
在Linux下,目錄的x權限具有特殊的意義,舉例說,如果用戶Hi對A目錄沒有執行權限,即使有讀寫權限,也無法進入該目錄,無法讀取目錄里面的文件b的內容,即使他對b擁有完全的權限rwx.相反,如果對A僅有執行權限,也可以進入該目錄并讀取其中的文件內容。
我做了個實驗來驗證了一下。
先以root賬戶在ganluo的家目錄里創建了一個A目錄,
[root@xiamingshi?ganluo]#?mkdir?A
[root@xiamingshi?ganluo]#?ls?-adl?A
drwxr-xr-x.?2?root?root?4096?2010-05-31?09:15?A
[root@xiamingshi?ganluo]#
Hi對A目錄僅有r-x權限。
以普通賬戶Hi切換到ganluo的家目錄。查看權限,
[Hi@xiamingshi?~]$?cd?../ganluo
[Hi@xiamingshi?ganluo]$?ls?-adl?.
drwxrwxrwx.?34?ganluo?ganluo?4096?2010-05-31?08:29?.
[Hi@xiamingshi?ganluo]$
Hi對ganluo目錄擁有rwx的權限。
下面嘗試進入ganluo下面的A目錄
[Hi@xiamingshi?ganluo]$?cd?A
[Hi@xiamingshi?A]$
可以進入。試著創建一個文件b,
[Hi@xiamingshi?A]$?touch?b
touch:?cannot?touch?`b':?Permission?denied
[Hi@xiamingshi?A]$
沒有權限。
以root身份在A下創建一個b,查看權限,更改其所屬用戶及組。
[root@xiamingshi?ganluo]#?echo?"更無柳絮因風起,唯有葵花向日傾!"?>??A/b
[root@xiamingshi?ganluo]#?ls?-al?A/b
-rw-r--r--.?1?root?root?47?2010-05-31?09:30?A/b
[root@xiamingshi?ganluo]#?chown?Hi:Hi?A/b
[root@xiamingshi?ganluo]#?ls?-al?A/b
-rw-r--r--.?1?Hi?Hi?47?2010-05-31?09:30?A/b
[root@xiamingshi?ganluo]#
Hi先退出A目錄,并以root身份削去Hi對A的讀權限。
[root@xiamingshi?ganluo]#?chmod?o-r?A
[root@xiamingshi?ganluo]#?ls?-adl?A
drwxr-x--x.?2?root?root?4096?2010-05-31?09:30?A
再以Hi身份進入A目錄,發現還是可以進入,這證明只有對一個目錄有執行權限就可以進入該目錄,
[Hi@xiamingshi?ganluo]$?cd?A
[Hi@xiamingshi?A]$
以Hi的身份修改b的權限,賦予自己完全的權限。
[[Hi@xiamingshi?A]$?chmod?700?b
[Hi@xiamingshi?A]$?ls?-al?b
-rwx------.?1?Hi?Hi?47?2010-05-31?09:30?b
雖然原來Hi對b僅有讀寫權限,但由于擁有對b的所有權,所以Hi可以修改b的權限。
Hi退出A目錄后,依舊可以讀取b的內容
[Hi@xiamingshi?A]$?cd?..
[Hi@xiamingshi?ganluo]$?cat?A/b
更無柳絮因風起,唯有葵花向日傾!
以root身份修改A的權限,
[root@xiamingshi?ganluo]#?chmod?776?A
[root@xiamingshi?ganluo]#?ls?-adl?A
drwxrwxrw-.?2?root?root?4096?2010-05-31?09:30?A
現在Hi對A目錄有讀寫的權限,但是沒有執行權限。
再以Hi身份嘗試讀取A下面的b文件的內容
[Hi@xiamingshi?ganluo]$?cat?A/b
cat:?A/b:?Permission?denied
發現無法讀取,沒有權限
列出A的屬性
[Hi@xiamingshi?ganluo]$?ls?-al?A
ls:?cannot?access?A/.:?Permission?denied
ls:?cannot?access?A/..:?Permission?denied
ls:?cannot?access?A/b:?Permission?denied
total?0
d???????????????????????????????????.
d???????????????????????????????????..
-???????????????????????????????????b
畢竟有讀寫的權限,還是可以列出其中的有什么文件、目錄,但很多數據都變成問號了。