1. 程式人生 > >Linux學習筆記之——使用者、使用者組、檔案屬性許可權、目錄概念

Linux學習筆記之——使用者、使用者組、檔案屬性許可權、目錄概念

Linux學習筆記之——使用者、使用者組、檔案許可權、目錄概念

摘要:對一些很重要的概念和目錄進行說明、後面筆記中的練習就不再贅述這些概念以及他們之間的關係了。很重要!

一:使用者與使用者組

        Linux是一個多使用者作業系統,那麼如何保證安全性和隱私性呢?即我擁有的東西我只想讓我授權的別的使用者看到,而不是誰都可以進我家翻箱倒櫃隨便來?先了解幾個概念之後、就會慢慢了解Linux如何實現。

        1、檔案擁有者

                Linux下所有的東西都是檔案、不管是具體檔案還是目錄。那麼當多人同機操作的時候、考慮到每個人的隱式權和個人喜好,檔案擁有者就相當重要了,比如A有一個存放情書的資料夾,那A估計不會喜歡誰都能看這些情書,那麼A就可以用密碼箱鎖起來,別人就不能隨意翻動了。A就是這個密碼箱(可看成資料夾)的擁有者。

        2、使用者組的概念

                使用者組主要是針對開發團隊來說的、假如在我的主機上面有兩個團體,這第一個團體名稱為 testgroup 而他的成員是 test1, test2, test3 三個,第二個團體名稱為 treatgoup 他的團員為 treat1, treat2, treat3,這兩個團體之間是互相有競爭性質的,但是卻又要繳交同一份報告,然而每組團員又需要同時可以修改自己的團體內任何人所建立的檔案,且不能讓非自己團體以外的人看到自己的檔案內容!這個時候怎麼辦?在 Linux 底下可經由簡易的檔案許可權設定,就能限制非自己團隊( 亦即是群組 )的其它人不能夠閱覽內容!而且亦可以讓自己的團隊成員可以修改我所建立的檔案!同時,如果自己還有私人隱密的檔案,仍然可以設定成讓自己的團隊成員也看不到自己檔案資料!另外,如果 teacher 這個賬號是 testgroup 與 treatgroup 這兩個群組的老師,他想要同時觀察兩者的進度,因此需要兩邊的群組都能夠進去觀看,這個時候,您可以設定 teacher 這個賬號,同時支援 testgroup 與 treatgroup 這兩個群組、也就是說,每個人都可以有多個群組的支援!

        更具體點的例子

        假設有一家人,家裡只有三兄弟,分別是王大毛、王二毛與王三毛三個人,而這個家庭是登記在王大毛的名下的!所以,『王大毛家有三個人,分別是王大毛、王二毛與王三毛』,而且這三個人都有自己的房間,並且共同擁有一個客廳!

        由於王家三個人各自擁有自己的房間,所以,王二毛雖然可以進入王三毛的房間,但是二毛不能翻三毛的抽屜喔!因為三毛不想讓別人亂翻!因為抽屜裡面可能有三毛自己私人的東西,例如情書,日記等,這是『私人的空間』,所以當然不能讓二毛拿!

        由於共同擁有客廳,三兄弟都可以使用!因為是一家人! 那個『王大毛家』就是所謂的『群組』,至於三兄弟就是分別為三個『使用者』,而這三個使用者是在同一個群組裡面的!而三個使用者雖然在同一群組內,但是我們可以設定『許可權』,好讓某些使用者個人的資訊不被群組的所有人查詢,以保有個人『私人的空間』!而設定群組共享,則可讓大家共同分享!

        3、其他人的概念

                那麼今天又有個人,叫做張小豬,他是張小豬家的人,與王家沒有關係!這個時候,除非王家認識張小豬,然後開門讓張小豬進來王家,否則張小豬永遠沒有辦法進入王家,更不要說進到王三毛的房間!不過,如果張小豬透過關係認識了三毛,並且跟王三毛成為好朋友,那麼張小豬就可以透過三毛進入王家!那個張小豬就是所謂的『其它人, Others 』!因此,我們就可以知道,在 Linux 裡面,任何一個檔案都具有『User, Group 及 Others』三個許可權!

