Linux雲計算-04_Linux用戶及權限管理


Linux是一個多用戶的操作系統,引入用戶,可以更加方便管理Linux服務器,系統默認需要以一個用戶的身份登錄,而且在系統上啟動進程也需要以一個用戶身份器運行,用戶可以限制某些進程對特定資源的權限控制。

本章介紹Linux系統如何管理創建、刪除、修改用戶角色、用戶權限配置、組權限配置及特殊權限深入剖析。

1 Linux用戶及組

Linux操作系統對多用戶的管理,是非常繁瑣的,所以用組的概念來管理用戶就變得簡單,每個用戶可以在一個獨立的組,每個組也可以有零個用戶或者多個用戶。

Linux系統用戶是根據用戶ID來識別的,默認ID長度為32位,默認ID編號從0開始,但是為了和老式系統兼容,用戶ID限制在60000以下,Linux用戶分總共分為三種,分別如下:

  • root用戶 (ID 0)
  • 系統用戶 (ID 1-499)
  • 普通用戶 (ID 500以上)

Linux系統中的每個文件或者文件夾,都有一個所屬用戶及所屬組,使用id命令可以顯示當前用戶的信息,使用passwd命令可以修改當前用戶密碼。Linux操作系統用戶的特點如下:

  • 每個用戶擁有一個UserID,操作系統實際讀取的是UID,而非用戶名;
  • 每個用戶屬於一個主組,屬於一個或多個附屬組,一個用戶最多有31個附屬組;
  • 每個組擁有一個GroupID;
  • 每個進程以一個用戶身份運行,該用戶可對進程擁有資源控制權限;
  • 每個可登陸用戶擁有一個指定的Shell環境。

2 Linux用戶管理

Linux用戶在操作系統可以進行日常管理和維護,涉及到的相關配置文件如下:

  • /etc/passwd 保存用戶信息
  • /etc/shdaow 保存用戶密碼(以加密形式保存)
  • /etc/group 保存組信息
  • /etc/login.defs 用戶屬性限制,密碼過期時間,密碼最大長度等限制
  • /etc/default/useradd 顯示或更改默認的useradd配置文件

如需創建新用戶,可以使用命令useradd,執行命令useradd superman即可創建superman用戶,同時會創建一個同名的組superman,默認該用戶屬於superman主組。

useradd superman命令默認創建用戶superman,會根據如下步驟進行操作:

  • 在/etc/passwd文件中添加用戶信息;
  • 如使用passwd命令創建密碼,密碼會被加密保存在/etc/shdaow中;
  • 為superman創建家目錄:/home/superman;
  • 將/etc/skel中的.bash開頭的文件復制至/home/superman家目錄;
  • 創建與用戶名相同的superman組,superman用戶默認屬於superman同名組;
  • superman組信息保存在/etc/group配置文件中。

在使用useradd命令創建用戶時,可以支持如下參數:

用法:useradd [選項] 登錄
useradd -D
useradd -D [選項]
選項:
-b, --base-dir BASE_DIR       			指定新賬戶的家目錄;
-c, --comment COMMENT         		    新賬戶的GECOS字段;
-d, --home-dir HOME_DIR       		    新賬戶的主目錄;
-D, --defaults                			顯示或更改默認的useradd配置;
-e, --expiredate EXPIRE_DATE  			新賬戶的過期日期;
-f, --inactive INACTIVE       			新賬戶的密碼不活動期;
-g, --gid GROUP               		    新賬戶主組的名稱或ID;
-G, --groups GROUPS   		  		    新賬戶的附加組列表;
-h, --help                    			顯示此幫助信息並推出;
-k, --skel SKEL_DIR           		    使用此目錄作為骨架目錄;
-K, --key KEY=VALUE           		    不使用/etc/login.defs中的默認值;
-l, --no-log-init     		  			不要將此用戶添加到最近登錄和登錄失敗數據庫;
-m, --create-home     		  			創建用戶的主目錄;
-M, --no-create-home  		  			不創建用戶的主目錄;
-N, --no-user-group   		  			不創建同名的組;
-o, --non-unique              			允許使用重復的UID創建用戶;
-p, --password  PASSWORD       		    加密后的新賬戶密碼;
-r, --system                  			創建一個系統賬戶;
-R, --root CHROOT_DIR         		    chroot到的目錄;
-s, --shell SHELL             			新賬戶的登錄shell;
-u, --uid UID                 			新賬戶的用戶ID;
-U, --user-group              			創建與用戶同名的組;
-Z, --selinux-user SEUSER     			為SELinux用戶映射使用指定SEUSER。

