您的位置:首页 > 运维架构 > Linux

鸟哥的私房菜--第五章Linux的权限与目录配置--摘录,笔记

2016-10-22 21:55 274 查看
一:不建議你直接使用 root 登入系統,建議使用 su - 這個指令來切換身份喔!離開 su - 則使用 exit 回到 dmtsai 的身份即可!

二:



圖5.2.2、檔案的類型與權限之內容
第一個字元代表這個檔案是『目錄、檔案或連結檔等等』:
當為[ d ]則是目錄,例如上表檔名為『.config』的那一行;
當為[ - ]則是檔案,例如上表檔名為『initial-setup-ks.cfg』那一行;
若是[ l ]則表示為連結檔(link file);
若是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備(可隨機存取裝置);
若是[ c ]則表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠(一次性讀取裝置)。

接下來的字元中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。
第一組為『檔案擁有者可具備的權限』,以『initial-setup-ks.cfg』那個檔案為例, 該檔案的擁有者可以讀寫,但不可執行;
第二組為『加入此群組之帳號的權限』;
第三組為『非本人且沒有加入本群組之其他帳號的權限』。

例題:

若有一個檔案的類型與權限資料為『-rwxr-xr--』,請說明其意義為何?
答:

先將整個類型與權限資料分開查閱,並將十個字元整理成為如下所示:
[-][rwx][r-x][r--]

 1  234  567  890
 1 為:代表這個檔名為目錄或檔案,本例中為檔案(-);

234為:擁有者的權限,本例中為可讀、可寫、可執行(rwx);

567為:同群組使用者權限,本例中為可讀可執行(rx);

890為:其他使用者權限,本例中為可讀(r),就是唯讀之意

同時注意到,rwx所在的位置是不會改變的,有該權限就會顯示字元,沒
195e9
有該權限就變成減號(-)就是了。
三:

例題:
假設test1, test2, test3同屬於testgroup這個群組,如果有下面的兩個檔案,請說明兩個檔案的擁有者與其相關的權限為何?
-rw-r--r--  1 root     root          238 Jun 18 17:22 test.txt
-rwxr-xr--  1 test1    testgroup    5238 Jun 19 10:25 ping_tsai


答:
檔案test.txt的擁有者為root,所屬群組為root。至於權限方面則只有root這個帳號可以存取此檔案,其他人則僅能讀此檔案;

另一個檔案ping_tsai的擁有者為test1,而所屬群組為testgroup。其中:
test1 可以針對此檔案具有可讀可寫可執行的權力;
而同群組的test2, test3兩個人與test1同樣是testgroup的群組帳號,則僅可讀可執行但不能寫(亦即不能修改);
至於沒有加入testgroup這一個群組的其他人則僅可以讀,不能寫也不能執行!

例題:
承上一題如果我的目錄為底下的樣式,請問testgroup這個群組的成員與其他人(others)是否可以進入本目錄?
drwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 groups/


答:
檔案擁有者test1[rwx]可以在本目錄中進行任何工作;
而testgroup這個群組[r-x]的帳號,例如test2, test3亦可以進入本目錄進行工作,但是不能在本目錄下進行寫入的動作;
至於other的權限中[r--]雖然有r ,但是由於沒有x的權限,因此others的使用者,並不能進入此目錄!
四:改變所屬群組, chgrp

改變一個檔案的群組真是很簡單的,直接以chgrp來改變即可,咦!這個指令就是change group的縮寫嘛!這樣就很好記了吧! ^_^。不過,請記得,要被改變的群組名稱必須要在/etc/group檔案內存在才行,否則就會顯示錯誤!