二:Linux檔案許可權

        這部分是我們一定要掌握的東西、Linux所操作的就是檔案、如果最基本的都搞不清楚、那麼下一步就很難進行了。

        1、Linux檔案屬性

                輸入命令:ls –al     會有下面顯示

               drwxr-xr-x   23 root    root         4096 Feb 16 13:35 ..

               -rw-r--r--    1 root    root         1210 Feb 10 06:03anaconda-ks.cfg

                a)    第一欄代表這個檔案的屬性:

                   第一個屬性代表這個檔案是『目錄、檔案或連結檔案』:

                   當為[ d ]則是目錄,例如上表的第 1行;

                   當為[ - ]則是檔案,例如上表的第 2行;

                   若是[ l ]則表示為連結檔(linkfile);

                   若是[ b ]則表示為裝置檔案裡面的可供儲存的介面裝置;

                   若是[ c ]則表示為裝置檔案裡面的串列埠裝置,例如鍵盤、滑鼠。

                   接下來的屬性中,三個為一組,且均為『rwx』的三個引數的組合。其中,[ r ]代表可讀、[ w ]代表可寫、[ x ]代表可執行:

                   第一組為『擁有人的許可權』,

                   第二組為『同群組的許可權』;

                   第三組為『其它非本群組的許可權』。

                [-][rwx][r-x][r--]

                1 234  567  890

                1     為:代表這個檔名為目錄或檔案(上面為檔案)

                234為:擁有人的許可權(上面為可讀、可寫、可執行)

                567為:同群組使用者許可權(上面為可讀可執行)

                890為:其它使用者許可權(上面為僅可讀)

               除此之外,需要特別留意的是x 這個標號!若檔名為一個目錄的時候,例如上表中的 .ssh 這個目錄:

                drwx------    2 root    root         4096 Feb 10 00:44.ssh  

                可以看到這是一個目錄,而且只有 root 可以讀寫與執行。但是若為底下的樣式時,請問非 root 的其它人是否可以進入該目錄呢? 

                drwxr--r--    2 root    root         4096 Feb 10 00:44.ssh

                似乎好像是可以!因為有可讀[ r ]存在!『錯!』答案是非 root 這個賬號的其它使用者均不可進入 .ssh 這個目錄,為什麼呢?因為 x 與目錄 的關係相當的重要,如果您在該目錄底下不能執行任何指令的話,那麼自然也就無法執行 ls, cd 等指令,所以,也就無法進入了,因此,請特別留意的是,如果您想要開放某個目錄讓一些人進來的話,請記得將該目錄的 x 屬性給開放!

               另外,你也必須要更加的小心的是,在 Windows 底下一個檔案是否具有執行的能力是藉由『附檔名』來執行的,例如:.exe, .bat, .com 等等,但是在 Linux 底下,我們的檔案是否能執行,則是藉由是否具有 x 這個屬性來決定的!所以,跟檔名是沒有絕對的關係的!這點還請特別留意!

                b).    第二欄表示為連結佔用的節點(i-node) ( 若為目錄時,通常與該目錄底下還有多少目錄有關 );

                c).    第三欄表示這個檔案(或目錄)的『擁有人』;

                d).    第四欄表示擁有人的群組;

                這裡再次解釋一下,在 Linux 中,你的 ID ( 如 root 或 test 等賬號均是所謂的 ID ) 即是你的身份,而且你還有附屬在一個或多個群組之下,例如剛剛我們上面提到的,你有一個團體 ( 即群組 ) 代號為 testgroup ,且這個群體裡有三個人,其代號分別是 test1, test2, 與 test3,則這三個人為同一群組即 testgroup!那麼如果以上圖的[-rwxrwx---]的檔案屬性來看,如果該檔案屬於 test1 所有,那麼 test2, test3 亦有讀、寫、執行的權力,因為他們都屬於同一個 group !而如果您不是屬於 test1, test2, test3 的任何一個人,也不屬於 testgroup 這個群組時,那麼您將不具備讀、寫、執行這個檔案的許可權了!

                e).    第五欄為這個檔案的大小;

                f).    第六欄為這個檔案的建檔日期或者是最近的修改日期,分別為月份、日期及時間。請特別留意,如果您是以繁體中文來進行安裝您的 Linux 時,那麼預設的語系可能會被改為中文。而由於中文無法顯示在文字型態的終端機上面,所以這一欄會成為亂碼,這個時候,請修改一下 /etc/sysconfig/i18n 這個檔案裡面的『 LC_TIME 』修改為:『 LC_TIME=en 』再儲存離開,再登入一次,就可以得到英文字形顯示的日期了!那麼如何修改該檔案?以 root 身份用 vi 修改!;

                g).    第七欄為這個檔案的檔名,如果檔名之前多一個『 . 』,則代表這個檔案為『隱藏檔』,例如.bashrc_history檔名即是隱藏檔,由於我們有下一個引數為 ls -al,所以連隱藏檔都列出來,如果你只輸入 ls 則檔名有加『 . 』的檔案就不會被顯示出來!

        2、更改檔案許可權

                chgrp :改變檔案所屬群組
                chown :改變檔案所屬人
                chmod :改變檔案的屬性、 SUID 、等等的特性

                會在以後筆記中詳細記錄。