2.1 useradd案例演示

1、新建superman2用戶,並加入到superman,superman1附屬組

[root@superman-vm01 ~]# useradd -G superman,superman1 superman2
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# cat /etc/passwd|grep superman2
superman2:x:1001:1002::/home/superman2:/bin/bash
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# id superman2
uid=1001(superman2) gid=1002(superman2) groups=1002(superman2),1000(superman),1001(superman1)
[root@superman-vm01 ~]# 

2、新建superman3用戶,並指定新的家目錄,同時指定其登陸的SHELL

[root@superman-vm01 ~]# useradd superman3 -d /data/superman3 -s /bin/bash   
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# cat /etc/passwd|grep superman3
superman3:x:1002:1003::/data/superman3:/bin/bash
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# id superman3
uid=1002(superman3) gid=1003(superman3) groups=1003(superman3)
[root@superman-vm01 ~]# 

3 Linux組管理

所有的Linux或者Windows系統都有組的概念,通過組可以更加方便的管理用戶,組的概念應用於各行各業,例如企業會使用部門、職能或地理區域的分類方式來管理成員,應用在Linux系統,同樣可以創建用戶,並用組的概念對其管理。

Linux組有如下特點:

  • 每個組有一個組ID;
  • 組信息保存在/etc/group中;
  • 每個用戶至少擁有一個主組,同時還可以擁有31個附屬組。

通過命令groupadd、groupdel、groupmod來對組進行管理,詳細參數使用如下:

groupadd用法
-f, --force           			如果組已經存在則成功退出;
							    並且如果 GID 已經存在則取消 –g;
-g, --gid GID            		為新組使用GID;
-h, --help               		顯示此幫助信息並推出;
-K, --key KEY=VALUE      	    不使用/etc/login.defs中的默認值;
-o, --non-unique         		允許創建有重復GID的組;
-p, --password PASSWORD  	    為新組使用此加密過的密碼;
-r, --system             		創建一個系統賬戶;

groupmod用法		
-g, --gid GID            		將組ID改為GID;
-h, --help               		顯示此幫助信息並推出;
-n, --new-name NEW_GROUP 	    改名為NEW_GROUP;
-o, --non-unique         		允許使用重復的GID;
-p, --password PASSWORD  	    將密碼更改為(加密過的)PASSWORD;

groupdel用法
groupdel superman                  刪除superman組; 

3.1 組管理案例演示

1、groupadd創建hanxiao組

[root@superman-vm01 ~]# groupadd hanxiao
[root@superman-vm01 ~]# 

2、groupadd創建hanxiao組,並指定GID為1010

[root@superman-vm01 ~]# groupadd -g 1010 hanxiao1
[root@superman-vm01 ~]# 

3、groupadd創建一個system組,名為hanxiao2組

[root@superman-vm01 ~]# groupadd -r hanxiao2 
[root@superman-vm01 ~]#
[root@superman-vm01 ~]# cat /etc/group|grep hanxiao2
hanxiao2:x:982:
[root@superman-vm01 ~]# 

4、groupmod修改組名稱,將hanxiao組名,改成hanxiao1

[root@superman-vm01 ~]# groupmod -n hanxiao3 hanxiao
[root@superman-vm01 ~]# 

5、groupmod修改組GID號,將原hanxiao1組gid改成gid 1020

[root@superman-vm01 ~]# cat /etc/group|grep hanxiao1
hanxiao1:x:1010:
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# groupmod -g 1020 hanxiao1
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# cat /etc/group|grep hanxiao1
hanxiao1:x:1020:
[root@superman-vm01 ~]# 

4 Linux用戶及組案例

useradd主要用於新建用戶,而用戶新建完畢,可以使用usermod來修改用戶及組的屬性,如下為usermod詳細參數:

用法:usermod [選項] 登錄
選項:
-c, --comment 注釋            	   GECOS字段的新值;
-d, --home HOME_DIR           	    用戶的新主目錄;
-e, --expiredate EXPIRE_DATE  	    設定帳戶過期的日期為EXPIRE_DATE;
-f, --inactive INACTIVE       	    過期INACTIVE天數后,設定密碼為失效狀態;
-g, --gid GROUP               	    強制使用GROUP為新主組;
-G, --groups GROUPS           	    新的附加組列表GROUPS;
-a, --append GROUP            	    將用戶追加至上邊-G中提到的附加組中,
								    並不從其它組中刪除此用戶;
