?
3.5 權(quán)限管理命令
3.5.1 權(quán)限介紹
1.為什么需要權(quán)限
絕大多數(shù)用戶使用的是個(gè)人計(jì)算機(jī),而使用個(gè)人計(jì)算機(jī)的用戶一般都是被信任的用戶(如家人、朋友等)。在這種情況下,大家都可以使用管理員身份直接登錄。又因?yàn)楣芾韱T擁有最大權(quán)限,所以給我們帶來(lái)了錯(cuò)覺,以為在計(jì)算機(jī)中不需要分配權(quán)限等級(jí),不需要使用不同的賬戶。
但是在服務(wù)器上就不一樣了,在服務(wù)器上運(yùn)行的數(shù)據(jù)越重要(如游戲數(shù)據(jù)),價(jià)值越高(如電子商城數(shù)據(jù)、銀行數(shù)據(jù)),那么對(duì)權(quán)限的設(shè)定就要越詳細(xì),用戶的分級(jí)也要越明確。所以,在服務(wù)器上,絕對(duì)不是所有的用戶都使用root身份登錄,而要根據(jù)不同的工作需要和職位需要,合理分配用戶等級(jí)和權(quán)限等級(jí)。
2.文件的所有者、所屬組和其他人
用ls -l命令,可以查看文件的所有者、所屬組,例如:
[root@localhost ~]#ls-l mylog.log
? ? -rw-r--r--.1LaytonWang root34Dec1021:21mylog.log
這里的LaytonWang用戶就是文件的所有者,root組就是文件的所屬組。文件的所有者一般就是這個(gè)文件的建立者。
用戶組就是一組用戶的集合,那為什么要把用戶放入一個(gè)用戶組中呢?當(dāng)然是為了方便管理。如果我們有100位用戶,而這100位用戶對(duì)同一個(gè)文件的權(quán)限是一致的,那我們是一位用戶一位用戶地分配權(quán)限方便,還是把100位用戶加入一個(gè)用戶組中,然后給這個(gè)用戶組分配權(quán)限方便呢?不言而喻,一定是給一個(gè)用戶組分配權(quán)限更加方便。
3.權(quán)限位的含義
ls -l命令,長(zhǎng)格式顯示的第一列就是文件的權(quán)限,例如:
[root@localhost ~]#ls-l mylog.log
? ? -rw-r--r--.1LaytonWang root34Dec1021:21mylog.log
第一列的權(quán)限位如果不計(jì)算最后的“.”(這個(gè)點(diǎn)的含義我們?cè)诤竺娼忉專?,則共有10位,這10位權(quán)限位的含義如下圖所示。