三:Linux目錄配置

        1、主要目錄列表

/bin

這是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用的執行檔的地方,有時候這個目錄的內容與 /usr/bin 是一樣的,是給一般使用者使用的執行程式放置的所在!

/boot

這裡就是放置你 Linux 核心與開機相關檔案的地方,這個目錄底下的 vmlinuz-xxx 就是 Linux 的 Kernel !而如果你的開機管理程式選擇 grub 的話,那麼這個目錄內還有 /boot/grub 這個次目錄!

/dev

擺放一些與裝置有關的檔案。基本上 Unix 或 Linux 系統均把裝置當成是一個檔案來看待,例如 /dev/fd0 代表軟盤,亦即 Windows 系統下的 A 槽,而 /dev/cdrom 則代表光碟,等等!而如上所述,在這個目錄底下的檔案型態通常分為兩種,分別是管理磁碟 Input/Output 的 Block 檔案與周邊的 Character 檔案。

/etc

系統在開機過程中需要讀取的檔案均在這個目錄中,例如 Lilo 的引數、人員的賬號與密碼、系統的主要設定、http 架站的引數內容、你所要開啟的服務專案等等都在這個目錄中,所以在這個目錄下工作的時候,請記得一定要備份,否則檔案被改掉了是很麻煩的!

/etc/rc.d

這個路徑主要在記錄一些開關機過程中的 scripts 檔案, scripts 有點像是 DOS 下的批次檔(.bat檔名)

/etc/rc.d/init.d

所有服務預設的啟動 scripts 都是放在這裡的,例如要啟動與關閉 iptables 的話,可以: 
/etc/rc.d/init.d/iptables start
/etc/rc.d/init.d/iptables stop

/home

基本上,這是系統預設的使用者的家目錄( home directory ),在你新增一般使用者賬號的時候,預設的使用者家目錄都在這裡設定好!

/lib

在 Linux 執行或編譯一些程式的時候,均會使用到一些函式庫(library),就在這個目錄下

/mnt

這是軟盤與光碟預設掛載點的地方;通常軟盤掛在 /mnt/floppy 下,而光碟掛在 /mnt/cdrom 下,不過不一定、你可以隨便找一個地方來掛載!

/proc

系統核心與執行程式的一些資訊。例如你的網路狀態的問題!這個目錄將在啟動 Linux 的時候自動的被掛上,而且該目錄底下不會佔去硬碟空間!因為裡面都是『記憶體』內的資料