-h, --help                    	    顯示此幫助信息並推出;
-l, --login LOGIN             	    新的登錄名稱;
-L, --lock                    	    鎖定用戶帳號;
-m, --move-home               	    將家目錄內容移至新位置 (僅於-d一起使用);
-o, --non-unique              	    允許使用重復的(非唯一的)UID;
-p, --password PASSWORD       	    將加密過的密碼(PASSWORD)設為新密碼;
-R, --root CHROOT_DIR         	    chroot到的目錄;
-s, --shell SHELL             	    該用戶帳號的新登錄shell環境;
-u, --uid UID                 	    用戶帳號的新UID;
-U, --unlock                  	    解鎖用戶帳號;
-Z, --selinux-user  SEUSER		    用戶賬戶的新SELinux用戶映射。

4.1 usermod案例演示

1、將superman用戶屬組修改為superman,superman2附屬組;

[root@superman-vm01 ~]# id superman
uid=1000(superman) gid=1000(superman) groups=1000(superman)
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# usermod -G superman,superman2 superman 
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# id superman
uid=1000(superman) gid=1000(superman) groups=1000(superman),1002(superman2)
[root@superman-vm01 ~]#   

2、將superman用戶加入到superman3,superman4附屬組,-a為添加新組,原組保留;

[root@superman-vm01 ~]# id superman
uid=1000(superman) gid=1000(superman) groups=1000(superman),1002(superman2)
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# usermod -a -G superman3,superman4 superman  
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# id superman
uid=1000(superman) gid=1000(superman) groups=1000(superman),1002(superman2),1003(superman3),1021(superman4)
[root@superman-vm01 ~]# 

3、修改superman用戶,並指定新的家目錄,同時指定其登陸的SHELL;

[root@superman-vm01 ~]# cat /etc/passwd|grep superman
superman:x:1000:1000:superman:/home/superman:/bin/bash
superman2:x:1001:1002::/home/superman2:/bin/bash
superman3:x:1002:1003::/data/superman3:/bin/bash
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# usermod -d /tmp/ -s /bin/sh superman
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# cat /etc/passwd|grep superman       
superman:x:1000:1000:superman:/tmp/:/bin/sh
superman2:x:1001:1002::/home/superman2:/bin/bash
superman3:x:1002:1003::/data/superman3:/bin/bash
[root@superman-vm01 ~]#   

4、 將superman用戶名修改為superman;

[root@superman-vm01 ~]# cat /etc/passwd|grep superman       
superman:x:1000:1000:superman:/tmp/:/bin/sh
superman2:x:1001:1002::/home/superman2:/bin/bash
superman3:x:1002:1003::/data/superman3:/bin/bash
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# usermod -l hanxiao superman 
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# cat /etc/passwd|grep superman
superman2:x:1001:1002::/home/superman2:/bin/bash
superman3:x:1002:1003::/data/superman3:/bin/bash
hanxiao:x:1000:1000:superman:/tmp/:/bin/sh
[root@superman-vm01 ~]#  

5、鎖定superman用戶及解鎖superman用戶方法;

[root@superman-vm01 ~]# usermod -L superman2         
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# su - superman2
Last login: Thu Jul  8 07:41:18 CST 2021 on pts/0
[superman2@superman-vm01 ~]$ 
[superman2@superman-vm01 ~]$ su - superman2
Password: 
su: Authentication failure
[superman2@superman-vm01 ~]$ exit
logout
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# usermod -U superman2
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# su - superman2
Last login: Thu Jul  8 07:42:49 CST 2021 on pts/0
Last failed login: Thu Jul  8 07:43:16 CST 2021 on pts/0
There were 2 failed login attempts since the last successful login.
[superman2@superman-vm01 ~]$ 
[superman2@superman-vm01 ~]$ su - superman2
Password: 
Last login: Thu Jul  8 07:43:29 CST 2021 on pts/0
[superman2@superman-vm01 ~]$ 

4.2 userdel案例演示

