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