歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> linux權限管理總結

linux權限管理總結

日期:2017/3/1 12:14:37   编辑:關於Linux

文件或目錄的權限

目錄和文件擁有:讀r、寫w、執行x權限。

// 使用 ls -l命令查看當前目錄的文件權限信息
#ll
-rw-r--r-- 1 root root  161 Mar 20 20:39 test.txt // test文件所有者擁有讀寫權限、所屬組和其他用戶擁有讀權限
drw-r--r-- 1 root root  248 Mar 23 21:03 download

權限對文件的作用

r :讀取文件內容(cat、more、head、tail)
w:編輯、新增、修改文件內容(vi、echo),但不包含刪除文件
x:可執行
對文件來講:最高權限是執行權限(x),所以文件要少賦予執行權限。

權限對目錄的作用

r:可以查詢目錄下文件名(ls)。
w: 具有修改目錄結構的權限。如新建文件和目錄,刪除此目錄下文件和目錄,重命名此目錄下文件和目錄,剪切此目錄下文件或目錄。(touch、rm、mv、cp)。
x:可以進入目錄(cd)。
對目錄來講:最高權限是寫權限(w),所以目錄要少賦予寫權限。
注:0沒有任何權限,5(rx)可以查看和進入,7(rwx)擁有最高權限;1、4、6權限對目錄沒有意義。

分配文件基本權限時,核心原則:在最小權限情況下能夠實現要求即可!

chmod 修改文件或目錄的權限

/*使用[u、g、o、a][+、-、=]來設置文件或目錄的權限[r、w、x]
u:user 所有者
g:group 所屬組
o:other 其他
a:all 所有用戶,包括所有者、所屬組、其他
+:增加權限
-:減少權限
=:設置權限
*/
// 給test的擁有者u,文件增加某權限
#chmod u+x,g+r test
#chmod a+w test
#chmod u-x test
#chmod g=rwx test

/*使用數字設置文件或目錄的權限
rwx在Linux下分別對應十進制4、2、1 即3bit二進制的111
*/
// 設置dir目錄的所有者擁有所有權限,所屬組和其他用戶擁有讀和執行的權限
#chmod 755 dir/

chown 改變文件或目錄的所有者

格式:chown newUser 文件名
讓其他人擁有最高權限的最佳做法是使用chown更改文件的所有者。

// 同時改變文件的所有者和所屬組
chown user:group 文件名

chgrp 改變文件或目錄的所屬組

格式:chgrp newUser 文件名
注:linux創建文件時,默認其所有者為當前用戶、其所屬組為與當前用戶名相同的組。

/* 用例
 *1 當前用戶創建一個test目錄
 *2 創建新的用戶xm,並讓他擁有test目錄的所有權限
 *3 讓組用戶可以擁有查看權限
 *4 其他人沒有這個目錄的任何權限
*/
// 創建test目錄 
#mkdir test
// 添加用戶xm和密碼 
#useradd xm
#passwd xm
// 創建用戶user1、user2
#useradd user1 
#useradd user2
// 創建user組
#groupadd user
// 把user1、user2添加到user組
#gpasswd -a user1 user
#gpasswd -a user2 user
// 更改test目錄的所有者和組
#chown xm:user test
// 更改test目錄權限
#chmod 750 user

默認權限

umask 查看默認權限

#umask
0022 // 第一位0是特殊權限

umask值的修改

臨時修改
umask 0033
永久修改
vi /etc/profile

文件的默認權限

文件默認不能建立為執行文件,必須手工賦予執行權限
所以文件默認權限最大為666
默認權限需要換算成字母再相減
建立文件之後的默認權限,為666減去umask值
例如:
666 - 022(umask值)
-rw-rw-rw- 減去 —–w–w- 等於 -rw-r–r–
666 - 033(umask值)
-rw-rw-rw- 減去 —–wx-wx 等於 -rw-r–r– (注:空減去某權限仍為空)

目錄的默認權限

目錄默認權限最大為777
默認權限需要換算成字母再相減
建立文件後的默認權限,為777減去umask值

ACL權限

ACL權限簡介

Linux基本權限管理中是分為用戶所有者、所屬組和其他人,如果有人想擁有和基本權限中任何權限都不一樣的時候,基本權限無法滿足這種需求,這時候可以考慮使用ACL權限。

例如:
Linux中有一個test目錄,它的所有者為xiaoming,擁有所有權限;文件夾所在組stu,也擁有所有權限;其他人沒有任何權限。但是,要給一個新用戶xiaowang對test目錄擁有讀和執行權限時,基本權限滿足無法分配需求。

ACL權限用來解決用戶身份不夠的情況。windows系統給文件分配權限時,不用考慮文件的所有者和所屬組,可以給任何用戶分配相應的權限;ACL權限和windows系統一樣,可以分配任何用戶相應的權限而不考慮文件所有者和所屬組的權限,這解決基本權限無法分配復雜權限的問題。

開啟、查看和設置ACL權限

