一、基本權限管理
1.ll命令之後的文件:
-rw-r--r--
- 文件類型 (-文件 d目錄 l軟鏈接)
u 所有者 g 所屬組 o 其他人 (所有者可以不屬於所屬組)
r 讀 w 寫 x 執行
2.chmod命令:
使用+、-、r、w、x
格式:chmod [選項] 模式 文件名 (-R 遞歸)
命令 | 說明 |
---|---|
chmod u+x 文件名 | 給所有者賦予執行權限 |
chmod g+w,o+w 文件名 | 給所屬組和其他人增加寫權限 |
chmod g-w,o-w 文件名 | 刪除權限 |
chmod u=rwx,g=rw 文件名 | 清除原始權限,賦予指定權限 |
chmod a=rw | 給所有人賦予指定權限 |
權限的數字表示
r ---- 4
w ---- 2
x ---- 1
rwx:7 rx:5 rw:6 r:4
644: rw-r--r--
777:
755: rwxr-xr-x
chmod 777 文件
其他命令
chown 用戶名 文件名 //改變文件的所有者
chgrp 所屬組 文件名 //改變所屬組
chown 所有者:所屬組 文件名 //同時修改所有者和所屬組
3.sudo權限:
root把本來只能超級用戶執行的命令賦予普通用戶執行。
sudo的操作對象是《系統命令》
visudo命令實際修改的是/etc/sudoers文件
root ALL=(ALL) ALL
用戶名 被管理主機的地址=(切換的身份) 授權命令(絕對路徑)
user1 ALL=(ALL) /sbin/shutdown -r now
user1 ALL=/usr/sbin/useradd
user1 ALL=/usr/sbin/passwd ***********可以更改root命令
解決:
user1 ALL=/usr/sbin/passwd [a-zA-Z]*, !/usr/sbin/passwd "", !/usr/sbin/passwd root
注意:不要賦予普通用戶vi權限。不然會有權限(以root身份)修改所有配置文件。
%wheel ALL=(ALL) ALL
%組名 被管理主機的地址=(切換的身份) 授權命令(絕對路徑)
sudo -l 查看所有被允許的命令
sudo 命令 //執行命令,之前會要求輸入當前用戶的密碼,必須是絕對路徑
4.權限的作用:
權限對文件的作用:
r:讀取文件內容(cat more head tail)
w:編輯、新增、修改文件內容(vi echo)
但是不包括刪除。
文件夾保存文件,文件保存數據。刪除文件需要對文件夾有寫權限,理解:文件夾和文件都有自己的數據塊,
x:可執行
對文件來講,最高權限是執行x
權限對目錄的作用:
r:可以查詢目錄下的文件名(ls)
w:具有修改目錄結構的權限。如新建文件和目錄,刪除此目錄下文件和目錄,重命名、剪切(touch rm mv cp)
x:可以進入目錄(cd)
對目錄來講,最高權限是寫w。
有效的權限:0 5(rx) 7(rwx)
無效的權限:4 1 6...(原因:沒有x,就沒有進入目錄的權限,其他操作沒有意義)
二、特殊權限介紹
1.默認權限:
window中默認權限繼承至上一級文件,
Linux中umask查看默認權限
umask //0022,0文件的特殊權限,022文件默認權限
文件默認值計算:
文件默認不能建立爲執行文件,必須手工賦予執行權限。
文件默認權限最大666
默認權限需要換算成字母再相減
建立文件之後的默認權限,爲666減去umask值。
666 rw-rw-rw- 默認權限最高值
022 ----w--w- umask //修改umask值來改變最終默認權限
644 rw-r--r-- 結果
文件夾默認值計算:
目錄權限最大爲777
換算成字母后減去umask值。
臨時修改umask值:
umask 0000
永久修改umask值:
vi /etc/profile 環境變量配置文件
2.特殊權限:
安全性考慮,若非必須,不要使用這些權限
s代表可執行的SUID,S代表不可執行的SUID
SetUID:僅能作用於文件
ll /usr/bin/passwd 用戶修改自身密碼
只有可以執行的二進制程序才能設定SUID權限
命令執行者要對該程序擁有x權限
命令執行者在執行該程序時獲得該程序屬主的身份(在執行程序的過程中靈魂附體爲文件的屬主)
SetUID權限只在該程序執行過程中有效,也就是說身份改變只在程序執行過程中有效。
增加方法:
chmod 4775 文件名
chmod u+s 文件名
rwsrwxr-x
取消方法:
chmod 0775 文件名
chmod u-s 文件名
rwxrwxr-x
危險的SetUID:
chmod 4755 /bin/vi *************給vi設定SUID,執行vi時身份是root。
關鍵目錄應嚴格控制寫權限,比如"/","/usr"
用戶密碼設置要嚴格遵守密碼三原則
對系統中默認應該具有SetUID權限的文件作一列表,定時檢查有沒有這之外的文件設置了SetUID權限
SetGID:能作用於文件和目錄
locate命令:
用戶對/usr/bin/locate命令有執行權限,/usr/bin/locate所屬組爲slocate,並設置了SGID。用戶執行locate時,組身份會升級爲slocate,而slocate對/var/lib/mlocate/mlocate.db擁有r權限,所以普通用戶可以使用locate命令查詢mlocate.db數據庫。命令結束後用戶身份返回爲原組。
只有可執行文件的二進制程序才能設置SGID
命令執行者要對該程序擁有x權限
命令執行者在執行該程序時,組身份升級爲該程序文件的屬組
SetGID權限同樣只在該程序執行過程中有效,也就是說組身份改變只在程序執行過程中有效。
給目錄設置SGID權限:
用戶在此目錄下新建文件默認的所屬組爲目錄的組,而不是用戶本身的組
設定SGID:
chmod 2755 文件名 //0755
chmod g+s 文件名 //g-s刪除
一個監控系統中所有擁有SUID和SGID文件的腳本
#!bin/bash
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
#搜索系統中所有擁有SUID和SGID的文件,保存到臨時文件中
for i in $(cat /tmp/setuid.check)
#每次循環取出臨時文件中的文件名
do
grep $i /root/suid.log > /dev/null
#suid.log爲預先保存的所有合法的擁有suid文件的模板,查看文件是否在模板中
#suid.log的創建命令:find / -perm -4000 -o -perm -2000 > /root/suid.log
if("$?" != "0")
#檢測上一個命令的返回值,若不爲0,證明上一個命令報錯
then
echo "$i isn't in listfile!" >> /root/suid.log.$(date+%F)
#若文件名不在模板文件中,輸出錯誤信息到日誌文件
fi
done
rm -rf /tmp/setuid.check
Sticky BIT:粘着位權限,僅能對目錄有效
普通用戶對該目錄擁有w和x權限,即普通用戶可以在此目錄擁有寫入權限。(7)
要求目錄給其他人的權限爲7,除了系統自帶的,不建議給其他目錄增加SBIT權限。
如果沒有粘着位,因爲普通用戶擁有w權限,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件。一但賦予了粘着位,除了root可以刪除所有的文件,普通用戶就算擁有w權限,也只能刪除自己建立的文件,但是不能刪除其他用戶建立的文件。
應用場景:共享目錄,每個用戶上傳文件,但禁止刪除其他用戶的文件。
設置:
chmod 1755 目錄
chmod o+t 目錄
刪除:
chmod 0755 目錄
chmod o-t 目錄
/tmp 臨時目錄擁有777,默認擁有SBIT權限
3.不可改變位權限:(chattr權限)
chattr [+-=] [選項] 文件名或目錄名
+增加 -刪除 =等於某權限
SBIT選項: i和a
a等價於append , i等價於insert
文件設置i屬性:不允許對文件進行刪除、改名,也不能添加和修改數據;
鎖定,有此屬性時,root都不可修改,但root可以去掉此屬性
chattr +i 文件名
目錄設置i屬性:只能修改目錄下文件的數據,但不允許建立和刪除文件。
文件設置a屬性:只能在文件中增加數據,不能刪除和修改數據;
禁止vi增加數據(很難判斷是否增加還是刪除),只能輸出重定向。
目錄設置a屬性:只允許在目錄中建立和修改文件,不允許刪除文件。
lsattr 文件名
lsattr -d 目錄名
4.ACL權限
Access Control list,解決文件權限控制中,用戶身份不足的問題。
查看分區ACL權限是否開啓:(ACL權限是掛載權限,屬於分區的)
df //查看分區
dumpe2fs -h /dev/sda5 查詢指定分區詳細文件系統信息的命令。-h 僅顯示超級塊中信息,而不顯示磁盤塊組的詳細信息。
臨時開啓ACL,重新掛載:
mount -o remount,acl / //重新掛載根目錄,增加acl權限。
永久開啓:
vi /etc/fstab //在分區表中修改:defaults,acl
mount -o remount /
查看ACL權限:
getfacl 文件名 //查看文件的ACL權限,+表示有ACL權限。
設定ACL權限的命令:
setfacl 選項 文件名
-m 增加:
setfacl -m u:user1:rx 文件名 //給用戶user設置rx權限
setfacl -m g:group1:rx 文件名 //給用戶組group1設置rx權限
setfacl -m m:rx 文件名 //指定最大有效權限
mask :指定最大有效權限,給用戶賦予的ACL權限需要和mask的權限相與才能得到用戶的真正權限。
-x 刪除指定:
setfacl -x u:用戶名 文件名
-b 刪除所有acl權限:
setfacl -b 文件名
-d 默認acl權限:給父目錄設定了默認ACL權限“之後”,在父目錄中建立的所有子文件都會繼承父目錄的ACL權限。
setfacl -m d:u:用戶名:權限 文件名
-R 遞歸設置acl權限:
setfacl -m u:user1:rx -R 文件名 //遞歸,只能賦予目錄。給父目錄設定權限時,給“已有的”子文件和目錄賦予相同的權限
遞歸時注意權限溢出:
執行權限對目錄的作用和文件的作用是不一樣的。目錄需要執行權限來進入目錄,但文件應儘量少給執行權限。