linux用户权限

来源:互联网 发布:酒店网络电视系统 编辑:程序博客网 时间:2024/05/16 16:18
在我們 Linux 系統當中,預設的情況下,所有的系統上的帳號與一般身份使用者,還有那個 root 的相關資訊,都是記錄在 /etc/passwd 這個檔案內的。至於密碼則是記錄在 /etc/shadow 這個檔案下。 此外, Linux 所有的群組名稱都紀錄在 /etc/group 內!這三個檔案可以說是 Linux 系統裡面帳號、密碼、群組資訊的集中地囉!不要隨便刪除這三個檔案啊! ^_^
 ls 是『list』的意思,與在早期的 DOS 年代的指令 dir 類似功能。 而參數『-al』則表示列出所有的檔案 ( 包含隱藏檔,就是檔名前面第一個字元為 . 的那種檔案 ) 。如上所示,在你第一次以 root 身份登入 Linux 時,如果你輸入指令後,應該有上列的幾個東西, 先解釋一下上面七個欄位個別的意思:

檔案屬性的示意圖
圖二、檔案屬性的示意圖

  1. 第一欄代表這個檔案的屬性: 這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個屬性:
    檔案的十個屬性內容
    圖三、檔案的十個屬性內容

    • 第一個屬性代表這個檔案是『目錄、檔案或連結檔等等』:
      • 當為[ d ]則是目錄,例如上表的第 11 行;
      • 當為[ - ]則是檔案,例如上表的第 5 行;
      • 若是[ l ]則表示為連結檔(link file);
      • 若是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備;

如何改變檔案權限

好了,我們已經知道檔案權限對於一個系統的安全重要性了,也知道檔案的權限對於使用者與群組的相關性了, 好了,那麼如何修改一個檔案的權限呢?又!有多少檔案的權限我們可以修改呢? 其實一個檔案的權限很多嘛!大致上我們先介紹幾個簡單的,例如:群組、擁有者、各種身份的權限等等。

  • chgrp :改變檔案所屬群組
  • chown :改變檔案所屬人
  • chmod :改變檔案的屬性、 SUID 、等等的特性
  • 若是[ c ]則表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠。

[root@linux ~]# chmod [-R] xyz 檔案或目錄
參數:
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄
     都更新成為這個群組之意。常常用在變更某一目錄的情況。

chmod u
g
o
a +(加入)
-(除去)
=(設定) r
w
x 檔案或目

 

何改變檔案權限

好了,我們已經知道檔案權限對於一個系統的安全重要性了,也知道檔案的權限對於使用者與群組的相關性了, 好了,那麼如何修改一個檔案的權限呢?又!有多少檔案的權限我們可以修改呢? 其實一個檔案的權限很多嘛!大致上我們先介紹幾個簡單的,例如:群組、擁有者、各種身份的權限等等。
  • chgrp :改變檔案所屬群組
  • chown :改變檔案所屬人
  • chmod :改變檔案的屬性、 SUID 、等等的特性

數字類型改變檔案權限

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@linux ~]# chmod [-R] xyz 檔案或目錄參數:xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。-R : 進行遞迴( recursive )的持續變更,亦即連同次目錄下的所有檔案、目錄     都更新成為這個群組之意。常常用在變更某一目錄的情況。
例題三:將剛剛您的 .bashrc 這個檔案的屬性改回原來的 -rw-r--r--
答:
    chmod 644 .bashrc
目錄屬性的意義:
剛剛上面我們提到的屬性幾乎都是針對一般檔案的特性在說明,那麼如果是針對目錄時, 那個 r, w, x 對目錄是什麼意義呢?簡單的說:
  • r (read contents in directory): 表示具有讀取目錄結構清單的權限,所以當您具有讀取 (r) 一個目錄的權限時, 您就可以利用 ls 這個指令將該目錄的內容列表顯示出來!

  • w (modify contents of directory): 這個可寫入的權限對目錄來說,是很了不起的! 因為他表示您將具有異動該目錄結構清單的權限,也就是底下這些權限:

    • 建立新的檔案與目錄;
    • 刪除已經存在的檔案與目錄(不論該檔案是屬於誰的!)
    • 將已存在的檔案或目錄進行更名;
    • 搬移該目錄內的檔案、目錄位置。
    • 所以說,如果您是一般身份使用者,例如鳥哥的帳號 dmtsai ,那麼在 /home/dmtsai 這個家目錄內, 無論是誰 (包括 root) 建立的檔案,無論該檔案屬於誰,無論該檔案的屬性是什麼, dmtsai 這個使用者都『有權力將該檔案刪除』的喔!


  • x (access directory): 這個在上頭我們已經稍微提過了,這個 x 與能否進入該目錄有關呢!
