Linux—許可權管理

Linux 許可權管理

1、許可權簡介

Linux許可權是作業系統用來限制對資源訪問的機制,許可權一般分為讀、寫、執行。系統中每個文件都擁有特定的許可權:屬主、屬組以及其他人,通過這樣的機制來限制哪些用戶或用戶組可以對特定文件進行相應的操作。

1.1 許可權分類

  • 許可權針對文件的三類對象:
全拼 翻譯 簡寫
owner 屬主 u
group 屬組 g
other 其它人 o
  • 許可權的分類:
許可權 對文件的影響 對目錄的影響
r(讀取) 可讀取文件內容 可列出目錄中內容
w(寫入) 可修改文件內容 可在目錄中創建刪除內容
x(執行) 可作為命令執行 可訪問目錄內容

注意:目錄必須擁有 x 許可權,否則無法查看其內容

  • 許可權的表示方式:
第一種 第二種
– – – 0
– – x 1
– w – 2
– w x 3
r – – 4
r – x 5
r w – 6
r w x 7

1.2 Linux安全上下文

Linux每個進程都是以某個用戶身份運行,進程的許可權與該用戶的許可權一樣,運行該進程的用戶的許可權越大,則進程擁有的許可權就越大。

文件有屬主和屬組,進程有屬主和屬組

  • 任何一個可執行程式文件能不能啟動為進程,取決於發起者對程式文件是否擁有可執行許可權
  • 啟動為進程後,其進程的屬主為發起者,屬組為發起者的基本組
  • 進程訪問文件時的許可權取決於進程的發起者:
    • 進程的發起者是文件的屬主時,則應用文件屬主許可權
    • 進程的發起者是文件的屬組時,則應用文件屬組許可權
    • 應用文件「其它」許可權

2、許可權管理命令

2.1 許可權修改命令chmod

//許可權修改主要修改三類對象的許可權

//語法:chmod MODE file,...
    -R      //遞歸修改許可權

//修改某類對象許可權:u,g,o,a

許可權修改的三種方式:
chmod 對象類別=MODE file,.....
chmod 對象類別=MODE,對象類別=MODE file,.....
例如:
[root@zsl ~]# chmod u=rwx zsl 
[root@zsl ~]# chmod u=rwx,g=rwx zsl 

chmod 對象類別+|-MODE file,.....
chmod 對象類別+|-MODE,對象類別+|-MODE file,.....
chmod +|-MODE file,.....
例如:
[root@zsl ~]# chmod u+rwx zsl 
[root@zsl ~]# chmod u-x,g-x zsl
[root@zsl ~]# chmod +x zsl

chmod "mode number" file,.....
例如:
[root@zsl ~]# chmod 777 zsl

2.2 屬主和屬組修改命令chown

//chown命令只有管理員可以使用。

chown USERNAME file,...
    -R      //修改目錄及其內部文件的屬主

chown USERNAME:GROUPNAME file,...
chown USERNAME.GROUPNAME file,...
例如:
[root@zsl ~]# chown root.root zsl 
[root@zsl ~]# chown root:root zsl 

2.3 特殊許可權

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
    
SBIT(1)	    //公共目錄,每個人都能創建文件,刪除自己的文件,但是不能刪除別人創建的文件
    chmod o+t DIR
    chmod o-t DIR
    //如果DIR本身原來就有執行許可權,則SBIT顯示為t,否則顯示為T

特殊許可權的數字表示方式:
4755    //有SUID,文件許可權為755
2755    //有SGID,文件許可權為755
1755    //有Sticky,文件許可權為755
//這裡前面的4、2、1分別表示SUID、SGID、Sticky

2.4 文件系統訪問控制列表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
    示例:
       setfacl -b file

//查看文件系統訪問控制列表getfacl
//語法:getfacl [-aceEsRLPtpndvh] file ...
    示例:
       getfacl file

2.5 遮罩碼