// 查看分區ACL權限是否開啟
// df 查看分區情況
// dumpe2fs命令是查詢指定分區詳細文件系統信息命令;-h僅顯示超級塊中信息,而不顯示磁盤塊組的詳細信息
#dumpe2fs -h  /dev/sda5 

// 臨時掛載 根分區/ 的ACL權限
#mount -o remount,acl  / 

// 永久開啟分區ACL權限
#vi /etc/fstab 
// defaults權限默認包括掛載ACL權限,如果沒有ACL權限,在defaults後添加即可
UUID=6634633e-001d-43ba-8fab-202f1df93339 / ext4 defaults,barrier=0,acl 1 1
//重新掛載文件系統或重啟動系統,使修改生效
#mount -o remount /

// 查看acl權限
#getfacl 文件名 

// 設置acl權限
setfacl [option] 文件名
options:
-m 設定acl權限     
   給用戶賦予文件(或目錄)acl權限,使用"u:用戶名:權限"格式 
   例子:給用戶lw賦予文件test讀執行權限:setfacl -m u:lw:rx test
   給組分配acl權限使用"g:組名:權限"格式
-x 刪除指定的acl權限
-b 刪除所有的acl權限
-d 設定默認的acl權限
-k 刪除默認的acl權限
-R 遞歸設定acl權限
// 解決上面提到的問題
#useradd xiaoming
#groupadd stu
#mkdir /home/test
#chmod 770 /home/test
#chown xiaoming:stu /home/test
#useradd xiaowang
// 設置acl權限
#setfacl -m u:xiaowang:rx /home/test
// 查看acl權限
#getfacl /home/test
# file: /home/test
# owner: xiaoming
# group: stu
user::rwx
user:xiaowang:r-x
group::rwx
mask:rwx  //????
other::---

最大有效權限與刪除ACL權限

最大有效權限mask

mask是用來指定最大有效權限的。如果我給用戶賦予了ACL權限,是需要和mask的權限“相與”才能得到用戶的真正權限。

user::xiangwang:r-x
mask::rwx 
// xiaowang的權限與mask值相與,得到xiaowang的真實權限
// r-x 與 rwx得到有效權限r-x

刪除ACL權限

// 刪除指定用戶的acl權限
#setfacl -x u:用戶名 文件名
// 刪除指定用戶組的acl權限
#setfacl -x g:組名 文件名
// 刪除指定文件的所有的acl權限
#setfacl -b 文件名

默認ACL權限和遞歸ACL權限

遞歸ACL權限

遞歸是父目錄在設定ACL權限時,當前所有的子文件和子目錄也擁有相同的ACL權限。遞歸ACL權限賦予文件會報錯。

// 格式:setfacl -m u:用戶名:權限 -R 目錄名
#cd test
#touch file1
#touch file2
// 賦予用戶lw擁有test目和test目錄下文件的rx權限
// 使用 -R 參數設置遞歸權限,lw用戶對file1和file2文件擁有了x權限,造成了權限溢出
#setfacl -m u:lw:rx -R test/ 
#touch file3 // 新建file3,沒有acl權限
#getfacl file3 

默認ACL權限

默認ACL權限的作用是如果給父目錄設定了默認ACL權限,那麼父目錄中所有新建的子文件都會繼承父目錄的ACL權限。

// 格式:setfacl -m d:u:用戶名:權限 -R 目錄名

sudo權限

sudo權限的概念

root把本來只能超級用戶執行的命令賦予普通用戶執行。
sudo的操作對象是系統命令。

sudo權限的使用

// 查看sudo配置文件
//man 5 sudoers查看配置文件詳細
#visudo // 實際修改的是/etc/sudoers文件
// 用戶名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
root ALL=(ALL)   ALL
// 組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
%wheel ALL=(ALL)  ALL


// 普通用戶不能執行shutdown命令
#visudo
/* 編輯/etc/sudoers文件
1 增加user1 ALL=(ALL) /sbin/shutdown -r now配置。
注:命令寫的越簡單,user1用戶得到的權限越大,命令寫的越詳細,user1用戶得到的權限就越小;系統命令要寫成絕對路徑,以兼容其他版本。
2 保存退出
*/
// 登陸普通用戶賬號user1,執行系統命令
#su - user1
$sudo -l // 要求輸入user1密碼,才能查看可執行的系統命令
$sudo /sbin/shutdown -h now // 執行關機命令不被允許
$sudo /sbin/shutdown -r now //執行重啟命令
// 給普通用戶執行添加用戶和密碼的權限
# visudo
// 添加 user1  ALL=/usr/sbin/useradd 配置
// 添加 user1 ALL=/usr/bin/passwd 配置注:這使user1可以更改root的密碼
// user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/binpasswd "", !/usr/bin/passwd root,則user1無法更改root密碼
// 添加 user1 ALL=/bin/vi 注:這使user1可以編輯/etc/shadow文件,更改root用戶等密碼

文件特殊權限

SetUID權限

只有可執行的二進制程序才能設定SetUID權限

命令執行者要對該程序擁有x(執行)權限

命令這行者在執行改程序時獲得該程序文件屬主的身份

