一、前言
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 就可以查看當前目錄下所有文件和子目錄的權限信息了。
假設回顯信息為 ①-②rws③r-x④r-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
文章列表