使用userdel可以刪除指定用戶及其用戶的郵箱目錄或者Selinux映射環境:

  • userdel superman 保留用戶的家目錄;
  • userdel –r superman 刪除用戶及用戶家目錄,用戶login系統無法刪除;
  • userdel –rf superman 強制刪除用戶及該用戶家目錄,不論是否login系統。

5 Linux權限管理

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

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

Lnux中有的文件及文件夾都有至少三種權限,常見的權限如表所示:

權限 對文件的影響 對目錄的影響
r(讀取) 可讀取文件內容 可列出目錄內容
w(寫入) 可修改文件內容 可在目錄中創建刪除內容
x(執行) 可作為命令執行 可訪問目錄內容
目錄必須擁有x權限,否則無法查看其內容

Linux權限授權,默認是授權給三種角色,分別是user、group、other,Linux權限與用戶之間的關聯如下:

  • U代表User,G代表Group,O代表Other;
  • 每個文件的權限基於UGO進行設置;
  • 權限三位一組(rwx),同時需授權給三種角色,UGO;
  • 每個文件擁有一個所屬用戶和所屬組,對應UGO,不屬於該文件所屬用戶或所屬組使用O來表示;

在Linux系統中,可以通過ls –l查看目錄的詳細屬性,如下所示:

[root@superman-vm01 ~]# ls -l /home
drwxr-xr-x  2 superman superman       15 Jul  7 07:27 superman

shuchaoyang目錄屬性參數詳解如下:

  • d 表示目錄,同一位置如果為-則表示普通文件;
  • rwxrwxr-x 表示三種角色的權限,每三位為一種角色,依次為u,g,o權限,如上則表示user的權限為rwx,group的權限為r-x,other的權限為r-x;
  • 2表示文件夾的鏈接數量,可理解為該目錄下子目錄的數量;
  • 從左到右,第一個superman表示該用戶名,第二個superman則為組名,其它人角色默認不顯示;
  • 15表示該文件夾占據的字節數;
  • Jul 7 07:27表示文件創建或者修改的時間;
  • 最右邊的superman為目錄的名,或者文件名。

6 Chown屬主及屬組

修改某個用戶、組對文件夾的屬主及屬組,用命令chown實現,案例演示如下:

1、修改superman文件夾所屬的用戶為root,其中-R參數表示遞歸處理所有的文件及子目錄。

[root@superman-vm01 ~]# cd /home
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwx------ 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# chown -R root superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwx------ 3 root superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

2、修改superman文件夾所屬的組為root。

[root@superman-vm01 home]# ll
total 0
drwx------ 3 root superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chown -R :root superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwx------ 3 root root 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

或者
[root@superman-vm01 home]# ll
total 0
drwx------ 3 root superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chgrp -R root superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwx------ 3 root root 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

3、修改superman文件夾所屬的用戶為superman,組也為superman。

[root@superman-vm01 home]# ll
total 0
drwx------ 3 root root 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chown -R superman:superman superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwx------ 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

7 Chmod用戶及組權限

修改某個用戶、組對文件夾的權限,用命令chmod實現,其中以代指ugo,、-、=代表加入、刪除和等於對應權限,具體案例如下:

1、授予用戶對superman目錄擁有x權限

[root@superman-vm01 home]# ll
total 0
drw------- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R u+x superman 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwx------ 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#  

2、授予組對superman目錄擁有rwx權限

[root@superman-vm01 home]# ll
total 0
drwx------ 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R g+rwx superman 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwxrwx--- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#  

3、授予用戶、組、其它人對superman目錄擁有rwx權限

[root@superman-vm01 home]# ll
total 0
d--------- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R u+rwx,g+rwx,o+rwx superman 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwxrwxrwx 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

4、撤銷用戶對superman目錄擁有w權限

[root@superman-vm01 home]# ll
total 0
drwxrwxrwx 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R u-w superman 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
dr-xrwxrwx 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#  

5、撤銷用戶、組、其它人對superman目錄擁有x權限

[root@superman-vm01 home]# ll
total 0
dr-xrwxrwx 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R u-x,g-x,o-x superman  
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
dr--rw-rw- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#  

6、授予用戶、組、其它人對superman目錄只有rx權限

[root@superman-vm01 home]# ll
total 0
dr--rw-rw- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R u=rx,g=rx,o=rx superman 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
dr-xr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

8 Chmod二進制權限

Linux權限默認使用rwx來表示,為了更簡化在系統中對權限進行配置和修改,Linux權限引入二進制表示方法,如下代碼:

