Linux雲端計算-04_Linux使用者及許可權管理

shuchaoyang發表於2021-07-11

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

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



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/291614/viewspace-2780721/,如需轉載,請註明出處,否則將追究法律責任。

相關文章