Linux中權限的種類較多,可以劃分爲用戶對文件的權限、用戶對系統命令的權限和文件特殊權限三類。下面詳細闡述。
闡述設置權限的意義和作用
一、用戶對文件的權限
用戶對文件的權限是指用戶擁有的對文件的增刪改查操作。又可以細分爲基本權限(ugo)、umask權限和ACL權限。
1、基本權限
1)、權限位
Linux文件的權限爲一共是10位。第一位標示文件類型,之後每三位標示所有者、所屬組和其他人的權限。
所有者、所屬組和其他人都有rwx(讀寫執行)權限,分別用數字4、2、1表示。
第一位:表示文件類型。常見的文件類型有
- 普通文本文件
d 目錄
l 軟鏈接
b 塊設備文件
c 字符設備文件
s 套接字
p 管道
之後九位每三位爲一組分別是所有者、所屬組、其他人的權限
至於權限位最後的點,有人認爲是結束符,有人認爲是SELinux的安全標籤。在這裏不做區分。
2)、權限含義
權限限制了用戶對文件的操作,但是對於目錄和文件,權限的含義是不同的。
①權限對文件的含義
註明:因爲在Linux中一切皆文件,而此處的文件不再是廣義上的文件,就是指基本的包含了數據內容的文件。
☆ r:表示能讀取文件的數據
☆ w:表示能編輯修改文件中數據內容
☆ x:表示文件可執行。無論該文件能否正確執行。
②權限對目錄的含義
對於目錄而言,目錄中的"數據內容"就是文件名。
☆ r:能夠查詢目錄中包含了哪些文件
☆ w:編輯和刪除目錄中的文件
☆ x:表示可以進入到目錄
3)、相關命令
★ chown -- 既可以修改所屬組也可以修改所有者
chown user1:user aa % 將文件aa的所有者,所屬組同時修改爲user1
★ chgrp -- 修改文件所屬組
chgrp user1 aa % 將文件aa的所屬組修改爲user1
★ chmod -- 修改文件權限
chmod 755 aa % 將文件aa的權限設置爲755(rwxr-xr-x)
2、umask權限
1)、umask是設置文件默認權限的命令。用法如下:
[root@localhost /]# umask -S % 以rwx形式顯示新建文件的缺省權限
[root@localhost /]# umask 022 %設置文件或目錄的默認缺省權限
注意:此處的修改都是臨時生效的,關機重啓之後就會失效,若想永久生效,需要修改配置文件/etc/profile,文件中有關umask的部分剪切如下:
文件內容是:如果用戶的UID大於199,並且UID的組名與用戶名相同,那麼默認權限是002;否則是022。通俗講就是普通用戶的umask權限是002,root用戶的umask權限是022。因爲默認root用戶的UID是0.(002與022的含義下面講)
2)、權限設置
合理的權限設置是保證系統安全的重要手段。對於文件來說,執行權限是最高權限,因爲有的病毒,***就是可執行文件,若是直接賦予執行權限,後果不堪設想;對於目錄來說則沒有限制。所以文件的默認權限最高設置爲666,目錄的默認權限最高設置爲777。
系統中新建文件或目錄的權限是拿最高權限與umask值相減得到的。所以默認文件和目錄的權限整理如下:
文件 | 目錄 | |
root | 644 | 755 |
普通用戶 | 664 | 775 |
另外在權限設置時,ugo的權限應該是遞減的,不允許其他人的權限大於所有者的權限;像一些111,751,654等權限都是不合理的,合理的權限除了滿足ugo權限縮小的原則外,只能是0、5、7的結合。
3、ACL權限
1)、ACL權限的含義和作用
ACL權限的出現是滿足用戶對文件身份不足的情況的。當需要限定某一個用戶對文件擁有不同於ugo的權限,就考慮加ACL權限。用戶只對添加了ACL權限的文件生效,對於其他文件,仍是按照ugo的方式執行。
2)、ACL權限設置相關命令
☆ 查看ACL
[root@localhost ~]# getfacl 文件名
☆ 設定ACL
[root@localhost ~]# setfacl 選項 文件名
選項:
-m 設定ACL權限
-x 刪除指定的ACL權限
-b 刪除所有的ACL權限
-d 設定默認ACL權限
-k 刪除默認ACL權限
-R 遞歸設定ACL權限
例:
setfacl -m u:user1:rx aa % 對用戶user1在文件aa上設置ACL權限值爲讀和執行權限
setfacl -m u:user1:rx -R /perm % 對用戶user1在目錄perm上遞歸創建ACL權限值爲讀和執行
setfacl -x u:user1 aa % 刪除用戶user1對文件aa的ACL權限
setfacl -b aa % 刪除文件aa上所有的ACL權限
setfacl -m d:user1:rx /perm % 對用戶user1在目錄perm上創建默認ACL權限
注:遞歸ACL權限指的是對目錄和目錄中文件擁有指定的相同權限;默認ACL權限指的是用戶對目錄中新建的文件或目錄執行指定權限
對文件創建了ACL權限後,文件權限位最後變成了+,如上圖所示。
二、用戶對系統命令的權限
用戶對系統命令的權限主要介紹sudo。sudo是授予普通用戶部分管理員功能的命令,經過授權後,普通用戶可以執行管理員指定的命令。sudo用法如下:
執行命令visudo打開sudo的配置文件:
ALL ALL=(ALL)ALL
用戶名 被管理的主機地址 =(用戶身份) 授權命令
例:
授權普通用戶user1可以重啓服務器
......
user1 ALL=/bin/shutdown -r now
......
登錄到普通用戶user1,執行
[user1@localhost ~]$ sudo shutdown -r now
三、文件特殊權限(SetUID 、SetGID、SetBIT)
文件特殊權限由三種:SetUID、SetGID和SBIT分別用數字4、2、1表示,若是算上基本權限,權限位一共有四位。
1、SetUID
賦予條件:
☆可執行的文件;
☆命令執行者在執行程序時獲得文件屬主的身份;
☆用戶身份改變只在執行過程有效
設置與取消SetUID:
chmod 4755 /bin/cat 或 chmod u+s /bin/cat % 設置SetUID權限
查看cat命令
此處有圖SUID
可以看到加上SUID權限後,命令屬組權限的x變成了s
chmod u-s /bin/cat 或 chmod 755 /bin/cat % 取消SetUID權限
2、SetGID
賦予條件:
☆可執行的文件
☆命令執行者在執行過程中變成程序的屬組
☆用戶身份改變只在執行過程有效
設置與取消SetGID:
chmod 2755 文件名 或 chmod g+s 文件名 % 設置SetGID權限
chmod 755 文件名 或 chmod g-s 文件名 % 取消SetGID權限
3、SBIT
SBIT也叫做粘着位,只能對目錄有效;普通用戶對目錄擁有w和x權限;賦予了粘着位之後,普通用戶即使有寫權限,也不能刪除目錄中文件,普通用戶只能刪除自己建立的文件。但是設置粘着位必須把目錄的權限設置爲777,但是這樣做違反了權限的賦予原則,權限設置帶來的安全隱患要大於利處。
設置與取消SBIT:
chmod 1777 目錄名 或 chmod o+t 目錄名 % 設置SBIT
chmod 777 目錄名 或 chmod o-t 目錄名 % 取消SBIT
注意:無論是SetUID、SetGID還是SBIT都不建議使用,手工賦予文件或目錄特殊權限,一旦出現服務器問題時,很難想到是文件或目錄權限的問題,另外設置文件特殊權限存在一定的安全隱患。
四、文件系統屬性(chattr)
通過chattr可以直接給目錄或權限設置屬性,命令各如下:
#chattr [+-=][選項] 文件或目錄名
+: 增加權限
-: 刪除權限
=: 等於某權限
選項:
i:i屬性
對文件不允許對文件進行刪除、改名,也不能添加和修改數據;
對目錄,只能修改目錄下文件的數據,但不允許建立和刪除文件。
a:a屬性
對文件,能增加數據,但是不能刪除也不能修改數據;
對目錄,允許在目錄中建立和修改文件,但是不允許刪除
e:e屬性
linux系統的大多數文件默認的屬性。表示該文件是利用ext文件系統進行存儲,而且不能使用chattr -e命令取消e屬性。
查看文件系統屬性
[root@localhost]#lsattr 選項 文件或目錄名%查看文件或目錄的屬性
選項:
-a--顯示所有文件和目錄
-d--顯示目錄屬性
五、SELinux權限
待續