linux學習筆記-11用戶身份與文件權限

用戶身份

  • UID(即User IDentification的縮寫):每個用戶都有對應的UID值,并且不相同,帳戶名稱與UID保存在/etc/passwd文件中,而帳戶密碼則保存在/etc/shadow文件中

  • root只是個名字,真正讓它成為超級用戶的是其UID值

    • 超級用戶UID 0:root用戶默認為0。
    • 系統用戶UID 1-999:系統中系統服務由不同用戶運行,更加安全,默認被限制登陸系統。
    • 普通用戶UID 1000~:即管理員創建的用于日常工作而不能管理系統的普通用戶。
  • GID(即Group IDentification的縮寫):可將多個用戶加入某個組中,方便指派任務或工作, 每個用戶在被創建時均會創建一個默認組(其GID與UID相同,俗稱基本組)而后加入的則叫擴展組

文件權限組成

文件類型

  • 當執行ls -l 或 ls -all 命令后顯示的結果中,第一個字符一般用來區分文件和目錄:后面的第2~10個字符是用來表示權限。

    • :表示這是一個普通的文件。
    • d:表示是一個目錄,事實上在ext2fs中,目錄是一個特殊的文件。
    • l: 表示這是一個符號鏈接文件,實際上它指向另一個文件。
    • b:表示塊設備文件
    • c: 表示字符設備文件
    • p:表示管道
    • s:表示套接字
  • 每個用戶都擁有自己的專屬目錄,通常集中放置在/home目錄下,這些專屬目錄的默認權限為rwx------,表示目錄所有者本身具有所有權限,其他用戶無法進入該目錄

  • 執行mkdir命令所創建的目錄,其默認權限為rwxr-xr-x

一般權限

  • 第2~10個字符當中的每3個為一組,左邊三個字符表示所有者權限,中間3個字符表示與所有者同一組的用戶的權限,右邊3個字符是其他用戶的權限

    • r(Read,讀取):對文件而言,具有讀取文件內容的權限;對目錄來說,可以讀取目錄結構和權限

    • w(Write,寫入):對文件而言,具有編輯、新增、修改文件內容的權限;對目錄來說,可以更改目錄結構列表,具有新增、刪除、移動目錄內文件的權限。

    • x(Execute,執行):對文件而言,具有執行文件的權限;對目錄了來說該用戶具有進入目錄的權限。

    • 一般權限示例

      -rwx------: 文件所有者對文件具有讀取、寫入和執行的權限,其它用戶限完全沒有權限
      -rwxr--r--: 文件所有者具有讀、寫與執行的權限,其他用戶則具有讀取的權限。
      -rw-rw-r-x: 文件所有者與同組用戶對文件具有讀寫的權限,而其他用戶僅具有讀取和執行的權限。
      drwx--x--x: 目錄所有者具有讀寫與進入目錄的權限,其他用戶近能進入該目錄,卻無法讀取任何數據
      drwx------: 除了目錄所有者具有完整的權限之外,其他用戶對該目錄完全沒有任何權限。
      

特殊權限

SUID(setuid)

  • 只對二進制程序有效;執行者對于程序需要有x權限;在程序運行過程中,執行者擁有程序擁有者的權限
  • 示例:以/etc/passwd和/usr/bin/passwd為例。/etc/passwd的權限為 -rw-r--r--,也就是說:該文件的所有者擁有讀寫的權限,而用戶組成員和其它成員只有查看的權限。我們知道,在系統中我們要修改一個用戶的密碼,root用戶和普通用戶均可以用"/usr/bin/passwd 用戶名" 這個命令來修改這個/etc/passwd這個文件,root用戶本身擁有對/etc/passwd的寫權限,可以理解;那普通用戶沒有寫權限,那他怎么也能修改呢?這里就用到了setuid,setuid的作用是讓執行該命令的用戶以該命令擁有者的權限去執行,就是普通用戶執行passwd時會擁有root的權限,這樣就可以修改/etc/passwd這個文件了。它的標志為:s,會出現在x的地方,例如/etc/passwd的權限為:-rwsr-xr-x

SGID

  • 功能一:SGID對于二進制程序有用;程序執行著要有x權限;執行者在執行過程中會獲得該程序用戶組的權限(相當于臨時加入了程序的用戶組)
  • 功能二:用戶對此目錄有rx權限可以進入目錄;用戶進入此目錄后,有效用戶組會變成該目錄的用戶組;若用戶在此目錄有w權限,則用戶創建的文件用戶組與該目錄用戶組相同
  • 功能二示例:一個團隊想在linux某個目錄下協同工作來做一個項目,那么每個團隊成員都得對這個目錄下的所有文件具有rwx權限。于是我們首先新建一個用戶組,再新建幾個賬號,每個賬號的用戶組都加入剛才新建的那個用戶組。再新建工作目錄,權限設為770,把目錄的用戶組加上上一步新建的用戶組。到這里為止,我們思考下會有什么問題?現在賬號A新建一個文件,新建文件的擁有者和用戶組都會是A!重要的是其他用戶都無法訪問這個文件!所以我們需要給這個目錄加入SGID權限,之后任意一個用戶創建的文件,文件用戶組都會是這個目錄的用戶組