/root

系統管理員的家目錄

/sbin

放置一些系統管理常用的程式,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。與 /bin 不太一樣的地方,這個目錄下的程式通常是給 root 等系統管理員使用的程式!

/tmp

這是讓一般使用者暫時存放檔案的地方,例如你在安裝 Linux 下的軟體時,可能軟體預設的工作目錄就是 /tmp ,所以你要定期的清理一下,當然,重要資料最好不要放在這裡!

/usr

這是最重要的一個目錄了,裡面含有相當多的系統資訊,內有許多目錄,用來存放程式與指令等等。這個目錄有點像是 Windows 底下的『Program Files』那個目錄

/usr/bin

放置可執行程式,如前所說,這個目錄的檔案與 /bin 幾乎是相同的。

/usr/include

一些套件的header檔。基本上,當我們在以 tarball 方式( *.tar.gz 的方式安裝軟體)安裝某些資料時,會使用到的一些函式庫都在這個目錄底下!

/usr/lib

內含許多程式與子程式所需的函式庫。

/usr/sbin

放置管理者使用程式,與 /sbin 類似的功能

/var

這個目錄可就重要了!所有服務的登入檔案或錯誤訊息檔案(log files)都在 /var/log 裡面,此外,一些資料庫如 MySQL 的資料庫則在 /var/lib 裡頭,此外,使用者未讀郵件郵件的預設放置地點為 /var/spool/mail !

        2、需要注意的目錄

        在 Linux 系統中,有幾個目錄是特別需要注意的,以下提供幾個需要注意的目錄,以及預設相關的用途:

                a)     /etc:這個目錄相當重要,如前所述,你的開機與系統資料檔案均在這個目錄之下,因此當這個目錄被破壞,那你的系統大概也就差不多該死掉了!而在往後的檔案中,你會發現我們常常使用這個目錄下的 /etc/rc.d/init.d 這個子目錄,因為這個 init.d 子目錄是開啟一些 Linux 系統服務的 scripts (可以想成是批次檔)的地方。而在 /etc/rc.d/rc.local 這個檔案是開機的執行檔,有點像是舊 Windows 系統下的 autoexec.bat 及 config.sys 檔。所以,如果你有需要在開機載入的服務或執行檔案,可以寫在這個檔案的最後一行,則開機時就會自動幫你載入執行檔了!

                b)     /bin, /sbin, /usr/bin,/usr/sbin:這是系統預設的執行檔案的放置目錄,例如 root 常常使用的 userconf, netconf, perl, gcc, c++等等的資料都放在這幾個目錄中,所以如果你在提示字元下找不到某個執行檔時,可以在這四個目錄中查一查!其中, /bin, /usr/bin 是給系統使用者使用的指令,而 /sbin, /usr/sbin 則是給系統管理員使用的指令!

                c)     /usr/local:這是系統預設的讓你安裝你後來升級的套件的目錄。例如,當你發現有更新的 Web 套件(如 Apache )可以安裝,而你又不想以 rpm 的方式升級你的套件,則你可以將 apache 這個套件安裝在 /usr/local 底下。安裝在這裡有個好處,因為目前大家的系統都是差不多的,所以如果你的系統要讓別人接管的話,也比較容易上手!也比較容易找的到資料!因此,如果你有需要的話,通常我都會將 /usr/local/bin 這個路徑加到我的 path 中。

                d)     /home:這個是系統將有賬號的人口的家目錄設定的地方。

                e)     /var:這個路徑就重要了!不論是登入、各類服務的問題發生時的記錄、以及常態性的服務記錄等等的記錄目錄,所以當你的系統有問題時,就需要來這個目錄記錄的檔案資料中察看問題的所在!而 mail 的預設放置也是在這裡!

                f)      /usr/share/man, /usr/local/man:這兩個目錄為放置各類套件說明檔的地方,例如你如果執行 man man,則系統會自動去找這兩個目錄下的所有說明檔案,如果有相同的資料就會顯示出來!