SetUID權限只在該程序執行過程中有效,也就是說身份改變只在程序執行過程中有效;如passwd命令,其他用戶都可以使用passwd更改自己的密碼

設置和取消SetUID權限

/*設置SetUID權限,4代表設置SetUID、2代表SetGID、1代表stickyBIT
 u+s :代表給文件加上SetUID權限
 g+s :代表給目錄加上SetGID權限
 o+s :代表給文件加上STICKBIT權限
*/
#ll
-rwxr-xr-x .... test
#chmod 4755 test // 或chmod u+s test
-rwsr-xr-x ... test
// 若文件沒有執行權限,但設置SetUID時,執行位顯示大S,這沒有意義。
// 取消SetUID權限
#chmod u-s test
#chmod 0755 test

危險的SetUID權限

關鍵目錄應嚴格控制寫權限,比如”/”、”/usr” 等
用戶的密碼設置要嚴格最受密碼三原則
對系統中默認應該具有SetUID權限的文件作以列表,定時檢查有沒有這之外的文件被設置了SetUID權限

不能對vi等編輯器賦予SetUID權限,這樣vi就能編輯/etc/shadow文件而更改root密碼。

SetGID權限

SetGID針對文件的作用

只有可執行的二進制程序才能設置SetGID權限

命令執行者要對該程序擁有x(執行)權限

命令執行在執行程序的時候,組身份升級為改程序文件的屬組

SetGID權限同樣只在改程序執行過程中有效,也就是說組身份改變只在程序執行過稱重有效。注:與SetUID作用相似

// locate命令
#ll /usr/bin/locate
-rwx--s--x 1 root slocate ...  /usr/bin/locate
// locate 搜索數據庫/var/lib/mlocate.db
#ll /var/lib/mlocate.db
-rw-r----- 1 root slocate ... /var/lib/mlocate.db // 普通用戶時沒有權限搜索這個數據庫
// locate屬於slocate組且設置了SetGID權限,slocate組擁有對mlocate.db讀的權限,所以普通用戶使用locate時組身份自動升級為slocate組則可以使用locate命令查詢mlocate.db數據庫。命令結束後,用戶user身份返回user組身份。

SetGID針對目錄的作用

普通用戶必須對此目錄擁有r和x權限,才能進入此目錄

普通用戶在此目錄中的有效組會變成此目錄的屬組

若普通用戶對此目錄擁有w權限時,新建的文件的默認屬組是這個目錄的屬組

// 在root用戶在/tmp目錄創建test目錄,並更改目錄權限為777
#cd /tmp
#mkdir test
#ll
drwxr-xr-x 2 root root ... test
#chmod 777 test
#ll
drwxrwxrwx 2 root root ... test

// user用戶在/tmp/test目錄創建file1
$cd /tmp/test
$touch file1
$ll
-rw-rw-r-- 1 user user ... file1

// root用戶更改test目錄為2777即設置SetGID
#chmod 2777 test
#ll
drwxrwsrwx 2 root root ... test
// user用戶在/tmp/test目錄創建file2
$touch file2
$ll
-rw-rw-r-- 1 user user ... file1
-rw-rw-r-- 1 user root... file2 // 新建file2文件所屬組為root組

設置和取消SetGID權限

// 設置SetGID權限
#chmod 2755 test/
#chmod g+s test/
// 取消SetGID權限
#chmod 0755 test/
#chmod g-s test/

Sticky BIT

SBIT粘著位作用

黏著位目前只針對目錄有效

普通用戶對目錄擁有w和x權限,若普通用戶可以擁有此目錄的w權限

如果該目錄沒有黏著位,普通用戶因為擁有所有權限,可以刪除該目錄所有的文件,包括其他用戶建立的文件;該目錄賦予黏著位後,普通用戶就算擁有目錄的w權限,也只能刪除自己建立的文件,不能刪除其他用戶建立的文件。

如/tmp 目錄即擁有黏著位

設置與取消黏著位

// 設置黏著位
#chmod o+t dir
#chmod 1777 dir
// 取消黏著位
#chmod o-t dir
#chmod 0777 dir

不可改變位權限

chattr [+-=] [option] 文件名或目錄名
+ : 增加權限
- :刪除權限
=:等於某權限
options:
i:如果對文件設置i屬性,那麼不允許對文件進行刪除,改名,也不能添加和修改數據;如果對目錄設置i屬性,那麼只能修改目錄下文件的數據,但不允許建立和刪除文件。

a:如果對文件設置a屬性,那麼只能在文件中增加數據,但不能刪除也不嗯呢該修改數據;如果對目錄設置a屬性,那麼只允許在目錄中建立和修改文件,但不允許刪除。:不允許使用vi增加文件數據,因為無法判斷vi是增加還是修改或刪除文件數據,所以只能使用echo data>> file來追加數據。

chattr對文件或目錄都生效

#chattr +i file
#lsattr file
----i-------e- file
#vim abc // 不允許修改
#rm -rf file //不允許刪除
// 刪除i屬性
#chattr -i file

參考

慕課網教程linux權限管理

Copyright © Linux教程網 All Rights Reserved