1. 程式人生 > 其它 >Linux 許可權管理筆記

Linux 許可權管理筆記

一、檔案基本許可權

1. 檢視許可權

1-1.基本許可權的修改
-rw-r--r--
  - 第一個"-"表示檔案型別(- 檔案,d 目錄,l 軟連結檔案)
  - rw-       r--       r--
    u所有者   g所屬組   o其它人
其中r讀,w寫,x執行

2. 修改許可權

(1).chmod  [選項]  模式  檔名
  - 選項
    . -R  遞迴 (當前目錄下所有檔案遞迴賦予許可權)
  - 模式
    [ugoa] [+-=] [rwx]
    [mode=421]

栗子:

1. chmod u+x cangls.av   # u --> 所有者, x --> 執行
2. chmod g+w,o+w furong.av  # g --> 所屬組  o --> 其他人
3. chmod g-w,o-w furong.av  
4. chmod u=rwx,g=rw furong.av  
5. chmod a=rw furong.av   # 所有人都有rw許可權 
許可權的數字表示(用二進位制轉的數)
r---4;  w----2;  x ----1;    常用組合:777  644 755 
如rwxr-xr-x,則對應7 5 5
# chmod 755 furong.av

3. 許可權對檔案的作用

r: 讀取檔案內容(cat more  head tail)
w: 編輯、新增、修改檔案內容(vi echo)   # echo  1111 >> abc.txt
  - 但是不包含刪除檔案,因為檔名和檔案資料存放位置不同
x: 可進入目錄
注意:
  對檔案來講:最高許可權是 x
  對目錄來講:最高許可權是 w

  head:預設是檢視檔案的前10行
  tail:預設是檢視檔案的最後10行 ,  -n 指定檢視多少行  # tail -f -n 20 abc.log 
  more:顯示滿一頁時暫停,按空格/Ctrl+F繼續顯示下頁,Ctrl+B 返回上一屏 或按Q停止顯示。

4. 許可權對目錄的作用

r: 可以查詢目錄下的檔名(ls)
w: 具有修改目錄結構的許可權,如新建檔案和目錄, 刪除此目錄下的檔案和目錄, 
     重新命名次目錄下檔案和目錄,剪下(touch, rm , mv ,cp )
x: 可以進入目錄 (cd)

對檔案來講, 最高許可權是 x
對目錄來講: 最高許可權是w --> 0 5(rx) 7(rwx) 只有這三種有有意義
chomd 755 <目錄名>

(1) chown  使用者名稱:組名   <檔案or目錄>
(2) chown: 修改檔案的所有者
格式:chown  使用者名稱  檔名
例:chown user1 test

(3) chgrp:修改檔案的所屬組
格式:chgrp  組名  檔名
例:chgrp user1 test

例項要求

  • 擁有一個test目錄
  • 讓testuser擁有所有的許可權
  • 讓使用者組有檢視的許可權
  • 其他所有人不許檢視這個目錄
1. sudo groupadd  [使用者組]   增加使用者組
2. sudo gpasswd -a vagrant docker  將vagrant使用者新增到docker使用者組
3. groups [username]:檢視該使用者所屬使用者組     
4. sudo adduser [username]:新增新使用者     
5. sudo usermod -G [使用者組] [username]:把使用者新增到使用者組  
6. sudo usermod -G sudo Kobe:把科比新增到 sudo 使用者組  
7. sudo deluser [username]:刪除使用者,如果同名使用者組沒有其它成員,同時該使用者組也沒了     
8. sudo gpasswd -d [username] [使用者組]:從使用者組中刪除使用者     
9. su [username]:切換使用者到當前目錄    
10. su -l [username]:切換使用者到使用者家目錄    
11. Ctrl D】 / exit:退出當前使用者     
12. sudo su:使當前使用者進入 root 

[python] view plain copy

# 擁有一個test目錄  
changwen@ubuntu:~$ ll -d test  
drwxrwxr-x 3 changwen changwen 4096 Jul 24 05:41 test/  