假設你已經是root的身份了,那麼在你的家目錄內有一個名為 initial-setup-ks.cfg 的檔案, 如何將該檔案的群組改變一下呢?假設你已經知道在/etc/group裡面已經存在一個名為users的群組, 但是testing這個群組名字就不存在/etc/group當中了,此時改變群組成為users與testing分別會有什麼現象發生呢?(把文件initial-setup-ks.cfg的群组名更改为users)
[root@study ~]# chgrp [-R] dirname/filename ...
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案、目錄
都更新成為這個群組之意。常常用在變更某一目錄內所有的檔案之情況。
範例:
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May  4 18:01 initial-setup-ks.cfg
[root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group:  `testing' <== 發生錯誤訊息囉~找不到這個群組名~

發現了嗎?檔案的群組被改成users了,但是要改成testing的時候, 就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容才好! 將他英文翻譯成為中文,就知道問題出在哪裡了。

五:改變檔案擁有者, chown

如何改變一個檔案的擁有者呢?很簡單呀!既然改變群組是change group,那麼改變擁有者就是change owner囉!BINGO!那就是chown這個指令的用途,要注意的是, 使用者必須是已經存在系統中的帳號,也就是在/etc/passwd 這個檔案中有紀錄的使用者名稱才能改變。

chown的用途還滿多的,他還可以順便直接修改群組的名稱呢!此外,如果要連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 -R 的選項即可!我們來看看語法與範例:
[root@study ~]# chown [-R] 帳號名稱 檔案或目錄
[root@study ~]# chown [-R] 帳號名稱:群組名稱 檔案或目錄
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更

範例:將 initial-setup-ks.cfg 的擁有者改為bin這個帳號:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin  users 1864 May  4 18:01 initial-setup-ks.cfg

範例:將 initial-setup-ks.cfg 的擁有者與群組改回為root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May  4 18:01 initial-setup-ks.cfg

六:改變權限, chmod

檔案權限的改變使用的是chmod這個指令,但是,權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:
數字類型改變檔案權限

Linux檔案的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限, 先複習一下剛剛上面提到的資料:檔案的權限字元為:『-rwxrwxrwx』, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:
r:4

w:2

x:1
每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:
owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

others= --- = 0+0+0 = 0
所以等一下我們設定權限的變更時,該檔案的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:
[root@study ~]# chmod [-R] xyz 檔案或目錄
選項與參數:
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更

舉例來說,如果要將.bashrc這個檔案所有的權限都設定啟用,那麼就下達: 
[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod 777 .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc

那如果要將權限變成『 -rwxr-xr-- 』呢?那麼權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754 囉!所以你需要下達『 chmod
754 filename』。 另外,在實際的系統運作中最常發生的一個問題就是,常常我們以vim編輯一個shell的文字批次檔後,他的權限通常是 -rw-rw-r-- 也就是664, 如果要將該檔案變成可執行檔,並且不要讓其他人修改此一檔案的話,
那麼就需要-rwxr-xr-x這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令囉!

另外,如果有些檔案你不希望被其他人看到,那麼應該將檔案的權限設定為例如:『-rwxr-----』,那就下達『 chmod 740 filename 』吧! 

例題:
將剛剛你的.bashrc這個檔案的權限修改回-rw-r--r--的情況吧!
答:
-rw-r--r--的分數是644,所以指令為:

chmod 644 .bashrc
(2)符號類型改變檔案權限

還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那麼我們就可以藉由u,
g, o來代表三種身份的權限!此外, a 則代表
all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x囉!也就是可以使用底下的方式來看:



chmodu

g

o

a
+(加入)

-(除去)

=(設定)
r

w

x
檔案或目錄
來實作一下吧!假如我們要『設定』一個檔案的權限成為『-rwxr-xr-x』時,基本上就是:

user (u):具有可讀、可寫、可執行的權限;
group 與 others (g/o):具有可讀與執行的權限。

所以就是:
[root@study ~]# chmod  u=rwx,go=rx  .bashrc
# 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元!
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29  2013 .bashrc

那麼假如是『 -rwxr-xr-- 』這樣的權限呢?可以使用『 chmod
u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的檔案屬性,而我只想要增加.bashrc這個檔案的每個人均可寫入的權限, 那麼我就可以使用:
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod  a+w  .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc

而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:
[root@study ~]# chmod  a-x  .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29  2013 .bashrc
[root@study ~]# chmod 644 .bashrc  # 測試完畢得要改回來喔!

知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限『不會被變動』, 例如上面的例子中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限囉! 這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程式可以擁有執行的權限,
但你又不知道該檔案原本的權限為何,此時,利用『chmod a+x filename』
,就可以讓該程式擁有執行的權限了。

七:

元件內容疊代物件rwx
檔案詳細資料data文件資料夾讀到文件內容修改文件內容執行文件內容
目錄檔名可分類抽屜讀到檔名修改檔名進入該目錄的權限(key)
根據上述的分析,你可以看到,對一般檔案來說,rwx 主要是針對『檔案的內容』來設計權限,對目錄來說,rwx則是針對『目錄內的檔名列表』來設計權限。 其中最有趣的大概就屬目錄的 x 權限了!『檔名怎麼執行』?沒道理嘛!其實,這個 x 權限設計,就相當於『該目錄,也就是該抽屜的 "鑰匙" 』啦! 沒有鑰匙你怎麼能夠打開抽屜呢?對吧!

大致的目錄權限概念是這樣,底下我們來看幾個範例,讓你瞭解一下啥是目錄的權限囉!
例題:
有個目錄的權限如下所示:
drwxr--r--  3  root  root  4096   Jun 25 08:35   .ssh

系統有個帳號名稱為vbird,這個帳號並沒有支援root群組,請問vbird對這個目錄有何權限?是否可切換到此目錄中?
答:
vbird對此目錄僅具有r的權限,因此vbird可以查詢此目錄下的檔名列表。因為vbird不具有x的權限,亦即 vbird 沒有這個抽屜的鑰匙啦! 因此vbird並不能切換到此目錄內!(相當重要的概念!)
上面這個例題中因為vbird具有r的權限,因為是r乍看之下好像就具有可以進入此目錄的權限,其實那是錯的。 能不能進入某一個目錄,只與該目錄的x權限有關啦!此外, 工作目錄對於指令的執行是非常重要的,如果你在某目錄下不具有x的權限, 那麼你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的r或w的權限。

很多朋友在架設網站的時候都會卡在一些權限的設定上,他們開放目錄資料給網際網路的任何人來瀏覽, 卻只開放r的權限,如上面的範例所示那樣,那樣的結果就是導致網站伺服器軟體無法到該目錄下讀取檔案(最多只能看到檔名), 最終用戶總是無法正確的查閱到檔案的內容(顯示權限不足啊!)。要注意:要開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給! 為什麼w不能隨便給,我們來看下一個例子:
例題:
假設有個帳號名稱為dmtsai,他的家目錄在/home/dmtsai/,dmtsai對此目錄具有[rwx]的權限。 若在此目錄下有個名為the_root.data的檔案,該檔案的權限如下:
-rwx------ 1 root  root  4365 Sep 19 23:20  the_root.data

請問dmtsai對此檔案的權限為何?可否刪除此檔案?
答:
如上所示,由於dmtsai對此檔案來說是『others』的身份,因此這個檔案他無法讀、無法編輯也無法執行, 也就是說,他無法變動這個檔案的內容就是了。

但是由於這個檔案在他的家目錄下, 他在此目錄下具有rwx的完整權限,因此對於the_root.data這個『檔名』來說,他是能夠『刪除』的! 結論就是,dmtsai這個用戶能夠刪除the_root.data這個檔案!
Tips

上述的例子解釋是這樣的,假設有個莫名其妙的人,拿著一個完全密封的資料夾放到你的辦公室抽屜中,因為完全密封你也打不開、看不到這個資料夾的內部資料(對檔案來說,你沒有權限)。
但是因為這個資料夾是放在你的抽屜中,你當然可以拿出/放入任何資料在這個抽屜中(對目錄來說,你具有所有權限)。 所以,情況就是:你打開抽屜、拿出這個沒辦法看到的資料夾、將他丟到走廊上的垃圾桶!搞定了 (順利刪除!)!

八:使用者操作功能與權限

我們來處理個特殊的案例!假設兩個檔名,分別是底下這樣:
/dir1/file1
/dir2

假設你現在在系統使用 dmtsai 這個帳號,那麼這個帳號針對 /dir1, /dir1/file1, /dir2 這三個檔名來說,分別需要『哪些最小的權限』才能達成各項任務? 鳥哥彙整如下,如果你看得懂,恭喜你,如果妳看不懂~沒關係~未來再來繼續學!
操作動作/dir1/dir1/file1/dir2重點
讀取 file1 內容xr-要能夠進入 /dir1 才能讀到裡面的文件資料!
修改 file1 內容xrw-能夠進入 /dir1 且修改 file1 才行!
執行 file1 內容xrx-能夠進入 /dir1 且 file1 能運作才行!
刪除 file1 檔案wx--能夠進入 /dir1 具有目錄修改的權限即可!
將 file1 複製到 /dir2xrwx要能夠讀 file1 且能夠修改 /dir2 內的資料
你可能會問,上面的表格當中,很多時候 /dir1 都不必有 r 耶!為啥?我們知道 /dir1 是個目錄,也是個抽屜!那個抽屜的 r 代表『這個抽屜裡面有燈光』, 所以你能看到的抽屜內的所有資料夾名稱 (非內容)。但你已經知道裡面的資料夾放在哪個地方,那,有沒有燈光有差嘛?你還是可以摸黑拿到該資料夾的!對吧! 因此,上面很多動作中,你只要具有 x 即可!r 是非必備的!只是,沒有 r 的話,使用 [tab] 時,他就無法自動幫你補齊檔名了!這樣理解乎?
Tips

看了上面這個表格,你應該會覺得很可怕喔!因為,要讀一個檔案時,你得要具有『這個檔案所在目錄的 x 權限』才行!所以,通常要開放的目錄, 至少會具備 rx
這兩個權限!現在你知道為啥了吧?

九:


Linux目錄配置的依據--FHS

FHS依據檔案系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種交互作用的形態,用表格來說有點像底下這樣:
 可分享的(shareable)不可分享的(unshareable)
不變的(static)/usr (軟體放置處)/etc (設定檔)
/opt (第三方協力軟體)/boot (開機與核心檔)
可變動的(variable)/var/mail (使用者郵件信箱)/var/run (程序相關)
/var/spool/news (新聞群組)/var/lock (程序相關)
上表中的目錄就是一些代表性的目錄,該目錄底下所放置的資料在底下會談到,這裡先略過不談。 我們要瞭解的是,什麼是那四個類型?
可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行檔與使用者的郵件等資料, 是能夠分享給網路上其他主機掛載用的目錄;

不可分享的:自己機器上面運作的裝置檔案或者是與程序有關的socket檔案等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。

不變的:有些資料是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、文件說明檔、系統管理員所管理的主機服務設定檔等等;

可變動的:經常改變的資料,例如登錄檔、一般用戶可自行收受的新聞群組等。

事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼資料而已,分別是底下這三個目錄的定義:
/ (root, 根目錄):與開機系統有關;
/usr (unix software resource):與軟體安裝/執行有關;
/var (variable):與系統運作過程有關。

Tips

這個
root 在 Linux 裡面的意義真的很多很多~多到讓人搞不懂那是啥玩意兒。 如果以『帳號』的角度來看,所謂的 root 指的是『系統管理員!』的身份, 如果以『目錄』的角度來看,所謂的 root 意即指的是根目錄,就是 / 啦~ 要特別留意喔!

十:


絕對路徑與相對路徑

除了需要特別注意的FHS目錄配置外,在檔名部分我們也要特別注意喔!因為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種檔名/路徑的寫法依據是這樣的:
絕對路徑:由根目錄(/)開始寫起的檔名或目錄名稱, 例如 /home/dmtsai/.bashrc;
相對路徑:相對於目前路徑的檔名寫法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正開頭不是 / 就屬於相對路徑的寫法

而你必須要瞭解,相對路徑是以『你當前所在路徑的相對位置』來表示的。舉例來說,你目前在 /home 這個目錄下, 如果想要進入 /var/log 這個目錄時,可以怎麼寫呢?
cd /var/log   (absolute)
cd ../var/log (relative)

因為你在 /home 底下,所以要回到上一層 (../) 之後,才能繼續往 /var 來移動的! 特別注意這兩個特殊的目錄:
.  :代表當前的目錄,也可以使用 ./ 來表示;
.. :代表上一層目錄,也可以 ../ 來代表。

這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達方式, 就是代表上一層與目前所在目錄的工作狀態喔!很重要的吶!
例題:
如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內?
答:
由於/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中,因此最簡單的指令下達方法為:
cd /var/spool/mail
cd ../cron

如此就不需要在由根目錄開始寫起了。這個相對路徑是非常有幫助的!尤其對於某些軟體開發商來說。 一般來說,軟體開發商會將資料放置到/usr/local/裡面的各相對目錄,妳可以參考圖3.2.1的相對位置。 但如果使用者想要安裝到不同目錄呢?就得要使用相對路徑囉!^_^
例題:
網路文件常常提到類似『./run.sh』之類的資料,這個指令的意義為何?
答:
由於指令的執行需要變數(bash章節才會提到)的支援,若你的執行檔放置在本目錄,並且本目錄並非正規的執行檔目錄(/bin, /usr/bin等為正規),此時要執行指令就得要嚴格指定該執行檔。『./』代表『本目錄』的意思,所以『./run.sh』代表『執行本目錄下, 名為run.sh的檔案』囉!
十一:


重點回顧

Linux的每個檔案中,可分別給予擁有者、群組與其他人三種身份個別的 rwx 權限;
群組最有用的功能之一,就是當你在團隊開發資源的時候,且每個帳號都可以有多個群組的支援;
利用ls -l顯示的檔案屬性中,第一個欄位是檔案的權限,共有十個位元,第一個位元是檔案類型, 接下來三個為一組共三組,為擁有者、群組、其他人的權限,權限有r,w,x三種;
如果檔名之前多一個『 . 』,則代表這個檔案為『隱藏檔』;
若需要root的權限時,可以使用 su - 這個指令來切換身份。處理完畢則使用 exit 離開 su 的指令環境。
更改檔案的群組支援可用chgrp,修改檔案的擁有者可用chown,修改檔案的權限可用chmod
chmod修改權限的方法有兩種,分別是符號法與數字法,數字法中r,w,x分數為4,2,1;
對檔案來講,權限的效能為:
r:可讀取此一檔案的實際內容,如讀取文字檔的文字內容等;
w:可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案);
x:該檔案具有可以被系統執行的權限。

對目錄來說,權限的效能為:
r (read contents in directory)
w (modify contents of directory)
x (access directory)

要開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給;
能否讀取到某個檔案內容,跟該檔案所在的目錄權限也有關係 (目錄至少需要有 x 的權限)。
Linux檔名的限制為:單一檔案或目錄的最大容許檔名為 255 個英文字元或 128 個中文字元;
根據FHS的官方文件指出, 他們的主要目的是希望讓使用者可以瞭解到已安裝軟體通常放置於那個目錄下
FHS訂定出來的四種目錄特色為:shareable, unshareable, static, variable等四類;
FHS所定義的三層主目錄為:/, /var, /usr三層而已;
絕對路徑檔名為從根目錄 / 開始寫起,否則都是相對路徑的檔名。
原文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: