文件權限管理

一、基本權限管理

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 文件名   //遞歸,只能賦予目錄。給父目錄設定權限時,給“已有的”子文件和目錄賦予相同的權限
        遞歸時注意權限溢出:
        執行權限對目錄的作用和文件的作用是不一樣的。目錄需要執行權限來進入目錄,但文件應儘量少給執行權限。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章