# 新增一個testuser使用者  
changwen@ubuntu:~$ sudo useradd testuser  
  
# 設定該使用者的密碼  
changwen@ubuntu:~$ sudo passwd testuser  
Enter new UNIX password:   
Retype new UNIX password:   
passwd: password updated successfully  
  
# 在使用者組裡新增兩個使用者  
changwen@ubuntu:~$ sudo useradd -g usergroup user1  
changwen@ubuntu:~$ sudo useradd -g usergroup user2  
  
# 設定test目錄的所有者:所屬組  
changwen@ubuntu:~$ sudo chown testuser:usergroup test  
  
changwen@ubuntu:~$ ll -d test  
drwxrwxr-x 3 testuser usergroup 4096 Jul 24 05:41 test/  

# 按例項要求設定許可權  
changwen@ubuntu:~$ sudo chmod 750 test  
changwen@ubuntu:~$ ll -d test  
drwxr-x--- 3 testuser usergroup 4096 Jul 24 05:41 test/  ```

二、檔案預設許可權

unmak: 檢視預設許可權
如0022
  - 第一位0: 檔案特殊許可權
  - 022 : 檔案預設許可權
臨時修改: umask 0002
永久修改: vi  /etc/profile

1. 檔案預設許可權

  1) 檔案預設不能建立執行檔案,必須手工賦予執行許可權
  2) 所以檔案預設許可權最大為666
  3) 預設許可權需要換算成字母再相減
  4) 建立檔案之後的預設許可權,為666減去umask值
例如:
 - 檔案預設最大許可權是666, umask值為022
 - -rw-rw-rw-  減去  -----w--w-  等於 -rw-r--r--

2. 目錄的預設許可權

1).目錄預設許可權最大為777
  2).預設許可權需要換算成字母再相減
  3).建立檔案之後的預設許可權,為777減去umask值
例如:
 - 目錄預設許可權最大為777, umask值為022  
 - -rwxrwxrwx  減去  -----w--w-  等於 -rwxr-xr-x

三、ACL簡介

ACL就是用來解決使用者身份不足的問題

檢視分割槽ACL許可權是否開啟
dupe2fs 命令是查詢指定分割槽詳細檔案系統資訊的命令
dupe2fs -h /dev/sda5
-h 僅顯示超級塊中資訊,而不是磁碟塊的詳細資訊

臨時開啟分割槽ACL許可權
重新掛載根分割槽,並掛載加入acl許可權
mount -o remount, acl /

永久開啟分割槽ACL許可權(不建議修改)
vi /etc/fstab

加入acl

然後修改UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defalults acl 1 1

1. 檢視與設定ACL許可權

檢視acl許可權
getfacl 檔名

設定acl許可權

setfacl  選項  檔名
  -m  設定ACL許可權
  -x  刪除指定的ACL許可權
  -b  刪除所有的ACL許可權
  -d  設定預設ACL許可權
  -k  刪除預設ACL許可權
  -R  遞迴設定ACL許可權

栗子:

changwen@ubuntu:~$ mkdir av  

# 增加所有者和使用者組,並設定av目錄的許可權  
changwen@ubuntu:~$ sudo useradd tony  
changwen@ubuntu:~$ sudo groupadd stu  
changwen@ubuntu:~$ sudo chown tony:stu av  
# 設定av許可權  
changwen@ubuntu:~$ sudo chmod 770 av  
  
# 新增老王使用者並設定密碼  
changwen@ubuntu:~$ sudo useradd lw  
changwen@ubuntu:~$ sudo passwd lw  
Enter new UNIX password:   
Retype new UNIX password:   
passwd: password updated successfully  

# 給使用者lw賦予r-x許可權,使用 "u:使用者名稱:許可權" 格式  
changwen@ubuntu:~$ sudo setfacl -m u:lw:rx  /home/changwen/av  

# 為使用者組tgroup2分配ACL許可權。使用 "g:組名:許可權" 格式  
setfacl -m g:tgroupt2:rwx  /home/changwen/av  

可以看到使用者lw不屬於使用者組,也不屬於其它組,這就是ACL許可權

2. 最大有效許可權與刪除

上面getfacl av可以看到有一個mask
mask:是用來指定最大有效許可權的。如果我給使用者賦予ACL許可權,是需要和mask的許可權”相與”才能得到使用者的真正許可權。

[laowang@localhost home]$ getfacl av
# file: av
# owner: tony
# group: stu
user::rwx
user:laowang:r-x
group::rwx
mask::rwx
other::---
# 修改最大有效許可權
setfacl -m m:rx 檔名
 - 設定mask許可權為r-x。使用"m:許可權"格式

刪除ACL許可權
# 刪除指定使用者的ACL許可權
setfacl -x u:使用者名稱  檔名

# 刪除指使用者組的ACL許可權
setfacl  -x g:組名  檔名

# 刪除檔案的所有的ACL許可權
setfacl -b 檔名

3. 預設ACL許可權與遞迴ACL許可權

1).遞迴是父目錄在設定ACL許可權時,所有的子檔案和子目錄也會擁有相同的ACL許可權。遞迴許可權僅能賦予目錄,不能賦予檔案。
setfacl -m u:使用者名稱:許可權 -R 檔名
-R 如果不加R,那麼該目錄下建立的檔案沒有ACL許可權
但加R,會有許可權溢位
所以建議少用ACL許可權

2).預設ACL許可權的作用是如果給們目錄設定了預設ACL許可權,那麼父目錄中所有新建的子檔案都會繼承父目錄的ACL許可權。
setfacl -m d:u:使用者名稱:許可權 檔名

四、sudo許可權

1. sudo許可權的概念

root把本來只能超級使用者執行的命令賦予普通使用者執行。
sudo的操作物件是系統命令。

2. sudo許可權的使用

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

// 栗子一:普通使用者不能執行shutdown命令

1  visudo   //編輯/etc/sudoers檔案
2 增加user1 ALL=(ALL) /sbin/shutdown -r now配置。
注:命令寫的越簡單,user1使用者得到的許可權越大,命令寫的越詳細,user1使用者得到的許可權就越小;系統命令要寫成絕對路徑,以相容其他版本。
3 儲存退出

// 登陸普通使用者賬號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使用者等密碼

五、檔案特殊許可權

1. SetUID許可權

  • 只有可執行的二進位制程式才能設定SetUID許可權
  • 命令執行者要對該程式擁有x(執行)許可權
  • 命令這行者在執行該程式時獲得該程式檔案屬主的身份(在執行程式的過程中靈魂附體為檔案的屬主)
    如: passwd命令,其他使用者都可以使用passwd更改自己的密碼
    [user1@localhost root]$ ll /usr/bin/passwd 
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
  • SetUID許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效;

2. 設定和取消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

3. 危險的SetUID許可權

關鍵目錄應嚴格控制寫許可權,比如”/”、”/usr” 等
使用者的密碼設定要嚴格最受密碼三原則
對系統中預設應該具有SetUID許可權的檔案作以列表,定時檢查有沒有這之外的檔案被設定了SetUID許可權

不能對vi等編輯器賦予SetUID許可權,這樣vi就能編輯/etc/shadow檔案而更改root密碼。
#!/bin/bash
#  搜尋系統中所有擁有SUID和SGID的檔案, 並儲存到臨時檔案中
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
# 做迴圈,每次迴圈取出臨時檔案中的檔名
for i in $(cat /tmp/setuid.check)
do 
        # 比對這個檔案是否再模板檔案中
		grep $i /root/suid.log > /dev/null
		# 檢測上一個命令的返回值,如果不為0,證明上一個命令報錯
			if ["$?" != "0"]
			then 
				# 如果檔名不在模板檔案中,則輸出錯誤資訊,並把報錯輸出到日誌中
				echo "$i is not in listfle" >> /root/sudi_log_$(date +%F)
			fi
done
# 刪除臨時檔案
rm -rf /tmp/setuid.check