為什麼文件創建以後默認許可權是644?
為什麼目錄創建以後默認許可權是755?

新建文件和新建目錄的默認許可權是由遮罩碼umask來控制的。

從名字就能看出來,遮罩碼umask是用來隱藏一些許可權的。

舉例:如果你不想讓人家認出你,你會怎麼辦?

文件最終的許可權為:

666-umask	文件最高許可權 - 遮罩碼 = 文件最終許可權

目錄最終的許可權為:

777-umask	目錄最高許可權 - 遮罩碼 = 目錄最終許可權

文件默認是不能具有執行許可權的,如果文件有了執行許可權則將其許可權整體加1。

3、sudo借權

sudo可以實現某個用戶能夠以另外哪一個用戶的身份通過哪些主機執行什麼命令

sudo的配置文件:/etc/sudoers

//使用visudo命令進行sudo的配置,每一行就是一個sudo條目,條目格式如下:

示例:
	who which_hosts=(runas) command

who : User,User_Alias			//表示運行命令者的身份
which_hosts : Host,Host_Alias		//通過哪些主機
runas : User,Runas_Alias		//以哪個用戶的身份
command : Command,Cmnd_Alias		//運行哪些命令

//別名必須全部而且只能使用大寫英文字母的組合,可以使用感嘆號取反

//別名分類
1.用戶別名:
User_Alias "Alias" =
	用戶的用戶名
	組名,使用%引導
	還可以其它已經定義的用戶別名

2.主機別名:
Host_Alias "Alias" =
	主機名
	IP地址
	網路地址
	其它主機別名

3.命令別名:
Cmnd_Alias =
	命令路徑
	目錄(此目錄內的所有命令)
	其它已定義的命令別名

//sudo命令語法:sudo [options] COMMAND
    -V      //顯示版本編號
    -h      //幫助資訊,會顯示版本編號及指令的使用方式說明
    -l      //列出當前用戶可以使用的所有sudo類命令
    -v      //重新做一次密碼確認,如果超過N(默認為5)分鐘,也會問密碼
    -k      //立刻清除認證資訊,如果不指定-k,默認認證資訊在5分鐘後失效
    -b      //將要執行的指令放在後台執行
    -u USERNAME     //以指定的用戶名執行命令,默認為root

4、文件特殊屬性命令

chattr命令用於改變文件的特殊屬性。與chmod命令相比,chmod只是改變文件的讀寫、執行許可權,而chattr是基於內核的更底層的屬性控制。

命令格式:
	chattr [選項] [+/-/=屬性] [文件或目錄]

選項:
	-R	//遞歸
	-V	//顯示過程

模式:
	+	//用於增加屬性
	-	//用戶刪除屬性
	=	//用於指定屬性
	A	//告訴系統不要修改該文件的最後訪問時間
	a	//只能向文件追加數據,不能刪除
	i	//設定文件不能被刪除,改名,寫入或新增內容

示例:
[root@hzz ~]# chattr +a hzz.txt		//為hzz.txt增加a屬性

[root@hzz ~]# lsattr hzz.txt		//查看文件特殊屬性 
-----a-------e-- hzz.txt

5、擴展命令

sleep   //睡眠

//寫腳本時為防止上一個命令沒執行完下一命令就開始執行時可以sleep命令
//語法:sleep NUMBER[SUFFIX]...
        SUFFIX:
            s:秒,默認
            m:分
            h:小時
            d:天
示例:
	sleep 5     //表示睡眠5秒後再執行後面的命令 

last    //顯示/var/log/wtmp文件內容,用戶登錄歷史及系統重啟歷史                
      -n #        //顯示最近#次的相關資訊

lastb   //顯示/var/log/btmp文件內容,用戶錯誤的登錄嘗試                
      -n #        //顯示最近#次的相關資訊

lastlog //顯示每個用戶最近一次成功登錄資訊                
      -u username     //顯示特定用戶最近的登錄資訊

basename        //顯示路徑基名  

Tags: