Linux權限管理詳解
1、Linux 的基本權限:
(1)Linux的基本權限說明
-rw-r--r-- 1 root root 08-11 01:45 aa.txt
權限位是十位
第一位:代表文件類型
- 普通文件
d 目錄文件
l 鏈接文件
b 塊設備文件
c 字符設備文件
s 套接字
p 管道
其余九位
讀 寫 執行 讀 寫 執行 讀 寫 執行
r w x r w x r w x
4 2 1 4 2 1 4 2 1
文件所有者(u) 文件所屬組(g) 其他用戶(o)
讀 r(4):允許查看文件內容;允許顯示目錄內的文件列表
寫 w(2):允許修改文件內容;允許對目錄內的文件進行添加、刪除、移動
執行 x(1):允許文件文件執行;允許目錄的切換
(2)文件歸屬
所有者(屬主):擁有該文件或目錄的用戶
所屬組(屬組):用戶改文件或目錄的組
(3)修改文件權限的命令及用法
命令名稱:chmod
命令英文原意:change the permissions mode of a file
命令所在路徑:/bin/chmod
功能描述:修改文件的權限
例:
chmod u+x aa 給aa文件的所有者添加x權限
chmod g+w,o+w aa 給aa文件的所屬組和其他人添加w權限
chmod u=rwx aa 給aa文件的所有者賦予
chmod 644 aa 修改aa文件的權限為644,對應為rw-r--r—
chmod -R 777 aa 遞歸修改aa目錄及其子目錄和文件權限為777
-R 遞歸修改目錄下子選項的權限
說明:對文件有寫權限,只代表可以修改這個文件;要想刪除文件,需要對文件所在目錄有寫權限,只要對目錄有寫權限,目錄中的文件,就算是 root 創建的,普通用戶一樣能刪
除。目錄一般都同時有 r-x 權限,如果一個目錄只有 r 卻沒有 x,你能用 ls 查看,卻
不能 cd 進去!
(4)文件或目錄的所有者和所屬組修改
命令名稱:chown
命令英文原意:change file ownership
命令所在路徑:/bin/chown
功能描述:修改文件或目錄的所有者、所屬組
例:
chown user1 aa 將aa文件的所有者修改為user1用戶
chown user1:user1 aa 將aa文件的所有者修改為user1用戶並且所屬組修改為user1組
chown :user1 aa 將aa文件的所屬組修改為user1組
chown -R [屬主:屬組] 目錄 遞歸修改目錄和文件的所有者和所屬組
命令名稱:chgrp
命令英文原意:change file group ownership
命令所在路徑:/bin/chgrp
功能描述:改變文件或目錄的所屬組
語法:chgrp 用戶組文件或目錄
例:chgrp adm file1 改變文件file1的所屬組為adm
命令名稱:umask
功能描述:顯示和設置默認掩碼值
777
-022
--------------
755
就是創建文件的默認權限
總結:Linux的安全機制,不給新建文件x權限。
2、ACL 權限
(1)ACL權限的介紹
Linux基本的權限控制僅可以對所屬用戶、所屬組、其他用戶進行的權限控制,而不能精確地控制每個用戶的權限。ACL規則就是用來解決這個問題的。使用ACL規則,我們可以針對單一賬戶設置文件及目錄的訪問權限。在centos7中xfs文件系統中默認開啟了ACL權限
(2)ACL 權限的使用
格式:setfacl [選項] {-m|-x} {u:username:rwx} 文件或目錄
選項:
-m :添加 ACL 權限
-x :刪除某項 ACL 權限
-b :清空所有 ACL 權限
-R :實現目錄上 ACL 權限的遞歸
d :設置默認 ACL 權限
例 1:添加 ACL 權限
setfacl –m u:u1:rwx a.txt 添加 u1 用戶對 a.txt 文件的 rwx 權限
例 2:刪除某項 ACL 權限
setfacl -x u:u1 a.txt 刪除 u1 用戶在 a.txt 文件上的 ACL 權限
例 3:清空所有 ACL 權限
setfacl -b a.txt 清空在 a.txt 文件上的所有 ACL 權限
例 4:實現目錄上 ACL 權限的遞歸(目錄)
setfacl -R –m u:u2:rwx aa 添加 u1 用戶對 aa 目錄以及目錄內子選項的 rwx 權限
例 5:設置默認 ACL 權限(目錄)
空目錄:
setfacl -m d:u:u3:rwx bb
添加 u3 用戶對目錄 bb 的 rwx 權限,並且在 bb 目錄裏新建的文件 u3用戶都有 rwx 權限
非空目錄:
setfacl –m d:u:u3:rwx bb
setfacl -R –m u:u3:rwx bb
第一條設置默認權限,第二條遞歸設置 ACL 權限
註:前五個例子使用的 u 均可換成 g,然後實現特殊組對文件的 ACL 權限
例 6:設置最大有效權限 mask(目錄)
setfacl -m m:rx cc 為 cc 目錄添加默認最大權限為 rx,其他 ACL 權限不得超出此權限
3、sudo 授權
(1)sudo授權的介紹
在企業實踐中,不是每一個系統管理員都能用 root 來管理服務器,所以需要給普通用戶賦予一部分超級管理員權限。然後普通用戶在使用超級管理員的命令時前面加上sudo 命令就可以正常使用超級管理員的命令了。/sbin和/usr/sbin裏面的命令只有超級管理員才能執行,這個時候,就需要root來使用sudo授權普通用戶使用部分超級用戶才能使用的命令了。
(2)sudo授權的系統驗證步驟
1. 當普通用戶執行/sbin 或/usr/sbin 下的命令時,系統會查詢/etc/sudoers 文件中是否有 root 給的授權
2. 當查詢普通用戶已擁有授權後,需要輸入普通用戶的密碼來確認用戶身份
3. 若密碼輸入成功後,則執行對應已經授權的命令
(3)sudo授權的方法
給普通用戶授權使用超級用戶命令方法一般是使用visudo命令來打開/etc/sudoers這個配置文件來給普通用戶授權,普通用戶使用這些被授權的超級用戶命令時,只需在命令的前面添加上sudo加空格即可執行這些授權的超級用戶命令。
註意:/etc/sudoers 文件內有固定語法結構,使用其它文檔編輯器可能會造成配置文件出現錯誤,所以必須使用 visudo 命令打開該配置文件
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
a1 192.168.115.0/24=(ALL) ALL
上面的元素介紹:
root或a1:系統的哪個用戶能使用 sudo 命令,即被授權者。也可以是組,組要在前面加%表示
ALL或某個網段:可以被管理的服務器的網絡地址,寫自己或 ALL 代表任何來源地址都可以管理本臺服務器,192.168.115.0/24代表這個網段的服務器可以執行sudo授權的命令。
(ALL)或某個權限較大的用戶:是以誰的身份來執行,ALL:ALL 就代表 root 可以任何人的身份來執行命令。
ALL或命令的絕對路徑:可以使用什麽命令,多條命令用逗號隔開(必須寫絕對路徑)
例 1:給 admin 用戶賦予 root 所有命令權限
admin ALL=(ALL) ALL
例 2:授權 zhangsan 用戶可以重啟服務器
zhangsan ALL=(root) /sbin/shutdown -r now
例 3:授權 web 用戶可以管理 IP:192.168.110.39 的 web 服務器
NO.1:可以使用 Apache 管理腳本
web 192.168.110.39=(root) /etc/rc.d/init.d/httpd reload,/etc/rc.d/init.d/httpd configtest
reload 重新加載配置文件使之生效;configtest 檢查配置文件是否有語法錯誤。
NO.2:可以修改 Apache 的配置文件
web 192.168.110.39=(root) /bin/vi /etc/httpd/conf/httpd.conf
sudo 不僅僅能授權超級管理員的命令,還能授權普通命令以及詳細選項和參數。
NO.3:可以更新網頁文件
設置合理權限即可(w),可以通過給/var/www/html目錄設置ACL權限,讓 web 用戶對/var/www/html 有寫權限即可。
例 4:授權 add 用戶可添加普通用戶
add ALL=/usr/sbin/useradd 讓 add 用戶可以添加普通用戶
add ALL=/usr/bin/passwd [A-Za-z]* , !/usr/bin/passwd“”,!/usr/bin/passwd root
讓 add 用戶可以給新添加用戶修改密碼,不允許修改 root 用戶的密碼
4、文件特殊權限
(1)SetUID 權限
1、當一個具有執行權限的文件設置 SetUID 權限後,用戶執行這個文件時將以文件所有者的身份執行
特點:
2、只有可以執行的二進制程序才能設定 SUID 權限
3、命令執行者要對該程序擁有 x(執行)權限
4、命令執行者在執行該程序時獲得該程序文件屬主的身份(在執行程序的過程中靈魂附體為文件的屬主)
5、SetUID 權限只在該程序執行過程中有效,也就是說身份改變只在程序執行過程中有效
例:普通用戶使用/usr/bin/passwd命令修改自己的密碼
普通用戶使用/usr/bin/passwd 的那一瞬間臨時調用了 root 的身份,進行對/etc/passwd 和/etc/shadow 進行了修改,當信息修改完成後,立即釋放 root 身份變回了自己普通用戶的身份。
註意:如果取消了/usr/bin/passwd 的 SetUID 權限,則普通用戶無法修改密碼
危險的 SetUID:如果給/usr/bin/vim這個命令設置 SetUID 權限後,普通用戶即可使用/usr/bin/vim命令來修改/etc/passwd等系統文件,使普通用戶成為超級用戶。
(2) SetGID 權限(文件和目錄)
1、針對文件的作用:
(1)只有可執行的二進制程序才能設置 SGID 權限
(2)命令執行者要對該程序擁有 x(執行)權限
(3)命令執行在執行程序的時候,組身份升級為該程序文件的屬組
(4)SetGID權限同樣只在該程序執行過程中有效,也就是說組身份改變只在程序執行過程中有效
2、針對目錄的作用:
(1)普通用戶必須對此目錄擁有 r 和 x 權限,才能進入此目錄
(2)普通用戶在此目錄中的有效組會變成此目錄的屬組
(3)普通用戶對此目錄擁有 w 權限時,新建的文件的默認屬組是這個目錄的屬組
例:創建long目錄,並給long目錄SetGID權限,讓普通用戶有寫權限。
[root@localhost ~]# mkdir /long
[root@localhost ~]# chmod g+s /long/
[root@localhost ~]# chmod 777 /long/
[root@localhost ~]# ls -ld /long/
drwxrwsrwx 2 root root 6 11月 29 15:56 /long/
[root@localhost ~]# su - a1 切換到普通用戶a1
[a1@localhost ~]$ cd /long/ 讓普通用戶進入/long目錄創建文件
[a1@localhost long]$ touch 1.txt
[a1@localhost long]$ ls -l
總用量 0
-rw-rw-r-- 1 a1 root 0 11月 29 16:04 1.txt
最後發現普通用戶創建的1.txt文件的所屬組不是a1,而是 root
(3)Sticky BIT 權限
Sticky BIT 粘著位,也簡稱為 SBIT。SBIT 目前僅針對目錄有效,它的作用如下:
1、粘著位目前只對目錄有效,普通用戶對該目錄擁有 w 和 x 權限,即普通用戶可以在此目錄擁有寫入權限
2、如果沒有粘著位,因為普通用戶擁有 w 權限,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件。一但賦予了粘著位,除了 root 可以刪除所有文件,普通用戶就算擁有 w 權限,也只能刪除自己建立的文件,但是不能刪除其他用戶建立的文件。
5、總結SetUID 權限,SetGID 權限,Sticky BIT 權限的設置
(1)各種特殊權限所對應的權限數值
權限名稱 | 對應的權限數值 |
SetUID | 4 |
SetGID | 2 |
Sticky BIT | 1 |
讀(r) | 4 |
寫(w) | 2 |
執行(x) | 1 |
註意:權限值由4位數字組成,從左往右第一位是特殊權限值,第二位是文件或目錄所有者的權限值,第三位是文件或目錄的所屬組的權限值,第四位是文件或目錄其他人的權限值。 |
(2)SetUID 權限,SetGID 權限,Sticky BIT 權限的設置
上面知道了這些特殊權限所對應的權限值,那麽我們就可以使用chmod來進行設置。
例1:給文件/long/1.txt設置SetUID權限
方法1:
[root@localhost long]# chmod u+s 1.txt 設置SetUID權限
[root@localhost long]# ls -l
總用量 0
-rwSrw-r-- 1 a1 root 0 11月 29 16:04 1.txt
[root@localhost long]# chmod u-s 1.txt 取消SetUID 權限
[root@localhost long]# ls -l
總用量 0
-rw-rw-r-- 1 a1 root 0 11月 29 16:04 1.txt
方法2:
[root@localhost long]# chmod 4755 1.txt 使用權限值設置SetUID權限
[root@localhost long]# ls -l
總用量 0
-rwsr-xr-x 1 a1 root 0 11月 29 16:04 1.txt
[root@localhost long]# touch 2.txt
[root@localhost long]# chmod 755 1.txt 使用權限值取消SetUID權限
[root@localhost long]# ls -l
總用量 0
-rwxr-xr-x 1 a1 root 0 11月 29 16:04 1.txt
例2:給/long/2.txt設置SetGID 權限。
方法1:
[root@localhost long]# chmod g+s 2.txt 設置SetGID 權限
[root@localhost long]# ls -l
總用量 0
-rw-r-Sr-- 1 root root 0 12月 1 16:27 2.txt
[root@localhost long]# chmod g-s 2.txt 取消SetGID 權限
[root@localhost long]# ls -l
總用量 0
-rw-r--r-- 1 root root 0 12月 1 16:27 2.txt
方法2:
[root@localhost long]# chmod 2744 2.txt 使用權限值設置SetGID 權限
[root@localhost long]# ls -l
總用量 0
-rwxr-Sr-- 1 root root 0 12月 1 16:27 2.txt
[root@localhost long]# chmod 744 2.txt 使用權限值取消SetGID 權限
[root@localhost long]# ls -l
總用量 0
-rwxr--r-- 1 root root 0 12月 1 16:27 2.txt
例3:給/long目錄設置Sticky BIT 權限
方法1:
[root@localhost long]# chmod o+t /long/ 設置Sticky BIT 權限
[root@localhost long]# ls -ld /long/
drwxr-xr-t 2 root root 19 12月 1 16:35 /long/
[root@localhost long]# chmod o-t /long/ 取消Sticky BIT 權限
[root@localhost long]# ls -ld /long/
drwxr-xr-x 2 root root 19 12月 1 16:35 /long/
方法2:
[root@localhost long]# chmod 1755 /long/ 使用權限值設置Sticky BIT 權限
[root@localhost long]# ls -ld /long/
drwxr-xr-t 2 root root 19 12月 1 16:35 /long/
[root@localhost long]# chmod 755 /long/ 使用權限值取消Sticky BIT 權限
[root@localhost long]# ls -ld /long/
drwxr-xr-x 2 root root 19 12月 1 16:35 /long/
6、文件系統屬性設置(chattr可以限制root)
格式:chattr [+-=] [選項] 文件或目錄
選項:
i:如果對文件設置 i 屬性,那麽不允許對文件進行刪除、改名,也不能
添加和修改數據;如果對目錄設置 i 屬性,那麽只能修改目錄下文件的
數據,但不允許建立和刪除文件
a:如果對文件設置 a 屬性,那麽只能在文件中增加數據,但是不能刪
除也不能修改數據;如果對目錄設置 a 屬性,那麽只允許在目錄中建立
和修改文件,但是不允許刪除
e:Linux 中絕大多數的文件都默認擁有 e 屬性。表示該文件是使用 ext
件系統進行存儲的,而且不能使用“chattr -e”命令取消 e 屬性
查看文件系統屬性
格式:lsattr 選項 文件名
選項:
-a 顯示所有文件和目錄
-d 若目標是目錄,僅列出目錄本身屬性
Linux權限管理詳解