好了,那麼我們來簡單的做個測試看看,底下可能會有很多您沒有見過的指令, 不要擔心,先照著作看看,等到未來提到該指令時,您自然就會瞭解了。
[root@linux ~]# cd /tmp[root@linux tmp]# mkdir testing[root@linux tmp]# chmod 744 testing[root@linux tmp]# touch testing/testing[root@linux tmp]# chmod 600 testing/testing# 這個 mkdir 是在建立目錄用的指令!是 make directory 的縮寫。# 我們用 root 的身份在 /tmp 底下建立一個名為 testing 的目錄,# 並且將該目錄的權限變為 744 ,該目錄的擁有者為 root 喔!# 另外, touch 可以用來建立一個沒有內容的檔案,因此, touch testing/testing# 可以建立一個空的 /tmp/testing/testing 檔案喔![root@linux tmp]# ls -aldrwxr--r--   2 root root 4096 Jul 14 01:05 testing# 仔細看一下,目錄的權限是 744 ,且所屬群組與使用者均是 root 喔!# 接下來,我們將 root 的身份切換成為一般身份使用者。# 鳥哥的系統裡面有個 dmtsai 的一般身份使用者帳號,所以切換身份成為 dmtsai [root@linux tmp]# su dmtsai# 那個 su 的指令是用來『變換身份』的一個指令,我們未來會詳細介紹。# 注意看,底下這一行中,發現使用者變為 dmtsai 了,而且提示字元變成 $ 了!# 也就是說,現在操作系統的人變成 dmtsai 了!那麼 dmtsai 這個人對於 # /tmp/testing 是屬於 others 的權限,那他可以對 /tmp/testing 幹嘛?[dmtsai@linux tmp]$ ls -l testing   <== 此時身份為 dmtsaitotal 0?---------  ? ? ? ?           ? testing# 可以查閱裡面的資訊喔!因為dmtsai 具有 r 的權限,不過,畢竟權限不夠,# 很多資料竟然是問號 (?) 來的~怪怪的緊~[dmtsai@linux tmp]$ cd testing  <== 此時身份為 dmtsaibash: cd: testing/: Permission denied# 發現了嗎?即使我們具有 r 的權限,但是沒有 x ,所以 # dmtsai 無法進入 /tmp/testing 喔![dmtsai@linux tmp]$ exit[root@linux tmp]# chown dmtsai testing# 使用 exit 就可以離開 su 的功能了。我們將這個 testing 目錄的擁有者設定為# dmtsai ,此時 dmtsai 就成為 owner 了,那麼這個使用者又能幹麻呢?[root@linux tmp]# su dmtsai[dmtsai@linux tmp]$ cd testing  <== 此時身份為 dmtsai[dmtsai@linux testing]$ ls -l  <== 此時身份為 dmtsai-rw-------  1 root root 0 Jul 14 01:13 testing# 再切換身份成為 dmtsai ,此時就能夠進入 testing 了!查閱一下內容。# 發現了 testing 這個檔案存在喔!權限是只有 root 才能夠存取~# 那我們測試一下能否刪除呢?[dmtsai@linux testing]$ rm testing  <== 此時身份為 dmtsairm: remove write-protected regular empty file `testing'? y# 竟然可以刪除!這樣理解了嗎?!
從屬性的角度來看,上面的檔名每個都是『目錄名稱』,較為特殊的是 root ,由於 root 這個目錄是管理員 root 的家目錄,這個家目錄可重要了! 所以一定要設定成較為嚴密的 700 ( rwx------ )這個屬性才行吶!如果以較為完整的樹狀目錄來視察的話, 可以將整個 Linux 的樹狀目錄繪製成下圖:

根據 FHS 定義的各層目錄相關性