權限在操作系統是尤為重要的,無論是windows和linux中,都少不了權限這么一說,權限的大小決定了你能操作些什么,在linux中,權限對目錄和文件的意義是不同的,并且還有特殊權限。今天,我們就來說說一說權限在linux中的重要性以及權限操作命令。
權限:權限決定用戶對文件或目錄的使用范圍,權限如果設定的不恰當會帶來很大安全隱患。其中root的權限最大,能做任何事,之所以設定root用戶權限為最大是為了方便與管理用戶或系統重要信息的,而不是在工作中用來維護服務器的,所以在生產環境中基本沒人拿root來操作,只是必要時才使用,因為root用戶帶來的后果是非常嚴重的。下面先來說說權限位,再說權限對于文件或目錄的作用
我們先來看一下權限位:
使用`ls -ld / ` 命令查看根目錄的文件類型,再做分析;
[root@localhost ~]# ls -ld / dr-xr-xr-x. 24 root root 4096 Jul 25 11:43 /
其中第一段(dr-xr-xr-x. ),里面有11個字符位,第一位(d)為文件類型,d 表示為目錄,緊接著為(r-xr-xr-x),里面有九個字符,而每三個字符又分為一個獨立的權限位。
分別代表為:第一個三個字符(r-x)表示對于此目錄屬主(owner)的操作權限;
第二個三個字符為(r-x),表示針對于此目錄的屬組(group)的操作權限;
第三個三個字符也為(r-x),它則表示為除屬主屬組以外的其他用戶(other)的操作權限。
所以,這三段權限一共9個字符分別針對于屬主、屬組、其他用戶
(dr-xr-xr-x. )這其中之后的 " . " 則表示特殊控制權限位,有則表示為" + ",無則表示為" . "
(dr-xr-xr-x. 24 root root 4096 Jul 25 11:43 / ) 此中兩個root分別依次代表屬主和屬組,其他用戶則表示屬主屬組除外的的用戶。
下面來細分一下(rwx)各代表的含義,而每三位(rwx)這表示為一組權限,每一位權限對于文件的和目錄的含義又是不同的。
r=read //讀 w=write //寫 x=executable //執行
對文件的含義:
r(可讀權限):可以使用類似cat等命令查看其文件的內容 w(可寫權限):可以編輯或刪除其文件 x(可執行) :可以運行此文件
對目錄的含義:
r: 可以對此目錄查看目錄內的文件內容,如 ls w:可以在此目錄創建文件或目錄,但必須有x權限的前提下 x:可以使用cd切換進此目錄或 ls -l 查看目錄內文件的詳細信息
而每一位權限都可已使用八進制來表示,每三位為一組;下面來看一下怎么表示的:
一組權限為rwx,用八進制來表示一下; 注意:此排序是不能亂排序的。
權限 二進制 八進制 rwx 111 7 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7
如此一來,則每三位權限為一組就可以直接用數字來表示了,上面的 / 的權限用八進制表示則為555 吧! 慢慢去練習吧!
說了那么多,你應該對權限位和用八進制表示權限有了了解吧!下面來說說怎么修改文件或目錄的權限:
文件和目錄的權限其含義則是不同的,我們對文件上的三組九位權限進行設定就可對用戶進行控制。
更改文件或目錄權限命令
chmod :更改權限
更改權限并不是任何人都可以更改的,root除外,其余用戶只能更改屬主為自己的文件或目錄的權限
chmod有4種更改方式,分別為賦權、授權、八進制更改和參照文件更改。
要更改指定的用戶或組或其他用戶的權限,有幾類用戶,則表示為:
o(other):更改其他用戶權限 g(group):更改屬組權限 u(user) : 更改屬主權限 a(all) :更改所有用戶權限(以上三種一起更改權限)
chmod權限表示法:
1.賦權表示法
用 “=”來進行賦權更改,所謂賦權更改就是直接更換其原有的權限,直接更改為指定的權限。
2.授權表示法
用 “ + ” “ – ” 來進行授權更改,其含義為在原有的權限上增加或減少權限
3.八進制表示法
用八進制 如:“777” 直接對目錄或文件進行更改
4.參照文件更改
使用選項“ –reference=/SOMEFILE ”來進行更改,其含義為參照指定文件的權限來對當前指定文件進行更改,其權限則和參照的文件一樣。
注意:第一種和第二種可以只針對其中一類用戶進行更改,第三種和第四種則不能單獨更改一類用戶。
chmod使用:
chmod [OPTION]… MODE[,MODE]… FILE…
//此用法針對賦權表示法和授權表示法使用
1.賦權表示法使用
#chmod u=rx /etc/passwd
//這表示改變/etc/passwd文件的屬主權限為rx,其中要更改的權限rwx順序可以不同,也可以使用任意一類用戶進行授權
2.授權表示法
#chmod u-x /etc/passwd
//這表示將/etc/passwd文件的屬主權限減去“x”執行權限 其中要更改的權限rwx順序可以不同 ,也可以使用任意一類用戶進行授權
chmod [OPTION]… OCTAL-MODE FILE…
1.八進制表示法
#chmod 777 /etc/passwd
//表示對passwd文件的三類用戶(屬主、屬組、其他用戶)的權限都設置成為777(每一類用戶的權限都為rwx)當然可以更改為其他的,自行轉換
chmod [OPTION]… –reference=RFILE FILE…
1.參照文件更改
#chmod --reference=/etc/inittab /etc/passwd
//表示將/etc/passwd文件的權限設定為和inittab文件一樣的權限, 前面一個文件為被參照的文件,后一個為被修改的文件
注意:如果對目錄進行更改權限時,如果也要修改目錄下的文件和目錄一樣的權限,則使用 -R 選項,代表遞歸修改目錄下的文件,以上所有方法都可加R選項。
注意:在更改時后面的作用文件或目錄可以是多個
更改文件或目錄的屬主屬組
chown:改變文件屬主屬組
修改文件或目錄的屬主和屬組,root用戶可以對所有文件或目錄進行屬組屬主更改,普通用戶只能更改屬主是自己的才能使用該命令,該命令也可以使用參照文件更改法。
使用方法:
1.chown [OPTION]… [OWNER][:[GROUP]] FILE…
改變文件的屬主屬組,中間用冒號分割,后面為要作用的文件
#chown user1:group1 /etc/passwd // 將passwd文件的屬主修改為user1,屬組修改為group1
2.chown [OPTION]… –reference=RFILE FILE…
#chown --reference=/etc/inittab /etc/passwd //表示將/etc/passwd文件的屬主屬組設定為和inittab文件一樣的屬主屬組, 前面一個文件為被參照的文件,后一個為被修改的文件
3.如果對目錄進行更改屬主屬組時,如果也要修改目錄下的文件和目錄一樣的屬主屬組,則使用 -R 選項,代表遞歸修改目錄下的文件,所有方法都可加R選項
注意:第一種方法更改文件或目錄的屬主屬組有一些小技巧:
1.如果我們想對文件只修改屬組時,則直接使用冒號+屬組名
#chown :magedu /etc/fstab
//只對該文件進行屬組更改,屬主不變
2.如果我們想對文件只修改屬主時,直接寫上屬主用戶名即可
#chown root /etc/fstab
//修改該文件的屬主為root屬組不變
注意:在更改時后面的作用文件或目錄可以是多個
針對于文件或目錄的屬組還有命令
chgrp:更改組
chgrp命令用來改變文件或目錄所屬的用戶組。該命令用來改變指定文件所屬的用戶組。其中,組名可以是用戶組的id,也可以是用戶組的組名。文件名可以是由空格分開的要改變屬組的文件列表,也可以是由通配符描述的文件集合。如果用戶不是該文件的文件主或超級用戶(root),則不能改變該文件的組。也可以使用參照文件更改法更改
chgrp [OPTION]… GROUP FILE…
#chgrp magedu /testdir/magedu.txt //將文件的屬組更改為指定的組名,其中組名可用其GID代替
chgrp [OPTION]… –reference=RFILE FILE…
#chown --reference=/etc/inittab /etc/passwd //表示將/etc/passwd文件的屬組設定為和inittab文件一樣的屬組, 前面一個文件為被參照的文件,后一個為被修改的文件
注意:在更改時后面的作用文件或目錄可以是多個。
很多人都沒有注意到當我們在創建文件或目錄時都會自動設有權限,root用戶默認創建文件的權限是644,目錄權限默認是755,普通用戶創建文件是默認是664,目錄默認權限是775,但這些權限是怎么規定的呢?是誰在作怪呢?
下面我們就來說一下新建文件或目錄時的默認權限。
在命令行輸入umask即可看到返回的值,這是什么呢?沒錯,就是umask(反掩碼)值在作怪,就是它決定了用戶在新建文件或目錄時的默認權限,配置文件在/etc/bashrc,這里面定義了我們在創建文件或目錄時的權限
[root@localhost testdir 0022
他是怎么計算的呢?首先,系統規定,所有用戶在創建文件是默認是使用666為權限,目錄是777為權限,然后當用戶創建文件或目錄時會和相應的umask值進行減法運算,最后的出的結果即為文件或目錄的權限。
要注意,umask值是/etc/bashrc里定義的,他是用一個判斷語句來決定的,當登錄的用戶UID小于0時使用022作為umask值,否則使用002作為umask值,然后在與系統默認創建文件和目錄的值(666/777)進行減法運算,最后得出的就是文件或目錄的值。
//這就是判斷umask值的if else語句
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi
怎么減呢?沒錯就是當系統判斷完之后給出umask值來減
例如:當前用戶為root,umask為022(第一個0不用管),然后我們創建一個文件,查看其權限是644,當我們創建目錄時其默認權限是755,怎么算的呢,系統默認創建文件是權限是666然后減去當前用戶umask值,就得到創建文件的權限值。目錄則是777減去umask值得出755就是目錄的權限值。so…that's it.
[root@localhost testdir]# umask 0022 [root@localhost testdir]# touch umask.txt [root@localhost testdir]# ls -l umask.txt -rw-r--r-- 1 root root 0 Jul 25 16:49 umask.txt [root@localhost testdir]# ls -ld umask.dir drwxr-xr-x 2 root root 4096 Jul 25 16:51 umask.dir
我們來看一下普通用戶創建文件和目錄時的權限,看一看是不是我們說的這樣!
//普通用戶umask值為002,然后用系統默認的666和777減去umask值之后就得出文件和目錄的權限值(664、775)
[magedu@localhost ~]$ umask 0002 [magedu@localhost ~]$ touch umask.txt [magedu@localhost ~]$ ls -l umask.txt -rw-rw-r-- 1 magedu magedu 0 Jul 25 16:55 umask.txt [magedu@localhost ~]$ mkdir umask.dir [magedu@localhost ~]$ ls -ld umask.dir/ drwxrwxr-x 2 magedu magedu 4096 Jul 25 16:55 umask.dir/
那么系統為什么要經過umask值來創建文件或目錄呢?
因為系統默認創建文件或目錄是權限是666和777,這樣豈不是不太不安全,所有文件和目錄權限都那么大萬一使用root用戶誤操作不就完蛋了。所以引入umask值來控制用戶在創建文件或目錄是的權限問題。
umask的定義與使用:
1.在命令行中直接輸入umask + 值 就會定義當前的用戶創建文件或目錄是更改了原有的權限。
[root@localhost testdir]# umask 0022 [root@localhost testdir]# umask 002 [root@localhost testdir]# umask 0002 //當我們再創建文件或目錄時權限就不是原來的權限的。因為umask值改變了。 [root@localhost testdir]# touch umask2.txt [root@localhost testdir]# ls -l umask2.txt -rw-rw-r-- 1 root root 0 Jul 25 17:16 umask2.txt
注意:我們在命令行中定義的umask值使用的是數字,我們也可以使用直接定義的方法“umask u=rw,g=r, o= ” 系統umask值會自動轉換為137,系統使用777減去給定的各類權限的八進制數,得到umask碼。這里需要再次注意的是當我們更改umask值之后如果文件默認的666減去我們更改umask值得到的結果如果有奇數,則統一加1,目錄則不用管。
2. 把umask值寫入配置文件中。
可以調用umask -p 選項的執行結果來重定向追加到配置文件。
[root@localhost testdir]# umask -p umask 0033 //使用umask -p 查看當前的umask值并顯示umask值本身的 字符串,這不就可以讓我們調用了嗎? [root@localhost testdir]# umask 022 //定義umask值為022 [root@localhost testdir]# umask -p //用-p 顯示值 umask 0022 [root@localhost testdir]# echo `umask -p` >> /etc/bashrc //使用echo 調用命令的執行結果然后追加到配置文件中(這里也可以更改為家目錄的文件中) [root@localhost testdir]# source /etc/bashrc //重新讀取配置文件讓umask生效 [root@localhost testdir]# umask 0022
3.使用umask -p 將umask值以rwx方式顯示
[root@localhost testdir]# umask 0022 //原來的值 [root@localhost testdir]# umask -S u=rwx,g=rx,o=rx //將原來的值用777減去之后轉換為rwx形式
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/27702
總結的很詳細,示例也很清晰,可以嘗試