SBID

  • 只針對目錄有效,當用戶對目錄擁有wx權限時,用戶在該目錄創建的文件或目錄,只有自己與root才可以刪除、
  • 也就是說只可管理自己的數據而不能刪除他人文件
  • 示例:一般老師希望學生可以將作業上傳到某個特定目錄,但為了避免某些小破壞份子,想限制刪除其他人文件的話,就需要設置目示為SBID,用戶只能管理自己的數據

查看特殊權限

  • 查看特殊權限的方法就是普通的ls命令:SUID會在所屬用戶權限本應是x的地方顯示s,SGID會在所屬用戶組權限本應是x的地方顯示s,SBIT在其它用戶權限本應是x的地方顯示t

  • 因為SUID、SGID、Sticky占用x的位置來表示,所以在表示上會有大小寫之分。

  • 加入同時開啟執行權限和SUID、SGID、Sticky,則權限表示字符是小寫的: -rwsr-sr-t 1 root root 4096 6月 23 08:17 conf

  • 如果關閉執行權限,則表示字符會變成大寫: -rwSr-Sr-T 1 root root 4096 6月 23 08:17 conf

數字表示文件權限

  • 有時候,字符似乎過于麻煩,因此還有另外一種方法是以數字來表示權限,而且僅需三個數字。 r: 對應數值4 w: 對應數值2 x:對應數值1 -:對應數值0
  • 數字設定的關鍵是mode的取值,我們將rwx看成二進制數,如果有則有1表示,沒有則有0表示,那么**rwx r-x r--則可以表示成為 111 101 100 再將其每三位轉換成為一個十進制數,就是754

chmod命令

  • chmod命令用于改變linux系統文件或目錄的訪問權限。用它控制文件或目錄的訪問權限

  • 命令格式:chmod [-cfvR] [--help] [--version] mode file

  • 命令參數

    -c 當發生改變時,報告處理信息
    -f 錯誤信息不輸出
    -R 處理指定目錄以及其子目錄下的所有文件
    -v 運行時顯示詳細處理信息
    
  • 權限相關參數

    • --reference=<目錄或者文件> 設置成具有指定目錄或者文件具有相同的權限
    • --version 顯示版本信息
    • <權限范圍>+<權限設置> 使權限范圍內的目錄或者文件具有指定的權限
    • <權限范圍>-<權限設置> 刪除權限范圍的目錄或者文件的指定權限
    • <權限范圍>=<權限設置> 設置權限范圍內的目錄或者文件的權限為指定的值
  • 權限范圍:

    • u :目錄或者文件的當前的用戶
    • g :目錄或者文件的當前的群組
    • o :除了目錄或者文件的當前用戶或群組之外的用戶或者群組
    • a :所有的用戶及群組
  • 權限代號:

    • r :讀權限,用數字4表示
    • w :寫權限,用數字2表示
    • x :執行權限,用數字1表示
    • - :刪除權限,用數字0
    • s :特殊權限
  • 文字設定法與數字設定法

    chmod [who] [+ | - | =] [mode] 文件名
    chmod [mode] 文件名
    
  • 示例

    • 增加文件所有用戶的可執行權限

      chmod a+x log2012.log
      
    • 同時修改不同用戶的權限

      chmod ug+w,o-x log2012.log
      
    • 刪除文件權限

      chmod a-x log2012.log
      
    • 使用"="設置權限

      chmod u=x log2012.log
      
    • 對于一個止錄和其子目錄所有文件添加權限

      chmod -R u+x test01
      
    • 給file的屬主分配讀、寫、執行(7)的權限,給file的所在組分配讀、執行(5)的權限,給其他用戶分配執行(1)的權限

      chmod 751 file
      chmod u=rwx,g=rx,o=x file
      
    • 為所有用戶分配讀權限

      chmod =r file
      chmod 444 file
      

chown命令

  • 通過chown改變文件的擁有者和群組。在更改文件的所有者或所屬群組時,可以使用用戶名稱和用戶識別碼設置。普通用戶不能將自己的文件改變成其他的擁有者。其操作權限一般為管理員

  • chown [選項]... [所有者][:[組]] 文件.

  • 命令參數

    -c 顯示更改的部分的信息
     -f 忽略錯誤信息
     -h 修復符號鏈接
     -R 處理指定目錄以及其子目錄下的所有文件
     -v 顯示詳細的處理信息
     -deference 作用于符號鏈接的指向,而不是鏈接文件本身
    
  • --reference=<目錄或文件> 把指定的目錄/文件作為參考,把操作的文件/目錄設置成參考文件/目錄相同擁有者和群組

  • --from=<當前用戶:當前群組> 只有當前用戶和群組跟指定的用戶和群組相同時才進行改變

  • 示例

    • 改變文件擁有者和群組

      chown mail:mial log2012.log
      
    • 改變擁有

      chown root: log2012.log
      
    • 改變群組

      chown :mail log2012.log
      
    • 遞歸改變指定目錄和其子目錄下所有文件的擁有者和群組

      chown -R -v root:mail test6
      

