文章出處

一、前言                                

  Linux下所有資源、設備均被視作文件來操作,而文件權限則是決定用戶可各文件操作的范圍,無論是平時使用Linux,還是寫程序均涉及這方面。以下為個人學習的整理,供以后查閱。

 

二、 三種權限                             

1. 普通權限

權限 文件 目錄
r,讀權限 查看文件內容 列出其子目錄結構信息(就是可執行 ls 目錄 )
w,寫權限 配合r權限,則可對文件進行修改和刪除 配合x權限就可以添加、刪除和移動內部文件,而刪除目錄和復制目錄內文件則需要配合r和x權限。
x,執行權限 配合r權限,可執行的權限 可以進入該目錄和對其下文件作操作(就是可執行 cd 目錄 )

2. 特殊權限

    場景1:用戶A在調用程序B時,且程序B需要修改文件C,而用戶A無權修改文件C,那么程序B同樣將被拒絕修改文件C。

    原因:程序將使用調用者(就是用戶A)的用戶標識去對系統作操作,程序的權限與調用者的權限一致。

    需要:讓程序使用與調用者無關的用戶或用戶組標識,那么任何調用者執行該程序時均無差異。

    解決辦法:使用特殊權限SUID和GUID。

權限 文件 目錄
SUID

注意:僅對二進制可執行文件設置

二進制可執行文件會以所有者和調用者的用戶標識去執行,也就是擁有兩者的權限。

不對目錄設置
GUID

注意:僅對二進制可執行文件設置

二進制可執行文件會以所屬組和調用者的標識去執行,也就是擁有兩者的權限。

