linux-4. 權限管理(ACL,SetUID, SetGID, Sticky BIT, 文件系統屬性chattr權限, 系統命令sudo權限)

一、ACL權限簡介與開啓

  1. 簡介
    看這樣一個情境:一個老師創建了一個目錄:/project,有rwx權限,這個文件屬於tgroup組,將班級所有的學生加入到這個組,有rwx權限,其他人沒有權限,現在來了一個視聽的學生,需要有rx的權限,如何解決?
    對於這個問題,用所有者,所屬組,其他人的身份不能解決這個問題,於是就出現了ACL權限。
    ACL用於解決身份不足的問題

  2. ACL權限開啓

    # 1. 查看分區ACL權限是否開啓
    # dumpe2fs命令是查詢指定分區詳細文件系統信息的命令
    # -h:僅顯示超級塊中信息,而不顯示磁盤塊組的詳細信息
    dumpe2fs -h /dev/sda1
    # 查看Default mount options中分區是否支持acl權限
    
    # 2. 臨時開啓分區ACL權限
    # 重新掛載根分區,並掛載加入acl權限
    mount -o remount,acl /
    
    # 3. 永久開啓分區ACL權限
    # 編輯/etc/fstab,加入acl權限
    vim /etc/fstab
    /dev/sda1 	/ 	ext4	defaults,acl	 1	 1
    # 重新掛載文件系統或重啓動系統,使修改生效
    mount -o remount /
    

二、查看與設定ACL權限

1. ACL權限

  1. 常用命令

    # 1. 查看ACL命令
    # 查看acl權限
    getfacl 文件名
    
    # 2. 設定ACL權限的命令
    setfacl 選項 文件名
    # -m: 設定ACL權限
    # -x:刪除指定的ACL權限
    # -b:刪除所有的ACL權限
    # -d:設定默認ACL權限
    # -k:刪除默認ACL權限
    # -R:遞歸設定ACL權限
    
    mkdir /project 
    adduser px1
    adduser px2
    groupadd tgroup
    gpasswd -a px1 tgroup
    gpasswd -a px2 tgroup
    
    chown root:tgroup /project
    chmod 770 /project
    
    adduser st
    # 給用戶設定權限是u,給組設定權限是g
    # 給用戶st賦予目錄/project/的r-x權限
    setfacl -m u:st:rx /project/
    
    # 3. 給用戶組設定ACL權限
    groupadd tgroup2
    setfacl -m g:tgroup2:rwx project/
    
    # 4. 刪除ACL權限
    # 刪除指定用戶的ACL權限
    setfacl -x u:用戶名 文件或目錄名
    # 刪除指定用戶組的ACL權限
    setfacl -x g:組名 文件或目錄名
    # 刪除文件所有的ACL權限
    setfacl -b 文件或目錄名
    
  2. 最大有效權限與刪除ACL權限

    # 1. 最大有效權限mask
    # mask是用來指定最大有效權限的。如果我給用戶賦予了ACL權限,是需要和mask的權限“相與”才能得到用戶的真正權限
    #	修改最大有效權限
    setfacl -m m:rx 文件或目錄名
    # 設定mask權限爲r-x。使用“m:權限”格式
    
  3. 默認的ACL權限和遞歸ACL權限

    # 1. 遞歸ACL權限
    #	 遞歸父目錄在設定ACL權限時,所有的子文件和子目錄也會擁有相同的ACL權限
    # -R:只能放在文件或目錄名前
    setfacl -m u:用戶名:權限 -R 文件或目錄名
    
    # 2. 默認ACL權限
    #	 默認ACL權限的作用是如果給父目錄設定了默認ACL權限,那麼父目錄中所有新建的子文件都會繼承父目錄的ACL權限
    setfacl -m d:u:用戶名:權限 目錄名
    

    在這裏插入圖片描述

三、文件特殊權限

3.1 SetUID

  • 只有可以執行的 二進制程序 才能設定SUID權限
  • 命令執行者對該程序擁有x權限
  • 命令執行者在執行該程序時獲得該程序文件屬主的身份
  • SetUID權限只在該程序執行過程中有效,也就是身份改變只在程序執行過程中有效

在這裏插入圖片描述

# 1. passwd命令擁有SetUID權限,所以普通用戶可以修改自己的密碼
# 修改密碼時要向/etc/shadow文件中寫入內容,但是查看/etc/shadow的文件屬性時,是什麼權限都沒有的,
# 但passwd有了SetUID權限,可以對文件/etc/shadow文件進行寫操作,所有普通用戶可以修改自己的密碼
ls -al /usr/bin/passwd

# 2. 設定SetUID的方法,以下兩種均可
chmod 4755 文件名
chmod u+s 文件名

# 3. 取消SetUID的方法,以下兩種均可
chmod 755 文件史
chmod u-s 文件名