文件的隱藏屬性

  • 文件權限除了讀寫執行與SUID、SGID、SBIT外還有一種隱藏權限,例如明明有權限刪除某個文件卻報錯了,或者僅能為某個文件追加內容而不能減少內容,遇到這種很"奇怪"的文件,就要懷疑是文件被設置隱藏權限了

  • lsattr命令用于顯示文件的隱藏權限,格式為:"lsattr [參數] 文件"。

    a    顯示所有文件和目錄。
    l    顯示隱藏屬性的全稱(默認簡寫成一個字母)。
    R    遞歸處理,將指定目錄下的所有文件及子目錄一并處理。
    d    若目標文件為目錄,請加此參數。
    
  • chattr命令用于設置文件的隱藏權限,格式為:"chattr [參數] 文件

  • 命令參數

    i    將無法對文件進行修改,若對目錄設置后則僅能修改子文件而不能新建或刪除。
    a    僅允許補充(追加)內容.無法覆蓋/刪除(Append Only)。
    S    文件內容變更后立即同步到硬盤(sync)。
    s    徹底從硬盤中刪除,不可恢復(用0填充原文件所在硬盤區域)。
    A    不再修改這個文件的最后訪問時間(atime)。
    b    不再修改文件或目錄的存取時間。
    D    檢查壓縮文件中的錯誤。
    d    當使用dump命令備份時忽略本文件/目錄。
    c    默認將文件或目錄進行壓縮。
    u    當刪除此文件后依然保留其在硬盤中的數據,方便日后恢復。
    t    讓文件系統支持尾部合并(tail-merging)。
    X    可以直接訪問壓縮文件的內容。
    

su命令與sudo服務

  • su命令用于變更使用者的身份(切換登陸者),格式為:"su [-] 用戶名"。

  • sudo命令用于給普通用戶提供額外權利來完成原本超級用戶才能完成的任務,格式為:"sudo [參數] 命令名稱"

  • 我們使用sudo程序可以僅將特定的命令/程序執行權限賦予給指定的用戶,同時也避免了過多使用root身份,只要合理的配置sudo功能便可以合理的兼顧系統的安全性和用戶便捷性,給讀者的原則: 在保證普通用戶完成工作的前提下,盡可能少的給予額外的權限。

  • sudo命令的特色

    • 限制用戶執行指定的命令。
    • 記錄用戶執行的每一條命令。
    • 配置文件(/etc/sudoers)提供集中的管理用戶、權限與主機等參數。
    • 驗證過密碼后5分鐘(默認值)內無須再讓用戶驗證密碼,更加的方便。
  • sudo命令參數

    • -h 列出幫助信息。
    • -l 列出當前用戶可執行的命令。
    • -u 用戶名或UID值 以指定的用戶身份執行命令。
    • -k 清空安全時間,下次執行sudo時需要再次密碼驗證。
    • -b 在后臺執行指定的命令。
    • -p 更改詢問密碼的提示語。
  • 只有超級用戶才可以使用visudo命編緝sudo程序的配置文件,具體的命令格式為:允許使用sudo服務的主機 以誰的身份執行命令 具體可執行命令的列表

  • 示例:允許linuxprobe用戶能夠從任意主機執行任意命令的參數

    visudo
    linuxprobe ALL=(ALL)ALL
    
  • 示例:僅允許linuxprobe用戶以root用戶身份執行cat命令

    linuxprobe ALL=(root) /bin/cat
    
  • 示例:允許linuxprobe用戶以任意身份執行命令,且每次都不需要密碼驗證

    linuxprobe ALL=NOPASSWD: ALL
    

文件訪問控制列表

  • 如果希望對某個指定的用戶進行單獨的權限設置,那么就需要用文件的訪問控制列表來實現

  • 我們可以基于普通文件或目錄設置進行設置ACL,通俗來說ACL就是設置指定的特定用戶或用戶組對某個文件的操作權限。并且如果對某個目錄設置了訪問控制策略,那么子文件則繼承其訪問策略,而若對文件設置了訪問控制策略則不再繼承上級目錄的控制策略。

  • getfacl命令用于顯示文件的ACL規則,格式為:"getfacl 文件"

  • setfacl命令用于增加或者修改ACL規則,格式為:"setfacl [參數] 文件"。

  • setfacl命令參數

    • -R 遞歸(對目錄使用)
    • -m 設置文件的acl規則
    • -b 刪除acl規則
  • 示例:一般情況下不能進入其它用戶的的目錄,如果設置了acl,則可以進入其目錄

    cd /root
    -bash: cd: /root: Permission denied
    setfacl -Rm u:linuxprobe:rwx /root
    su - linuxprobe
    cd /root
    ls
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容