Linux權限可以將rwx用二進制來表示,其中有權限用1表示,沒有權限用0表示; Linux權限用二進制顯示如下: rwx=111 r-x=101 rw-=110 r--=100 依次類推,轉化為十進制,對應十進制結果顯示如下: rwx=111=4+2+1=7 r-x=101=4+0+1=5 rw-=110=4+4+0=6 r--=100=4+0+0=4 得出結論,用r=4,w=2,x=1來表示權限。

使用二進制方式來修改權限案例演示如下,其中默認superman目錄權限為755:

1、授予用戶對superman目錄擁有rwx權限

[root@superman-vm01 home]# ll
total 0
dr-xr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R 755 superman  
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwxr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

2、授予組對superman目錄擁有rwx權限

[root@superman-vm01 home]# ll
total 0
drwxr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R 775 superman  
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwxrwxr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

3、授予用戶、組、其它人對superman目錄擁有rwx權限

[root@superman-vm01 home]# ll
total 0
drwxrwxr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R 777 superman  
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwxrwxrwx 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 

4、撤銷用戶對superman目錄擁有w權限

[root@superman-vm01 home]# ll
total 0
drwxrwxrwx 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R 555 superman  
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
dr-xr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]

5、撤銷用戶、組、其它人對superman目錄擁有x權限

[root@superman-vm01 home]# ll
total 0
dr-xr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R 644 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drw-r--r-- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#

6、授予用戶、組、其它人對superman目錄只有rx權限

[root@superman-vm01 home]# ll
total 0
drw-r--r-- 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod -R 555 superman 
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
dr-xr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#

9 Linux特殊權限及掩碼

Linux權限除了常見的rwx權限之外,還有很多特殊的權限,細心的讀者會發現,為什么Linux目錄默認權限755,而文件默認權限為644呢,這是因為Linux權限掩碼umask導致。

每個Linux終端都擁有一個umask屬性,umask熟悉可以用來確定新建文件、目錄的默認權限,默認系統權限掩碼為022。在系統中每創建一個文件或者目錄,文件默認權限是666,而目錄權限則為777,權限對外開放比較大,所以設置了權限掩碼之后,默認的文件和目錄權限減去umask值才是真實的文件和目錄的權限。

  • 對應目錄權限為:777-022=755;
  • 對應文件權限為:666-022=644;
  • 執行umask命令可以查看當前默認的掩碼,umask -S 023可以設置默認的權限掩碼。

在Linux權限中,除了普通權限外,還有如下表所示,三個特殊權限:

權限 對文件的影響 對目錄的影響
suid 以文件的所屬用戶身份執行,而非執行文件的用戶
sgid 以文件所屬組身份去執行 在該目錄中創建任意新文件的所屬組與該目錄的所屬組相同
sticky 對目錄擁有寫入權限的用戶僅可以刪除其擁有的文件,無法刪除其它用戶所擁有的文件

Linux中設置特殊權限方法如下:

  • 設置suid: chmod u+s superman
  • 設置sgid: chmod g+s superman
  • 設置sticky: chmod o+t superman

特殊權限與設置普通權限一樣,可以使用數字方式表示:

  • SUID = 4
  • SGID = 2
  • Sticky = 1

可以通過chmod 4755 superman對該目錄授予特殊權限為s的權限,Linux系統中s權限的應用常見包括:su、passwd、sudo

[root@superman-vm01 home]# ll
total 0
dr-xr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# chmod 4755 superman
[root@superman-vm01 home]# 
[root@superman-vm01 home]# ll
total 0
drwsr-xr-x 3 superman superman 78 Jul  9 05:57 superman
[root@superman-vm01 home]#
[root@superman-vm01 ~]# ll /usr/bin/su
-rwsr-xr-x. 1 root root 32208 Oct 31  2018 /usr/bin/su
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
[root@superman-vm01 ~]# 
[root@superman-vm01 ~]# ll /usr/bin/sudo
---s--x--x. 1 root root 147392 Oct 31  2018 /usr/bin/sudo
[root@superman-vm01 ~]# 

歡迎關注我的微信公眾號【超哥的IT私房菜】獲取更多技術干貨!

image-20210707074326947

有什么吐槽或反饋意見,直接告訴我!
我會解決您說的問題,進一步更好的服務您哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM