天天看點

Linux_權限管理

Linux

文章目錄

  • ​​Linux​​
  • ​​1. 權限簡介​​
  • ​​2. 權限管理指令​​
  • ​​2.1 修改權限的指令chmod​​
  • ​​2.2 修改檔案屬主和屬組的指令chown​​
  • ​​2.3 修改檔案的屬組指令chgrp​​
  • ​​3. 遮罩碼​​
  • ​​4. linux安全上下文與特殊權限​​
  • ​​4.1 linux安全上下文​​
  • ​​4.2 特殊權限​​
  • ​​5. 檔案系統通路控制清單facl​​
  • ​​6. sudo​​
  • ​​7. 管理指令​​

1. 權限簡介

檔案的權限主要針對三類對象進行定義:

  • :屬主,u
  • group:屬組,g
  • other:其它,o

加粗樣式每個檔案針對每個通路者都定義了三種權限:

Linux_權限管理

權限的二進制與十進制轉換:

Linux_權限管理

2. 權限管理指令

2.1 修改權限的指令chmod

//修改三類使用者的權限:
//文法:chmod MODE file,...
    -R      //遞歸修改權限

//修改某類使用者或某些類使用者權限:
//u,g,o,a(使用者類别)

//chmod 使用者類别=MODE file,.....
//chmod 使用者類别=MODE,使用者類别=MODE file,.....
    

//修改某類的使用者某位或某些位權限:
//u,g,o,a(使用者類别)

//chmod 使用者類别+|-MODE file,.....
//chmod 使用者類别+|-MODE,使用者類别+|-MODE file,.....
//chmod +|-MODE file,.....
      

2.2 修改檔案屬主和屬組的指令chown

chown指令隻有管理者可以使用。

//chown USERNAME file,...
    -R      //修改目錄及其内部檔案的屬主

//chown USERNAME:GROUPNAME file,...
//chown USERNAME.GROUPNAME file,...
      

2.3 修改檔案的屬組指令chgrp

//文法:chgrp [OPTION]... GROUP FILE...
    -R      //遞歸修改
      

3. 遮罩碼

為什麼檔案建立以後預設權限是644?

為什麼目錄建立以後預設權限是755?

這是由遮罩碼umask來控制的。

從名字就能看出來,遮罩碼umask是用來隐藏一些權限的。舉例:如果你不想讓人家認出你,你會怎麼辦?

檔案最終的權限為:

  • 666-umask

    目錄最終的權限為:

  • 777-umask

    檔案預設是不能具有執行權限的,如果算得的結果有執行權限則将其權限整體加1。

4. linux安全上下文與特殊權限

4.1 linux安全上下文

前提:程序有屬主和屬組;檔案有屬主和屬組

任何一個可執行程式檔案能不能啟動為程序,取決于發起者對程式檔案是否擁有可執行權限;

啟動為程序後,其程序的屬主為發起者,屬組為發起者所屬的組

  • 程序通路檔案時的權限取決于程序的發起者:
  • 程序的發起者是檔案的屬主時,則應用檔案屬主權限
  • 程序的發起者是檔案的屬組時,則應用檔案屬組權限
  • 應用檔案“其它”權限

4.2 特殊權限

linux預設權限是根據linux安全上下文的方式來控制的,而特殊權限的存在打破了linux安全上下文的規則。

SUID(4)     //運作程式時,這個程式啟動的程序的屬主是程式檔案自身的屬主,而不是啟動者為屬主
    chmod u+s file
    chmod u-s file
    //如果file本身原來就有執行權限,則SUID顯示為s,否則顯示為S
    
SGID(2)     //運作程式時,這個程式啟動的程序的屬組是程式檔案自身的屬組,而不是啟動者所屬的基本組
    //預設情況下,使用者建立檔案時,其屬組為此使用者所屬的基本組;
    //一旦某目錄被設定了SGID,則對此目錄有寫權限的使用者在此目錄中建立的檔案或目錄,其所屬的組 \
    //為此設定了SGID的目錄的屬組
    chmod g+s DIR
    chmod g-s DIR
    //如果file本身原來就有執行權限,則SGID顯示為s,否則顯示為S
    
Sticky(1)       //在一個公共目錄,每個人都能建立檔案,删除自己的檔案,但是不能删除别人建立的檔案
    chmod o+t DIR
    chmod o-t DIR
    //如果DIR本身原來就有執行權限,則Sticky顯示為t,否則顯示為T
    
4755    //有SUID,檔案權限為755
2755    //有SGID,檔案權限為755
1755    //有Sticky,檔案權限為755
7755    //有SUID、SGID、Sticky,檔案權限為755
//這裡前面的4、2、1分别表示SUID、SGID、Sticky
      

5. 檔案系統通路控制清單facl

facl(Filesystem Access Control List),利用檔案擴充儲存額外的通路控制權限。

//文法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
    -m      //設定
        u:UID:perm
        g:GID:perm
    //setfacl -m u:test:rw file
    //setfacl -m g:test:rw file
    //如果要為某個目錄設定預設的通路控制清單,隻需要設定時在u或g前面加上d即可。 如:\
    //setfacl -m d:u:test:rw file,此時在此目錄中建立的檔案均繼承此通路控制清單所設定的權限
    -x      //取消
        u:UID
        g:GID
    //setfacl -x u:test file
    //setfacl -x g:test file
    -b      //Remove all
        
//文法:getfacl [-aceEsRLPtpndvh] file ...
//getfacl file


//檔案權限應用次序:
//預設情況下:
    Owner --> Group --> Other
//有設定facl的情況下:
    Owner --> facl,user --> Group --> facl,group --> Other
      

6. sudo

sudo可以實作某個使用者能夠以另外哪一個使用者的身份通過哪些主機執行什麼指令

sudo的配置檔案:/etc/sudoers

  • who which_hosts=(runas) command
  • who:User_Alias,表示運作指令者的身份
  • which_hosts:Host_Alias,通過哪些主機
  • runas:Runas_Alias,以哪個使用者的身份
  • command:Cmnd_Alias,運作哪些指令

    别名必須全部而且隻能使用大寫英文字母的組合,可以使用感歎号取反

  • 使用者别名:
  • User_Alias NETWORKADMIN =
  • 使用者的使用者名
  • 組名,使用%引導
  • 還可以其它已經定義的使用者别名
  • 主機名稱:
  • Host_Alias =
  • 主機名
  • IP位址
  • 網絡位址
  • 其它主機名稱
  • Runas别名:
  • Runas_Alias =
  • 使用者名
  • %組名
  • 其它的Runas别名
  • 指令别名:
  • Cmnd_Alias =
  • 指令路徑
  • 目錄(此目錄内的所有指令)
  • 其它已定義的指令别名
//sudo指令文法:sudo [options] COMMAND
    -V      //顯示版本編号
    -h      //會顯示版本編号及指令的使用方式說明
    -l      //列出目前使用者可以使用的所有sudo類指令
    -v      //因為sudo在第一次執行時或是在N分鐘内沒有執行(N預設為5)會問密碼,這個參數 \
            //是重新做一次确認,如果超過N分鐘,也會問密碼
    -k      //讓認證資訊失效,如果不指定-k,預設認證資訊在5分鐘後失效
    -b      //将要執行的指令放在背景執行
    -u USERNAME     //以指定的使用者名執行指令,預設為root
      

7. 管理指令

w   //顯示目前登入到系統的使用者有哪些,以及其正在做什麼        
sleep   //睡眠,寫腳本為防止上一個指令沒執行完下一指令就開始執行時可以加上sleep # \
        //表示停頓#秒後再執行後面的指令 
    sleep NUMBER[SUFFIX]...
        SUFFIX:
            s:秒,預設
            m:分
            h:小時
            d:天
last    //顯示/var/log/wtmp檔案,顯示使用者登入曆史及系統重新開機曆史                
    -n #        //顯示最近#次的相關資訊        
lastb   //顯示/var/log/btmp檔案,顯示使用者錯誤的登入嘗試                
    -n #        //顯示最近#次的相關資訊        
lastlog //顯示每個使用者最近一次成功登入資訊                
    -u username     //顯示特定使用者最近的登入資訊        
basename        //顯示路徑基名  
      

繼續閱讀