在目錄下創建文件、目錄等,其所屬組與該目錄的所屬組相同。而不是所有者的用戶組了。

   場景2:某用戶在執行 rm -rf 目錄/* 時,把所有者不是它的文件、目錄都誤刪除了。

   原因:默認情況下,只要用戶擁有某目錄的wx權限,則可以刪除、剪切該目錄下的所有文件、目錄,即使該用戶對該目錄下的文件、目錄任何權限都沒有。

   需求:只刪除所有者為自己的文件、目錄。

   解決辦法:使用特殊權限SBIT。

權限 文件 目錄
SBIT(stick bit,粘滯位)  不對文件設置 配合wx權限,僅目錄的所有者、子目錄或文件的所有者和root用戶才能刪除、移動該目錄下的子目錄和文件

 

3. 隱藏權限

   共13種,僅在文件系統格式為Ext2+才有效。

 

三、通過命令了解權限                            

 上一節我們從概念上了解了linux的文件權限的種類,下面通過命令來實干一番。

 1. 查看權限

 輸入 ls -l 就可以查看當前目錄下所有文件和子目錄的權限信息了。

 假設回顯信息為  -rwsr-xr-x 1 root root 430540 Dec 20 18:27 /usr/sbin/passwd ,現在逐一分析其內容。

   ①. 首字符-,表示該文件為普通文件。

         -,普通文件;

         d,目錄文件;

         l,符號鏈接;

         c,字符設備文件;

         b,字節設備文件;

         p,先進先出文件;

         s,套接字文件。

  ②. 第2~4個字符,表示所有者(owner)的權限

  ③. 第5~7個字符,表示所屬組(group)的權限

  ④. 第8~10個字符,表示其他用戶(other)的權限

  ⑤. 第11個字符,表示硬鏈接數

  ⑥. 是文件所有者的用戶名稱(owner)

  ⑦. 是文件所屬組的用戶組名稱(group)

  ⑧. 是文件大小,以塊為單位,通過 ls -lh 則會以KB,MB作單位

  ⑨. 是最后修改日期

  ⑩. 是文件或目錄的絕對路徑

  從上述內容我們可以得知Linux下的權限角色有三種,分別是所有者(owner)所屬組(group)其他用戶(other)

2. 權限表示形式

  [a]. 符號表示法

  普通權限:

    r,讀權限; w,寫權限;x,可執行權限。

  特殊權限:

   SUID權限只能設置在②中,s表示二進制可執行文件同時擁有SUID權限和x可執行權限;S表示二進制可執行文件擁有SUID權限但沒有x可執行權限。

   SGID權限只能設置在③中,s表示二進制可執行文件或目錄同時擁有SGID權限和x可執行權限;S表示二進制可執行文件或目錄擁有SGID權限但沒有x可執行權限。

   SBIT權限只能設置在④中,t表示目錄同時擁有SBIT權限和x可執行權限;T表示目錄擁有SBIT權限但沒有x可執行權限。

 

  [b]. 數字表示法

   數字表示法采用二進制形式計算,八進制形式設置的方式。

   二進制形式計算,1代表有權限,0代表無權限:

      所有者 所屬組 其他用戶
SUID SGID SBIT R W X R W X R W X
1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0

   然后每三位為一組轉為八進制,例如現在二進制形式為100111101101,那么轉為八進制則為4755。

   然后通過 chmod 4755 文件 就可以改變文件的權限, ls -l 回顯中權限部分則為rwsr-xr-x。

   注意:1. 若不設置特殊權限時,我們可以直接省去八進制的第一位數,例如: chmod 755 文件 ;

            2. 采用數字表示法設置特殊權限,僅能啟動特殊權限,卻無法關閉。例如,文件A擁有特殊權限SUID和SGID,執行 chmod 0755 文件A ,但通過 ls -l 查看權限依然為rwsr-sr-x。

 

四、通過符號表示法設置權限                      

  通過數組表示法設置權限有時確實不夠方便,于是bash為我們提供了符號表示法來設置權限。

  設置普通權限

// 為所有者、所屬組和其他用戶添加執行的權限
chmod +x 文件路徑
// 為所有者、所屬組和其他用戶刪除執行的權限
chmod -x 文件路徑

// 為所有者添加執行的權限
chmod u+x 文件路徑
// 為所屬組添加執行的權限
chmod g+x 文件路徑
// 為其他用戶添加執行的權限
chmod o+x 文件路徑
// 為所有者、所屬組添加執行的權限
chmod ug+x 文件路徑

// 為所有者、所屬組和其他用戶添加寫、執行的權限,取消讀權限
chmod =wx 文件路徑
// 為所有者、所屬組添加寫、執行的權限,取消讀權限
chmod ug=wx 文件路徑

  設置特殊權限

// 開啟、關閉SUID
chmod u+s 文件名
chmod u-s 文件名

// 開啟、關閉SGID
chmod g+s 文件名
chmod g-s 文件名

// 開啟、關閉SBIT
chmod o+t 文件名
chmod o-t 文件名

 

五、改變所有者、所屬組                            

  1. 查看用戶信息

// 查看當前用戶
whoami

// 查看當前用戶所屬組
groups

// 查看其他用戶所屬組
groups 用戶1 用戶2

  2. 改變所有者、所屬組

 僅root用戶才有權限執行下列命令。

// 改變所有者
chown 用戶名 文件路徑

// 改變所屬組
chgrp 用戶組 文件路徑

// 改變所有者和所屬組
chown 用戶名.用戶組 文件路徑

// 遞歸改變所有者和所屬組
chown -R 用戶名.用戶組 目錄路徑

 

六、管理用戶                                    

 1. 添加用戶

     命令: useradd [-u uid] [-g group] [-d home] [-s shell] 用戶名 
         -u,用戶ID,用戶ID是給系統使用的,而用戶名是給用戶使用的,兩者是一一對應的關系
         -g,用戶所屬的用戶組標識
         -d,以已存在的目錄作為用戶的家目錄
         -s,定義shell

     示例:

// 添加用戶標識 garfield
# useradd garfield

     并通過查看/etc/passwd、/etc/shadow和/etc/group文件內容,檢查用戶是否創建成功。具體內容如下

     

     注意:在創建用戶時,系統會根據/etc/login.defs和/etc/default/useradd文件的內容對新用戶做基本設置。

     /etc/login.defs文件內容:

     

     /etc/default/useradd

     

     SKEL選項是指定用戶家目錄內容是從`/etc/skel`復制過來的。

 2. 設置密碼

   命令: passwd 用戶名 密碼 

 3. 啟用、禁用帳號

// 禁用
# usermod -L 用戶名
// 啟用 
# usermod -U 用戶名

啟用禁用實質就是在`/etc/shadow`文件中該用戶名對應的記錄上,在用戶密碼前刪除、添加!(感嘆號)來實現。

 4. 其他

// 將用戶添加到用戶組
usermod -G 用戶組名 用戶

// 改變用戶的用戶組
usermod -g 用戶組名 用戶

// 修改用戶名
usermod -l 新用戶名 舊用戶

// 刪除用戶
userdel 用戶名

 

六、管理用戶組                                

// 添加用戶組
groupadd [-g gid [-o]] [-r] [-f] 用戶組名

// 修改用戶組名稱
groupmod -n 新用戶組名 舊用戶組名

// 刪除用戶組
groupdel 用戶組名

 

七、用戶、用戶組的配置文件                              

1. /etc/passwd,任何用戶都可以讀取該文件的內容。存放各個用戶的用戶名稱、加密后的密碼(若操作系統采用了shadow技術,則用加密密碼在/etc/shadow文件中,這里用x或\*表示)、用戶ID(一個用戶ID可以對應多個用戶名,每個用戶名擁有獨立的口令、家目錄和shell,但系統會認為這些用戶名是同一個用戶。0是超級用戶,1~99系統保留,100開始是普通用戶,默認從500建普通用戶。整體取值范圍是0~65535)、用戶組ID(對應/etc/group中的一條記錄)、注釋性描述字符串、家目錄、shell程序路徑<br/>

偽用戶(psuedousers):shell程序路徑為空或為/sbin/nologin,主要用于方便系統管理、滿足相應系統進程對文件屬性的要求。

偽用戶如下:

  bin,擁有可執行的用戶命令文件
  sys,擁有系統文件
  adm,擁有賬號文件
  uucp,UUCP使用
  lp,lp或lpd子系統使用
  nobody,NFS使用

可通過設置"shell程序路徑"為某程序,限制某用戶進入系統后僅能執行該程序,程序執行結束則退出系統。

2. /etc/shadow,僅超級用戶可以查看和修改,由pwconv命令根據/etc/passwd中的數據自動生成,記錄為一對一關系。記錄格式為:用戶名、加密后的密碼(固定長度為13個字符,空則表示沒有密碼,若含\./0-9A-Za-z的字符則無法登錄)、最后修改密碼的時間(以距離1970年1月1日的天數來計算)、最小時間間隔(修改密碼的最小天數)、最大時間間隔(密碼有效天數)、警告時間(從系統開始警告用戶修改密碼到無法登錄的天數)、不活動時間(用戶沒有登錄活動,但賬號仍保持有效的最大天數)、失效時間(用戶名的有效天數)

3./etc/group,存放用戶組名稱、用戶組加密后的密碼(空、\*或x表示沒有密碼)、用戶組ID、成員用戶名稱(成員用戶名稱間用,隔開)

 

八、總結                                        

  Linux的文件權限暫時了解到這里吧,以后繼續深入繼續補充!

  尊重原創,轉載請注明來自:http://www.cnblogs.com/fsjohnhuang/p/3999224.html ^_^肥仔John

 

九、參考                                        

http://blog.csdn.net/fan_zhen_hua/article/details/2050009
http://blog.csdn.net/xsz0606/article/details/5256719
http://blog.chinaunix.net/uid-20671208-id-3488852.html
http://www.cnblogs.com/huangzhen/archive/2011/08/22/2149300.html
http://blog.csdn.net/liqfyiyi/article/details/7742775
http://os.51cto.com/art/201003/187591.htm
http://os.51cto.com/art/201003/187572.htm


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()