# 4. 危險的SetUID
	- 關鍵目錄應嚴格控制寫權限。比如“/”,"/usr"等
	- 對系統中默認應該具有SetUID權限的文件作一列表,定時檢查有沒有這之外的文件被設置了SetUID權限

# 5. 正常的SetUID權限是小寫的s標誌,但有時候會出現S標誌,S標誌表示:設置有問題,SetUID權限不生效
	如給一個非二進制文件設置了SetUID權限,就會出現這種情況

在這裏插入圖片描述

3.2 SetGID

  1. SetGID針對文件的作用
  • 只有可以執行的 二進制程序 才能設定SGID權限

  • 命令執行者對該程序擁有x權限

  • 命令執行者在執行該程序時,組身份升級爲該程序文件的屬組

  • SetGID權限只在該程序執行過程中有效,也就是組身份改變只在程序執行過程中有效

    ls -al /usr/bin/locate
    # /usr/bin/locate命令權限爲-rwx--s--x 1 root slocate: 有SetGID權限
    # 在執行命令/usr/bin/locate時,會去讀文件/var/lib/mlocate/mlocate.db
    ls -al /var/lib/mlocate/mlocate.db
    # /var/lib/mlocate/mlocate.db文件屬性爲-rw-r----- root slocate, 普通的用戶沒有讀權限
    # 但是當執行命令/usr/bin/locate時,由於SetGID權限會使用用戶獲得slocate組的權限,
    # 而slocate是有權限讀取/var/lib/mlocate/mlocate.db文件
    
  1. SetGID針對目錄的作用
  • 普通用戶必須對此目錄擁有r和x權限,才能進入此目錄
  • 普通用戶在此目錄中的有效組會變成此目錄的屬組
  • 若普通用戶對此目錄擁有w權限時,新建的文件的默認屬組是這個目錄的屬組
  1. SetGID設定與取消命令
    # 1. 設定SetGID
    chmod 2755 文件名
    chmod g+s 文件名
    
    # 2. 取消SetGID
    chmod 755 文件名
    chmod g-s 文件名
    

3.3 Sticky BIT

  1. SBIT粘着位作用

    • 粘着位目前只對目錄有效
    • 普通用戶對此目錄擁有w和x權限
    • 如果沒有粘着位,因爲普通用戶擁有w權限,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件;
      如果賦予了粘着位,除了root可以刪除所有文件,普通用戶就算擁有w權限,也只能刪除自己建立的文件,但是不能刪除其他用戶建立的文件。
    # 有SBIT的目錄,經典的有/tmp目錄
    ls -ald /tmp/
    # 顯示drwxrwxrwt. 普通用戶只能刪除自己在/tmp/中建立的文件或目錄,但不能刪除其他用戶建立的文件和目錄
    
  2. SBIT設定與取消命令

    # SBIT只能由root賦予
    # 1. 設置SBIT
    chmod 1755 目錄名
    chmod o+t 目錄名
    
    # 2. 取消粘着位
    chmod 777 目錄名
    chmod o-t 目錄名
    

四、 文件系統屬性chattr權限

# 1. chattr命令格式
chattr [+-=] [選項] 文件名或目錄名
# 	+:增加權限
#	-:刪除權限
#	=:等於某權限
# 選項:
	i: 如果對文件設置i屬性,那麼不允許對文件進行刪除、改名、也不能添加和修改數據;
	   如果對目錄設置i屬性,那麼只能修改目錄下文件的數據,但不能新建和刪除文件。
	a: 如果對文件設置a屬性,那麼只能在文件中增加數據,不能刪除和修改數據;
	   如果對目錄設置a屬性,那麼只能在目錄中新建和修改文件,不能刪除。
# 設置的權限對root也有效

# 2. 查看文件系統屬性
lsattr 選項 文件名
# -a: 顯示所有文件和目錄
# -d: 若目標是目錄,僅列出目錄本身的屬性,而不是子文件的

五、系統命令sudo權限

# 1. sudo權限
 	- root把本來只能超級用戶執行的命令普通用戶執行
	- sudo的操作對象是系統命令
# 2. sudo使用授權
 # 修改/etc/sudoers文件,以下兩個命令都可以
 visudo
 vim /etc/sudoers
# root ALL=(ALL)		ALL
# 用戶名	被管理主機的地址= (可使用的身份)	授權命令(絕對路徑)
# %wheel	ALL=(ALL)		ALL
# %組名	被管理主機的地址= (可使用的身份)	授權命令(絕對路徑)
# eg: 授權sc用戶可以重啓服務器
sc ALL= /sbin/shutdown -r now

# eg:用戶lisa可以運行任何命令在CUNETS網段的所有主機上。假設 CUNETS = 128.138.0.0/255.255.0.0
lisa CUNETS = ALL 

# 3. 普通用戶查看可用的sudo命令
sudo -l
發佈了140 篇原創文章 · 獲贊 44 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章