●第1位代表文件類型。
Linux不像Windows使用擴(kuò)展名表示文件類型,而是使用權(quán)限位的第1位表示文件類型。雖然Linux文件的種類不像Windows中那么多,但是分類也不少,詳細(xì)情況可以使用“info ls”命令查看。這里只講一些常見的文件類型。
“-”:普通文件。
“b”:塊設(shè)備文件。這是一種特殊設(shè)備文件,存儲(chǔ)設(shè)備都是這種文件,如分區(qū)文件/dev/sda1就是這種文件。
“c”:字符設(shè)備文件。這也是特殊設(shè)備文件,輸入設(shè)備一般都是這種文件,如鼠標(biāo)、鍵盤等。
“d”:目錄文件。Linux中一切皆文件,所以目錄也是文件的一種。
“l(fā)”:軟鏈接文件。
“p”:管道符文件。這是一種非常少見的特殊設(shè)備文件。
“s”:套接字文件。這也是一種特殊設(shè)備文件,一些服務(wù)支持Socket訪問(wèn),就會(huì)產(chǎn)生這樣的文件。
●第2~4位代表文件所有者的權(quán)限。
如果有字母,則代表?yè)碛袑?duì)應(yīng)的權(quán)限;如果是“-”,則代表沒有對(duì)應(yīng)的權(quán)限。
“r”:代表read,是讀取權(quán)限。
“w”:代表write,是寫權(quán)限。
“x”:代表execute,是執(zhí)行權(quán)限。
●第5~7位代表文件所屬組的權(quán)限,同樣擁有“rwx”權(quán)限。
●第8~10位代表其他人的權(quán)限,同樣擁有“rwx”權(quán)限。
以上就是文件基本權(quán)限的含義。
我們?cè)倏纯礄?quán)限位的這個(gè)“.”的作用。這個(gè)點(diǎn)是在CentOS 6以上的系統(tǒng)中才出現(xiàn)的,在以前的系統(tǒng)中是沒有的。如果在文件的權(quán)限位中含有“.”,則表示這個(gè)文件受SE Linux的安全規(guī)則管理。
3.5.2 基本權(quán)限的命令
修改權(quán)限的命令chmod:
●命令名稱:chmod。
●英文原意:change file mode bits。
●所在路徑:/usr/bin/chmod。
●執(zhí)行權(quán)限:所有用戶。
●功能描述:修改文件的權(quán)限模式。
(1)命令格式
[root@localhost ~]#chmod [選項(xiàng)] 權(quán)限模式 文件名
? ? 選項(xiàng):
? ? ? ? -R: 遞歸設(shè)置權(quán)限,也就是給子目錄中的所有文件設(shè)定權(quán)限
(2)權(quán)限模式
chmod命令的權(quán)限模式的格式是“[ugoa][[+-=][perms]]”,也就是“[用戶身份][[賦予方式][權(quán)限]]”的格式。
●用戶身份。
u:代表所有者(user)。
g:代表所屬組(group)。
o:代表其他人(other)。
a:代表全部身份(all)。
●賦予方式。
+:加入權(quán)限。
-:去除權(quán)限。
=:設(shè)置權(quán)限。
●權(quán)限。
r:讀取權(quán)限(read)。
w:寫權(quán)限(write)。
x:執(zhí)行權(quán)限(execute)。
例子1:用“+”加入權(quán)限
[root@localhost ~]#touch iron_man
? ? [root@localhost ~]# ll iron_man
? ? -rw-r--r--.1root root0Jan2507:29 iron_man
? ? #這個(gè)文件的默認(rèn)權(quán)限是“所有者:讀、寫權(quán)限;所屬組:只讀權(quán)限;其他人:只讀權(quán)限”
? ? [root@localhost ~]#chmodu+x iron_man
? ? #給所有者加入執(zhí)行權(quán)限
? ? [root@localhost ~]# ll iron_man
? ? -rwxr--r--.1root root0Jan2507:29iron_man
例子2:給多個(gè)身份同時(shí)加入權(quán)限
[root@localhost ~]#chmodg+w, o+w iron_man
? ? #給所屬組和其他人同時(shí)加入寫權(quán)限
? ? [root@localhost ~]# ll iron_man
? ? -rwxrw-rw-.1root root0Jan2507:29iron_man
例子3:用“-”減去權(quán)限
[root@localhost ~]#chmodu-x, g-w, o-w iron_man
? ? #給所有者減去執(zhí)行權(quán)限,給所屬組和其他人都減去寫權(quán)限,也就是恢復(fù)默認(rèn)權(quán)限
? ? [root@localhost ~]# ll iron_man
? ? -rw-r--r--.1root root0Jan2507:29iron_man
例子4:用“=”設(shè)置權(quán)限
用“+-”賦予權(quán)限是比較麻煩的,需要先確定原始權(quán)限是什么,然后在原始權(quán)限的基礎(chǔ)上加減權(quán)限。其實(shí)可以使用“=”來(lái)直接設(shè)定權(quán)限,例如:
[root@localhost ~]#chmodu=rwx, g=rw, o=rw iron_man
? ? #給所有者賦予權(quán)限“rwx”,給所屬組和其他人賦予權(quán)限“rw”
? ? [root@localhost ~]# ll iron_man
? ? -rwxrw-rw-.1root root0Jan2507:29iron_man
使用“=”賦予權(quán)限,確實(shí)不用在原始權(quán)限的基礎(chǔ)之上進(jìn)行加減了,但是依然要寫很長(zhǎng)一條命令,還可以使用數(shù)字權(quán)限的方式來(lái)賦予權(quán)限。
(3)數(shù)字權(quán)限
數(shù)字權(quán)限的含義:
文件的“讀、寫、執(zhí)行”三種權(quán)限,占用了三個(gè)位置,可以用3位二進(jìn)制來(lái)對(duì)應(yīng)這個(gè)三個(gè)位置。對(duì)應(yīng)位置有權(quán)限為“1”,對(duì)應(yīng)位置沒有權(quán)限為“0”,設(shè)置權(quán)限時(shí)用對(duì)應(yīng)的八進(jìn)制數(shù)設(shè)置。
●000:代表“---”權(quán)限,八進(jìn)制為0。
●001:代表“--x”權(quán)限,八進(jìn)制為1。
●010:代表“-w-”權(quán)限,八進(jìn)制為2。
●011:代表“-wx”權(quán)限,八進(jìn)制為3。
●100:代表“r--”權(quán)限,八進(jìn)制為4。
●101:代表“r-x”權(quán)限,八進(jìn)制為5。
●110:代表“rw-”權(quán)限,八進(jìn)制為6。
●111:代表“rwx”權(quán)限,八進(jìn)制為7。
例如:給文件賦予“755”權(quán)限,二進(jìn)制為“111”“101”“101”,即“rwx”“r-x”“r-x”。
[root@localhost ~]#chmod755 iron_man
? ? [root@localhost ~]# ll iron_man
? ? -rwxr-xr-x.1root root0Jan2507:29iron_man
我們很少會(huì)使用“457”這樣的權(quán)限,因?yàn)檫@樣的權(quán)限是不合理的,因?yàn)槲募姓叩臋?quán)限還沒有其他人的權(quán)限大呢。除非是實(shí)驗(yàn)需要,否則一般情況下所有者的權(quán)限要大于所屬組和其他人的權(quán)限。
3.5.3 基本權(quán)限的含義
(1)權(quán)限含義的解釋
首先,讀、寫、執(zhí)行權(quán)限對(duì)文件和目錄的作用是不同的。
①權(quán)限對(duì)文件的作用。
●讀(r):
對(duì)文件有讀(r)權(quán)限,代表可以讀取文件中的數(shù)據(jù)。如果把權(quán)限對(duì)應(yīng)到命令上,那么一旦對(duì)文件有讀(r)權(quán)限,就可以對(duì)文件執(zhí)行cat、more、less、head、tail等文件查看命令。
●寫(w):
對(duì)文件有寫(w)權(quán)限,代表可以修改文件中的數(shù)據(jù)。如果把權(quán)限對(duì)應(yīng)到命令上,那么一旦對(duì)文件有寫(w)權(quán)限,就可以對(duì)文件執(zhí)行vim、echo等修改文件數(shù)據(jù)的命令。
注意:對(duì)文件有寫權(quán)限,是不能刪除文件本身的,只能修改文件中的數(shù)據(jù)。如果要想刪除文件,則需要對(duì)文件的上級(jí)目錄擁有寫權(quán)限。
●執(zhí)行(x):
對(duì)文件有執(zhí)行(x)權(quán)限,代表文件擁有了執(zhí)行權(quán)限,可以運(yùn)行。在Linux中,只要文件有執(zhí)行(x)權(quán)限,這個(gè)文件就是執(zhí)行文件了。只是這個(gè)文件到底能不能正確執(zhí)行,不僅需要執(zhí)行(x)權(quán)限,還要看文件中的代碼是不是正確的語(yǔ)言代碼。對(duì)文件來(lái)說(shuō),執(zhí)行(x)權(quán)限是最高權(quán)限。
②權(quán)限對(duì)目錄的作用。
●讀(r):
對(duì)目錄有讀(r)權(quán)限,代表可以查看目錄下的內(nèi)容,也就是可以查看目錄下有哪些子文件和子目錄。如果把權(quán)限對(duì)應(yīng)到命令上,那么一旦對(duì)目錄擁有了讀(r)權(quán)限,就可以在目錄下執(zhí)行l(wèi)s命令,查看目錄下的內(nèi)容了。
●寫(w):
對(duì)目錄有寫(r)權(quán)限,代表可以修改目錄下的數(shù)據(jù),也就是可以在目錄中新建、刪除、復(fù)制、剪切子文件或子目錄。如果把權(quán)限對(duì)應(yīng)到命令上,那么一旦對(duì)目錄擁有了寫(w)權(quán)限,就可以在目錄下執(zhí)行touch、rm、cp、mv命令。對(duì)目錄來(lái)說(shuō),寫(w)權(quán)限是最高權(quán)限。
●執(zhí)行(x):
目錄是不能運(yùn)行的,那么對(duì)目錄擁有執(zhí)行(x)權(quán)限,代表可以進(jìn)入目錄。如果把權(quán)限對(duì)應(yīng)到命令上,那么一旦對(duì)目錄擁有了執(zhí)行(x)權(quán)限,就可以對(duì)目錄執(zhí)行cd命令,進(jìn)入目錄。
3.5.4 所有者和所屬組命令
(1)chown命令
chown是修改文件和目錄的所有者和所屬組的命令。
●命令名稱:chown。
●英文原意:change file owner and group。
●所在路徑:/usr/bin/chown。
●執(zhí)行權(quán)限:所有用戶。
●功能描述:修改文件和目錄的所有者和所屬組。
①命令格式
[root@localhost ~]#chown [選項(xiàng)] 所有者:所屬組 文件或目錄
? ? 選項(xiàng):
? ? ? ? -R:遞歸設(shè)置權(quán)限,也就是給子目錄中的所有文件設(shè)置權(quán)限
②常見用法
例子1:修改文件的所有者
之所以需要修改文件的所有者,是因?yàn)橘x予權(quán)限的需要。當(dāng)有普通用戶需要對(duì)某個(gè)文件擁有最高權(quán)限的時(shí)候,如果把這個(gè)普通用戶的權(quán)限修改為最高權(quán)限,是非常不安全的做法。合理的做法是修改文件的所有者,這樣既能讓普通用戶擁有最高權(quán)限,又不會(huì)影響其他普通用戶。例如:
[root@localhost ~]#touch iron_man
? ? [root@localhost ~]# ll iron_man
? ? -rw-r--r--.1root root0Jan2508:39 iron_man
? ? #文件的所有者是root,普通用戶LaytonWang對(duì)這個(gè)文件僅擁有只讀權(quán)限
? ? [root@localhost ~]#chown LaytonWang iron_man
? ? #修改文件的所有者
? ? [root@localhost ~]# ll iron_man
? ? -rw-r--r--.1LaytonWang root0Jan2508:39 iron_man
? ? #所有者變成了LaytonWang用戶,這時(shí)LaytonWang用戶對(duì)這個(gè)文件就擁有了讀、寫權(quán)限
例子2:修改文件的所屬組
修改所屬組,也是為了調(diào)整文件的權(quán)限。如果可以把用戶加入同一個(gè)組當(dāng)中,然后直接調(diào)整所屬組的權(quán)限,那當(dāng)然要比一個(gè)一個(gè)用戶賦予權(quán)限要簡(jiǎn)單方便。例如:
[root@localhost ~]#chown LaytonWang: LaytonWang iron_man
? ? #“:”之前是文件的所有者,之后是所屬組。這里的“:”也可以使用“.”代替
? ? [root@localhost ~]# ll iron_man
? ? -rw-r--r--.1LaytonWang LaytonWang0Jan2508:39iron_man
Linux中用戶組的建立與Windows中是不同的。在Windows中,新建的用戶都屬于users這個(gè)組,而不會(huì)建立更多的新組。但是在Linux中,每個(gè)用戶建立之后,都會(huì)建立和用戶名同名的用戶組,作為這個(gè)用戶的初始組,user用戶組是自動(dòng)建立的。
例子3:普通用戶修改權(quán)限
并不是只有root用戶才可以修改文件的權(quán)限,而是root用戶可以修改任何文件的權(quán)限。但是普通用戶只能修改自己文件的權(quán)限。也就是說(shuō),只有普通用戶是這個(gè)文件的所有者,才可以修改文件的權(quán)限。
[root@localhost ~]# cd /home/LaytonWang/? ? #進(jìn)入LaytonWang用戶的家目錄
? ? [root@localhost LaytonWang]# touch test
? ? #由root用戶新建文件test
? ? [root@localhost LaytonWang]# ll test
? ? -rw-r--r--.1root root0Jan2508:56 test
? ? #文件所有者和所屬組都是root用戶
? ? [root@localhost LaytonWang]# su- LaytonWang
? ? #切換為L(zhǎng)aytonWang用戶
? ? [LaytonWang@localhost ~]$chmod755 test
? ? chmod: changing permissions of ‘test’: Operation not permitted
? ? # LaytonWang用戶不能修改test文件的權(quán)限
? ? [LaytonWang@localhost ~]$ exit
? ? #退回到root身份
? ? [root@localhost LaytonWang]# chown LaytonWang test
? ? #由root用戶把test文件的所有者改為L(zhǎng)aytonWang用戶
? ? [root@localhost LaytonWang]# su- LaytonWang
? ? #切換為L(zhǎng)aytonWang用戶
? ? [LaytonWang @localhost ~]$chmod755 test
? ? # LaytonWang用戶由于是test文件的所有者,所以可以修改文件的權(quán)限
? ? [LaytonWang @localhost ~]$ ll test
? ? -rwxr-xr-x.1LaytonWang root0Jan2508:56test
(2)chgrp命令
●命令名稱:chgrp。
●英文原意:change group ownership。
●所在路徑:/urs/bin/chgrp。
●執(zhí)行權(quán)限:所有用戶。
●功能描述:修改文件和目錄的所屬組。
例如:
[root@localhost ~]#touch iron_man
? ? [root@localhost ~]#chgrp LaytonWang iron_man
? ? #修改iron_man文件的所屬組為L(zhǎng)aytonWang用戶組
? ? [root@localhost ~]# ll iron_man
? ? -rw-r--r--.1root LaytonWang0Jan2509:10iron_man
3.5.5 umask默認(rèn)權(quán)限
(1)umask默認(rèn)權(quán)限的作用
umask默認(rèn)權(quán)限是Linux權(quán)限的一種,主要用于讓Linux中的新建文件和目錄擁有默認(rèn)權(quán)限。Linux是一個(gè)比較安全的操作系統(tǒng),而安全的基礎(chǔ)就是權(quán)限,所以,在Linux中所有的文件和目錄都要有基本的權(quán)限,新建的文件和目錄當(dāng)然也要有默認(rèn)的權(quán)限。
查看系統(tǒng)的umask權(quán)限:
[root@localhost ~]# umask
? ? 0022? ? #用八進(jìn)制數(shù)值顯示umask權(quán)限
? ? [root@localhost ~]# umask -S
? ? u=rwx, g=rx, o=rx
? ? #用字母表示文件和目錄的初始權(quán)限
查看數(shù)值的umask權(quán)限,看到的是4位數(shù)字“0022”,其中第一個(gè)數(shù)字“0”代表的是文件的特殊權(quán)限(SetUID、SetGID、Sticky BIT),后3位數(shù)字“022”才是真正的umask默認(rèn)權(quán)限。
(2)umask默認(rèn)權(quán)限的計(jì)算方法
先了解一下新建文件和目錄的默認(rèn)最大權(quán)限。
●對(duì)文件來(lái)講,新建文件的默認(rèn)最大權(quán)限是666,沒有執(zhí)行(x)權(quán)限。這是因?yàn)閳?zhí)行權(quán)限對(duì)文件來(lái)講比較危險(xiǎn),不能在新建文件的時(shí)候默認(rèn)賦予,而必須通過(guò)用戶手工賦予。
●對(duì)目錄來(lái)講,新建目錄的默認(rèn)最大權(quán)限是777。這是因?yàn)閷?duì)目錄而言,執(zhí)行(x)權(quán)限僅僅代表進(jìn)入目錄,所以即使建立新文件時(shí)直接默認(rèn)賦予,也沒有什么危險(xiǎn)。
何計(jì)算umask默認(rèn)權(quán)限。按照官方的標(biāo)準(zhǔn)算法,umask默認(rèn)權(quán)限需要使用二進(jìn)制進(jìn)行邏輯與和邏輯非聯(lián)合運(yùn)算才可以得到正確的新建文件和目錄的默認(rèn)權(quán)限。這種方法既不好計(jì)算,也不好理解,并不推薦。
這里還是按照權(quán)限字母來(lái)講解umask權(quán)限的計(jì)算方法。我們就按照默認(rèn)的umask值是022來(lái)分別計(jì)算一下新建文件和目錄的默認(rèn)權(quán)限。
●文件的默認(rèn)權(quán)限最大只能是666,換算成字母就是“-rw-rw-rw-”;而umask的值是022,也換算成字母就是“-----w--w-”。把兩個(gè)字母權(quán)限相減,得到的就是新建文件的默認(rèn)權(quán)限:
(-rw-rw-rw-)-(-----w--w-)=(-rw-r--r--)。
●目錄的默認(rèn)權(quán)限最大可以是777,換算成字母就是“drwxrwxrwx”;而umask的值是022,也換算成字母就是“d----w--w-”。也把兩個(gè)字母權(quán)限相減,得到的就是新建目錄的默認(rèn)權(quán)限:
(drwxrwxrwx)-(d----w--w-)=(drwx-r-xr-x)。
(3)umask默認(rèn)權(quán)限的修改方法
umask默認(rèn)權(quán)限可以直接通過(guò)命令來(lái)進(jìn)行修改,例如:
[root@localhost ~]# umask002? ? [root@localhost ~]# umask033
不過(guò),通過(guò)命令進(jìn)行的修改只能臨時(shí)生效,一旦重啟或重新登錄就會(huì)失效。如果想讓修改永久生效,則需要修改對(duì)應(yīng)的環(huán)境變量配置文件/etc/profile。例如:
[root@localhost ~]#vi/etc/profile
? ? …省略部分內(nèi)容…
? ? if[ $UID -gt199] && ["`id -gn`"="`id -un`"];then? ? umask 002? ? ? ? #如果UID大于199(普通用戶),則使用此umask值
? ? else? ? ? ? umask 022? ? ? ? #如果UID小于199(超級(jí)用戶),則使用此umask值
? ? fi? ? …省略部分內(nèi)容…
小結(jié):
文件權(quán)限位共10位(如:-rw-r--r--),第1位是文件類型,第2~4、5~7、8~10位分別是文件所有者、所屬組、其他人的權(quán)限;chmod命令用來(lái)修改權(quán)限;chown命令用來(lái)修改文件和目錄的所有者和所屬組;chgrp命令用來(lái)修改文件和目錄的所屬組;umask用來(lái)查看和臨時(shí)設(shè)置文件和目錄的默認(rèn)初始權(quán)限。