1. 程式人生 > >Linux下的使用者、組和許可權

Linux下的使用者、組和許可權

目錄

檢視組資訊

使用者管理

組管理

前言:在linux中一切都是檔案(資料夾和硬體裝置是特殊的檔案),如果有可能儘量使用文字檔案。文字檔案是人和機器能理解的檔案,也成為人和機器進行交流的最好途徑。由於所有的配置檔案都是文字,所以你只需要一個最簡單的編輯器就可以修改。由於修改文字檔案如此簡單,所以Linux系統本身肯定要加以規範。這就引出了使用者(組)和許可權這2個概念。而這2個概念的引入,完美的保證了Linux的安全性,同時沒有新增複雜性。由於一切皆為檔案。所以Linux引入了3個檔案來管理使用者(組), /etc/passwd存放使用者資訊,/etc/shadow存放使用者密碼資訊,/etc/group存放組資訊,然後在檔案系統中的每個檔案的檔案頭裡面添加了使用者和檔案之間的關係資訊。

使用者、組、檔案間有三種關係

  • 使用者和檔案的關係只有2種, 擁有和不擁有。
  • 組和檔案的關係只有2種,  擁有和不擁有。
  • 使用者和組的關係只有2種, 屬於和不屬於。

將這三種關係疊加,使用者和檔案的最終關係可以歸納為3類

  • 使用者擁有該檔案
  • 使用者屬於某個組,某個組擁有該檔案(即使用者通過屬於某組來擁有該檔案) 
  • 使用者不擁有該檔案

一:使用者和組資訊的檢視

在Linux下,使用者分為三類:超級使用者(root)、普通使用者、程式使用者。

  • 超級使用者:UID=0
  • 程式使用者:Rhel5/6,UID=1-499;                Rhel7,UID=1-999
  • 普通使用者:Rhel5/6,UID=500-65535;        Rhel7,UID=1000-60000

有三個命令可以檢視使用者的相關資訊

cat  /etc/passwd         #檢視使用者資訊
cat  /etc/shadow         #檢視使用者的密碼資訊
cat  /etc/group          #檢視使用者的組資訊

檢視使用者資訊

使用者資訊的顯示有7個欄位

  1.   欄位1:使用者名稱  --> root
  2.   欄位2:密碼佔位符  --> x (這裡都是用x代替)
  3.   欄位3:uid,使用者id  --> 0
  4.   欄位4:gid ,組id --> 0
  5.   欄位5:使用者描述資訊  --> root
  6.   欄位6:家目錄  -->  /root
  7.   欄位7:登入 shell   (使用者登陸shell ,當為/bin/bash表示可以登陸,/sbin/nologin表示不被授權登陸)

注:一般來說,只有 root 使用者的 uid 是為0的。如果黑客把一個普通使用者的 uid 修改為0的話,那麼他只要以普通使用者的使用者名稱和密碼登入,系統就會自動切換到root使用者。所以,系統加固的時候一定要過濾出有哪些使用者的UID為0

使用指令碼檢視使用者資訊

#! /bin/bash
# Author:謝公子
# Date:2018-10-12
# Function:根據使用者名稱查詢該使用者的所有資訊
read -p "請輸入要查詢的使用者名稱:" A
echo "------------------------------"
n=`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}' | wc -l`
if [ $n -eq 0 ];then
echo "該使用者不存在"
echo "------------------------------"
else
  echo "該使用者的使用者名稱:$A"
  echo "該使用者的UID:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $3}'`"
  echo "該使用者的組為:`id $A | awk {'print $3'}`"
  echo "該使用者的GID為:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $4}'`"
  echo "該使用者的家目錄為:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $6}'`"
  Login=`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $7}'`
  if [ $Login == "/bin/bash" ];then
  echo "該使用者有登入系統的許可權!!"
  echo "------------------------------"
  elif [ $Login == "/sbin/nologin" ];then
  echo "該使用者沒有登入系統的許可權!!"
  echo "------------------------------"
  fi
fi

檢視密碼資訊

密碼資訊的顯示有9個欄位

  1.   欄位1:使用者名稱
  2.   欄位2:通過sha-512加密(二次加密,在經過第一次加密後,第二次加入隨機數再次加密)的密碼
  3.   欄位3:最後一次修改密碼距離1970年1月1日的天數間隔
  4.   欄位4:密碼最短有效期
  5.   欄位5:密碼最長有效期
  6.   欄位6:密碼過期前幾天進行警告
  7.   欄位7:賬戶過期後,被鎖定的天數
  8.   欄位8:賬號失效時間距離1970年1月1日的天數間隔
  9.   欄位9:未分配功能

欄位2是使用者的密碼位,如果是 * 表示該使用者禁用,!! 表示使用者密碼未初始化,如果為空,表示空密碼的

注:藉助chage指令,可以修改使用者的密碼策略,也可通過編輯 /etc/shadow(不建議)
比如:chage  -l   bob,檢視使用者bob的密碼策略
          chage  -M  90  bob,將使用者bob的密碼有效期修改為90天

指令碼實現修改使用者的密碼策略

#! /bin/bash
# Author:謝公子
# Date: 2018-10-12
# Function: 實現對使用者密碼策略的設定,如密碼最長有效期等
read -p  "設定密碼最多可多少天不修改:" A
read -p  "設定密碼修改之間最小的天數:" B
read -p  "設定密碼最短的長度:" C
read -p  "設定密碼失效前多少天通知使用者:" D
sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS   '$A'' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS   '$B'' /etc/login.defs
sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN     '$C'' /etc/login.defs
sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE   '$D'' /etc/login.defs
echo "已設定好密碼策略......"

檢視組資訊

組資訊的顯示有四個欄位

  1.   欄位1:組名稱 --> root
  2.   欄位2:組密碼佔位符  --> x
  3.   欄位3:gid --> 0
  4.   欄位4:組成員

注:一個使用者只能有一個主要組,最多可以有31個附加組。主要組是使用者建立檔案時預設的所有組,附加組主要用於許可權管理。不論使用者屬於哪個組,使用者都能擁有該組的許可權

特殊組wheel

在Linux中有一個特殊組wheel,wheel組就類似於一個管理員的組。在linux中,即使我們有系統管理員root的許可權,也不推薦用root使用者登入。一般情況下用普通使用者登入就可以了,在需要root許可權執行一些操作時,再su登入成為root使用者。但是,任何人只要知道了root使用者的密碼,就都可以通過su命令來登入為root使用者--這無疑為系統帶來了安全隱患。所以,將普通使用者加入到wheel組中,被加入的這個普通使用者就成了管理員組內的使用者了,然後可以修改配置檔案使得只有wheel組內的使用者可以切換到root使用者。

二:使用者和組資訊的管理

使用者管理

新建使用者系統會做三件事

  1.  新建使用者時,系統會將 /etc/skel 中的目錄及檔案拷貝到新建使用者的家目錄中
  2.  在 /var/spool/mail 中,新建使用者名稱的郵箱 
  3.  在 /etc下的 passwd 、shadow 、group檔案中,增加使用者資訊

新增使用者時指定引數:

  • 新增使用者時,使用 -g 指定新建使用者的組,使用 -u 指定使用者uid
  • -G 引數可以指定新建使用者的附加組
  • 使用  -s   /sbin/nologin  指定建立的使用者沒有登入系統的許可權
  • 還可以使用 -M 引數,指定建立的使用者不在home目錄下建立家目錄
  • 還可以使用 -d 引數 ,指定其家目錄
新建bob使用者,將其uid設定為 2000,將其所在的組設定為  james ( 不修改預設是bob ),前提是james組已經存在
useradd  -u 2000  -g  james   bob 

新建tom使用者,指定其附加組為root
useradd -G root tom

新建tom使用者,但是不讓tom使用者有登入系統的許可權,預設是 /bin/bash ,沒登入許可權的話是 /sbin/nologin
useradd -s /sbin/nologin tom 

新建tom使用者,指定其家目錄為 /test (預設是 /home/tom)
useradd -d /test  tom

新建tom使用者,但是不在home目錄下新建目錄(預設建立新使用者會在home目錄下新建同名的家目錄)
useradd -M tom

注:使用者建立時,預設的屬性(比如UID,GID,是否建立家目錄,建立郵箱等)都是通過/etc/login.defs檔案控制的,修改此檔案的屬性,會影響以後建立的所有使用者。也可以建立使用者時指定引數修改,這樣只對當前建立使用者有效

刪除使用者 :  userdel  -r  james  ( 刪除使用者一定記得加 -r 引數 !!)

  1. 不加 -r 引數,只刪除 passwd、shadow 和 group 檔案中的使用者資訊,/home 目錄下的檔案不刪除,/var/spool/mail/ 下的檔案不刪除
  2. 加  -r 引數,刪除 passwd、shadow 和 group 檔案中的使用者資訊,同時刪除使用者的家目錄和郵箱

修改賬戶密碼 : passwd  james 

    當前使用者為 root 時:

  1. 不需要知道當前的密碼
  2. 設定新密碼時,不需要遵循密碼要求

    當前使用者為普通使用者時:

  1. 需要知道當前密碼
  2. 設定新密碼時,必須遵循密碼要求(1.不能少於8個字元,2.滿足複雜度要求)

修改賬戶屬性:  usermod   引數   james

  1.   -s 修改使用者的登陸shell       usermod   -s   /sbin/nologin    james 
  2.   -L 賬戶鎖定  (可以通過 passwd -S  賬戶名 檢視賬戶的狀態)
  3.   -U 解鎖賬戶
  4.   -g  修改賬戶所在組      例: 將bob所在組改成james:usermod  -g  james   bob   
  5.   -G  給賬戶新增附加組  例:給bob新增一個附加組john:usermod  -G  john  bob      ;                    從附加組john中刪除使用者bob: gpasswd -d  bob  john
  6.   -a  預設情況下,當用戶已經存在附加組時,再新增附加組則會把之前的附加組給替換了,加 -a 引數,則不替換原來的附加組,意味著該使用者可以有多個附加組。
[[email protected] ]# id james
uid=1000(james) gid=2002(james) 組=2002(james)

[[email protected] ]# usermod -g aaa james ; id james;  //修改使用者的主組為aaa
uid=1000(james) gid=2000(aaa) 組=2000(aaa)

[[email protected] ]# usermod -G xie james ;id james;   //給使用者新增附加組 xie 
uid=1000(james) gid=2000(aaa) 組=2000(aaa),1000(xie)

[[email protected] ]# usermod -G xiao james ;id james;  //給使用者新增附加組xiao,並且如果原來有附加組的話替換原來的附加組
uid=1000(james) gid=2000(aaa) 組=2000(aaa),2001(xiao)

[[email protected] ]# usermod -aG xie james;id james;  //給使用者新增附加組 xie ,並且不替換原來的附加組
uid=1000(james) gid=2000(aaa) 組=2000(aaa),1000(xie),2001(xiao)

鎖定和解鎖使用者 :

  • 鎖定使用者: usermod  -L  xie    或   passwd  -l   xie
  • 解鎖使用者: usermod  -U  xie   或   passwd  -u  xie
  • 檢視使用者狀態:passwd  -S xie

注:雖然 usermod 和 passwd 這兩個命令都可以鎖定和解鎖使用者,但是還是有區別的。區別之一就是passwd命令操作完後會有提示。還有一個區別就是 passwd 的許可權比 usermod 大,使用 usermod 鎖定的使用者可以用 passwd 來解鎖,但是使用 passwd 鎖定的使用者不能用 usermod 來解鎖

組管理

新增組 : groupadd  xie

  1.   -g, --gid                         為新組使用 GID,例 groupadd  -g 2000  xie   建立新組xie,並且gid設定為2000
  2.   -K, --key                        不使用 /etc/login.defs 中的預設值
  3.   -o, --non-unique            允許建立有重複 GID 的組
  4.   -p, --password               為新組使用此加密過的密碼
  5.   -r, --system                    建立一個系統賬戶

刪除組: groupdel    xie

  1.   -r , --remove                            刪除主目錄和郵件池

注:只能刪除附加組,而不能刪除主組!!!!

修改組的屬性: groupmod  xie

  -g, --gid GID                 將組 ID 改為 GID
  -n, --new-name            改名為 NEW_GROUP
  -o, --non-unique          允許使用重複的 GID

groupmod  -g  2000 bob       //將bob組的GID修改為2000
groupmod  -n  aaa   bob      //將bob組的名字改為aaa
groups    bob                //檢視bob所屬的所有組

修改組中的使用者:groupmems 

groupmems   -a  john  -g  xie     將使用者john加到xie組中
groupmems   -d  john  -g  xie     將使用者john從xie組中移除 或 gpasswd -d  john  xie

三:檔案許可權

檔案許可權的檢視

使用 ls -lh 可以檢視檔案的具體資訊,其中包括不同的使用者對該檔案的許可權

drwxr-xr-x.  3 root root     97 8月  24 23:04 abrt
-rw-r--r--.  1 root root     16 8月  24 23:08 adjtime

我們拿 abrt 這個目錄和 adjtime這個檔案來解釋。

 前11個字元確定不同使用者能對檔案幹什麼
 第一個字元代表檔案(-)、目錄(d),連結(l) 裝置(C) 塊裝置(b)
 其餘字元每3個一組(rwx),讀(r)、寫(w)、執行(x)

  •  第一組rwx:檔案所有者的許可權是讀、寫和執行
  •  第二組rw-:與檔案所在組同一組的使用者的許可權是讀、寫但不能執行
  •  第三組r--:  不與檔案所有者同組的其他使用者的許可權是讀不能寫和執行

 最後的 代表沒有ACL擴充套件許可權  + 代表有ACL擴充套件許可權。                                         
針對檔案:

  •  r 表示可以讀取檔案
  •  w 表示可以對檔案內容做修改
  •  x 表示檔案可執行

針對目錄:

  •  r 表示可以列出目錄內容(可以使用ls),前提是得有 x 許可權,因為如果你都不能進入這個目錄,你怎麼列出該目錄的內容
  •  w 表示可以在目錄中增刪改查,前提是得有 x 許可權,因為如果你都不能進入這個目錄,你怎麼增刪改查
  •  x 表示可以進入目錄,但不一定能讀取目錄內的內容。要想讀取目錄的內容,需要有 r 許可權,要想修改,需要有 w 許可權!

注:目錄的許可權比較特殊,可以看到,x 許可權是目錄最基本的許可權,因為如果你都不能進入該目錄,那讀取內容和增刪改查就更無從所起了。還有一個就是當你對目錄擁有 rwx 許可權的時候。倘若目錄中有一個檔案,該檔案對你的許可權是沒有 w 許可權的,但是因為你先匹配到該目錄的許可權,可以對目錄中的檔案修改,所以你可以強制修改該檔案,儲存退出!

後面的各個欄位的含義:

  • 3 代表檔案的連結數是3;
  • root 代表該檔案的所屬使用者
  • root 代表該檔案所屬的組。一般檔案所屬的組就是檔案所屬主所在的組,也有特殊情況,可以自己隨意修改!!
  • 97 代表檔案的大小;
  • 8月 24 23:04代表檔案最後的修改日期;
  • abrt 表示的是檔名
例子:         這裡有幾個使用者,其UID和GID分別如下
root 使用者:   uid=0(root)     gid=0(root)     groups=0(root)
xie  使用者:   uid=1000(xie)   gid=1001(john)  groups=1001(john)
john 使用者:   uid=1001(john)  gid=1001(john)  groups=1001(john)
james使用者:   uid=1002(james) gid=1002(james) groups=1002(james)
jerry使用者:   uid=1003(jerry) gid=1002(james) groups=1002(james)

然後,我們以root身份新建一個資料夾 test ,則test預設的許可權如下
drwxr-xr-x 2 root root 4096 Aug 31 19:16 test
我們修改其檔案許可權,檔案所有者,檔案所在組,修改為如下
drwxrwx--- 2 xie james 4096 Aug 31 19:19 test
最後得到的結論如下:

xie使用者的身份是檔案所有者,其可以在該目錄下建立檔案,且建立檔案的資訊如下  -rw-r--r-- 1 xie   john  0 Aug 31 19:45 file1
john使用者的身份是other,對該檔案不可以做任何操作
james使用者是身份是檔案所屬組的成員,其在該目錄下建立檔案的資訊如下  -rw-rw-r-- 1 james james 0 Aug 31 19:32 file2
jerry使用者的身份是檔案所屬組的成員,其在該目錄下建立檔案的資訊如下  -rw-r--r-- 1 jerry james 0 Aug 31 19:43 file3

檔案許可權的修改 

修改檔案的許可權 chmod

chmod  755 abrt                         //賦予abrt許可權rwxr-xr-x
chmod  u=rwx ,g=rx,o=rx abrt          //賦予abrt  rwxr-xr-x許可權。u=使用者許可權,g=組許可權,o=不同組其他使用者許可權
chmod  u-x , g+w   abrt               //給abc去除使用者執行的許可權,增加組寫的許可權
chmod  a+r          abrt               //給所有使用者新增讀的許可權

修改檔案的所有者 chown 和 所屬組 chgrp

chown   bob    adjtime           // 改變 adjtime 的所有者為 bob
chgrp   root   abrt             //改變 adjtime 所屬的組為 root

chgrp   -R  root  abrt           //改變abc這個目錄及其目錄下所有的檔案的所屬的組織為 root
chown   ‐R  root  abrt           //改變abc這個目錄及其下面所有的檔案和目錄的所有者是 root

注:修改檔案和資料夾所有者和所屬組方法都是一樣的,如果要把資料夾內的檔案的所有者和所屬組都修改了,要加 -R 引數。chown除了可以修改屬主屬性,還可以修改所屬組屬性。                        語法: chown    屬主:屬組   檔案

chown   john:james   adjtime     //改變 adjtime 的所有者為john,所屬組為 james

ACL控制權限 setfacl  、 getfacl

setfacl :設定檔案訪問控制規則

  •  -m ,    給檔案加擴充套件ACL規則  , setfacl  -m    u:bob:r   abrt ;  
  •  -x  ,    給檔案移除擴充套件ACL規則 , setfacl   -x    u:bob      abrt ;
  •  -b ,  移除檔案所有的ACL規則 ,setfacl  -b   u:bob   abrt ;
  •  -R ,    遞迴的對所有目錄內所有的檔案和目錄進行操作 ,  setfacl  -R -m  u:bob:rwx   abrt ;
  •  -d ,    設定預設的ACL規則

getfacl : 獲取檔案訪問控制規則

例子:         這裡有幾個使用者,其UID和GID分別如下
使用者a:       uid=1006(a)  gid=1006(a)  groups=1006(a)
使用者b:       uid=1007(b)  gid=1007(b)  groups=1007(b)
使用者c:       uid=1007(c)  gid=1000(root)  groups=1000(root)

我們以root身份在根目錄下新建一個檔案file,其許可權如右:-rw-r--r-- 1 root root 4 Aug 31 23:00 file
其acl資訊如下: getfacl file
            # file:  file
            # owner: root
            # group: root
            user::rw-
            group::r--
            other::r--
所以使用者a和使用者b只對他有讀的許可權,現在我們要讓使用者a擁有rwx許可權,而使用者b不變化
設定使用者a的ACL許可權:setfacl -m u:a:rwx  file
設定完acl之後,檔案file的許可權就變成了: -rw-rwxr--+ 1 root root 4 Aug 31 23:01 file  
注:使用者的組許可權位變化,等於acl資訊中的mask值,還多了一個+擴充套件許可權位。此時雖然使用者c是root組中的,但是使用者c對檔案file的許可權還仍然是之前的r--,而不是rwx
檢視file的acl資訊  getfacl  file   ,顯示如下
            # file:  file
            # owner: root
            # group: root
            user::rw-
            user:a:rwx     // 使用者a的ACL許可權
            group::r--      
            mask::rwx      // 等於使用者之前的許可權與acl設定的許可權進行 或運算
            other::r-
可知,使用者a對其有rwx許可權,使用者b對其仍然只有 r 的許可權
若要移除acl ,則  setfacl  -x  u:a  file               
移除了之後,a的許可權就又還是隻有 r 的許可權了

注:若a使用者原來對檔案只有 r 許可權,設定的acl是 setfacl  -m  u:a:w  file  ,則設定完acl後,使用者a只對檔案有 w 許可權,沒有 r 許可權了

 倘若要讓一個資料夾內的所有已存在檔案都繼承於資料夾的設定的acl的許可權屬性,  可以使用  setfacl  -R  -m  u:a:rwx  檔名

Umask、Suid、Sgid、粘滯位

UMSK

root使用者的umask值預設是0022,普通使用者的umask值預設是 0002。umask值是可以手動修改的。第一位是特殊位,配置了SUID(4) 、SGID(2) 和 粘滯位(1) 才有值。

所以當root使用者去建立一個資料夾的時候,其許可權就是 777-022=755,而建立一個檔案的時候,其許可權就是 755-111=644

普通使用者去建立一個資料夾的時候,其許可權就是 777-002=775,而建立一個檔案的時候,其許可權就是 775-111-664

所以root使用者和普通使用者許可權的不同之處就在於group組。root使用者的屬組位置的 w 只在自己的手中。而普通使用者的屬組許可權只要是和他在一個組內,就擁有 w 權。

SUID 、SGID和粘滯位

  • suid的作用:用於執行檔案,以檔案的擁有者的身份執行該檔案。     chmod u+s  檔名
  • sgid的作用:  用於目錄,在該目錄下建立的所有檔案和目錄,屬組都繼承該目錄的屬組,且該組內其他成員修改目錄內的檔案時,其屬主和屬組都不改變!     chmod  g+s  目錄
  • 粘滯位stick  bit 的作用: 用於目錄,在該目錄建立的檔案或目錄,只有建立者可以刪除和修改,其他使用者無法刪除和修改 chmod  o+t  目錄

SUID的作用:SUID是set uid的簡稱,它出現在檔案所屬主許可權的執行位上面,標誌為 s 。當設定了SUID後,UMSK第一位為4。我們知道,我們賬戶的密碼檔案存放在/etc/shadow中,而/etc/shadow的許可權為 ----------。也就是說:只有root使用者可以對該目錄進行操作,而其他使用者連檢視的許可權都沒有。當普通使用者要修改自己的密碼的時候,可以使用passwd這個指令。passwd這個指令在/bin/passwd下,當我們執行這個命令後,就可以修改/etc/shadow下的密碼了。那麼為什麼我們可以通過passwd這個指令去修改一個我們沒有許可權的檔案呢?這裡就用到了suid,suid的作用是讓執行該命令的使用者以該命令擁有者即root的許可權去執行,意思是當普通使用者執行passwd時會擁有root的許可權,這樣就可以修改/etc/passwd這個檔案了。命令:   chmod u+s  檔名

使用suid需要滿足的幾個條件

  1. SUID只對可執行檔案有效

  2. 呼叫者對該檔案有執行權

  3. 在執行過程中,呼叫者會暫時獲得該檔案的所有者許可權

  4. 該許可權只在程式執行的過程中有效

SGID的作用:SGID是set gid的簡稱,它出現在檔案所屬組許可權的執行位上面,標誌位 s 。它用當設定了SGID後,UMSK第一位為2 。它作用於目錄,當用戶 a 對某一目錄有rwx 許可權時,該使用者就可以在該目錄下建立檔案,新建檔案的所屬主和所屬組繼承於 a。當另一個使用者 b 也對該目錄有rwx許可權的時候,就可以修改 a 建立的檔案,而且修改後的檔案所屬主和所屬組都會變成 b!但是如果該目錄用SGID修飾,則所有擁有 rwx許可權的使用者在這個目錄下建立的檔案都是屬於這個目錄所屬的組。當其他使用者修改時,有三種情況:

  1. 當兩個使用者都是屬於group組內,則修改後的檔案的所屬主和所屬組都不會,而且修改檔案時不會提示read only!可以正常修改
  2. 當兩個使用者都是屬於other時,則修改後的檔案的所屬組不變,所屬主會變成另一個使用者,修改檔案時會提示read only,必須強制儲存退出
  3. 當一個使用者是group組,一個是other時,則修改後的檔案的所屬組不變,所屬主會變成另一個使用者,修改檔案時會提示read only,必須強制儲存退出

SGID的例子程式碼

例子:         這裡有幾個使用者,其UID和GID分別如下
s1 使用者:     uid=1004(s1) gid=1005(s1) groups=1005(s1),1004(sgid)
s2 使用者:      uid=1005(s2) gid=1006(s2) groups=1006(s2),1004(sgid)

我們以root身份在根目錄下建立一個 test 檔案 ,其預設許可權如右:drwxr-xr-x 2 root root 4096 Aug 31 20:54 test
修改其預設許可權如右:drwxrwx--- 2 root sgid 4096 Aug 31 20:54 test
因為s1和s2都是組sgid內的成員,所以s1和s2均可對test檔案執行rwx許可權
s1進入test內,建立一個檔案 file1 ,其許可權如右: -rw-rw-r-- 1 s1 s1 3 Aug 31 21:01 file1
s2進入test內,用vim開啟file1檔案,顯示檔案read only。對其修改,強制儲存退出!然後file1的許可權如右:-rw-rw-r-- 1 s2  s2 3 Aug 31 21:04 file1
可見,s2可以強制修改s1建立的檔案。雖然s2對於file1來說是other,但是因為s1和s2均屬於sgid組,所以可以對test資料夾內的資料擁有讀寫執行的許可權,所以可以用vim對其強制修改儲存退出。修改後,file1檔案的所屬使用者和所屬組都變成了s2的了。
顯然,這不是我們想要的,如果我們想要s2修改了檔案後,檔案的所有使用者和所屬組都不變的話,我們就需要用到SGID了。
執行  chmod  g+s  /test 
s1再新建一個檔案file2,其許可權如右:-rw-rw-r-- 1 s1  sgid 3 Aug 31 21:03 file2    可見,其所屬組繼承了資料夾test的所屬組
s2再用vim開啟file2,不提示檔案read only了,修改,儲存退出!然後file2的許可權如右:-rw-rw-r-- 1 s1  sgid 13 Aug 31 21:04 file2
可見,執行了SGID後,同一組內的其他成員修改檔案後,其屬主和屬組都不發生變化!

粘滯位的作用:

 SBIT即Sticky Bit,它出現在其他使用者許可權的執行位上,標誌位為 t,當設定了粘滯位後,UMSK第一位為1 。它只能用來修飾一個目錄。當某一個目錄擁有SBIT許可權時,則任何一個能夠在這個目錄下建立檔案的使用者,該使用者在這個目錄下所建立的檔案,只有該使用者自己和root可以修改和刪除,其他使用者均不可以修改和刪除!!我們知道/tmp是系統的臨時檔案目錄,所有的使用者在該目錄下擁有所有的許可權,也就是說在該目錄下可以任意建立、修改、刪除檔案,那如果使用者A在該目錄下建立了一個檔案,使用者B將該檔案刪除或修改了,這種情況我們是不能允許的。為了達到該目的,就出現了stick  bit(粘滯位)的概念。

無論是兩個使用者都屬於group組,還是都屬於other,或者是一個屬於group,一個屬於other,都不能對其他人建立的檔案進行修改和刪除!!

例子:         這裡有幾個使用者,其UID和GID分別如下
使用者a:       uid=1006(a)  gid=1007(a)  groups=1007(a)
使用者b:       uid=1007(b)  gid=1008(b)  groups=1008(b)

我們以root身份在根目錄下建立一個 test 檔案 ,其預設許可權如右:drwxr-xr-x 2 root root 4096 Aug 31 20:54 test
我們修改其許可權:drwxrwxrwx 2 root root 4096 Aug 31 20:54 test
使用者a匹配test資料夾的other許可權,擁有rwx許可權,進入test內,新建資料夾file1,其許可權如右:-rw-rw-r-- 1 a a 5 Aug 31 21:45 file1
使用者b匹配test資料夾的other許可權,擁有rwx許可權,進入test內,可以執行刪除file1。因為使用者b擁有資料夾test的rwx許可權,所以可以對其資料夾內的所有資料刪除。即使file1的other許可權是隻讀!!
很明顯,這不是我們想要的
執行  chmod  o+t /test
s1再新建一個檔案file2,其許可權如右:-rw-rw-r-- 1 a  a 3 Aug 31 21:03 file2    
s2再嘗試刪除file2,刪不了!!只有檔案的主人可以刪除
可見,執行了棧滯位後,只有檔案的所有者才可以刪除檔案

注意:有時你設定了s 或 t  許可權,你會發現它變成了S或T,這是因為在那個位置上你沒有給它x(可執行)的許可權,這樣的話這樣的設定是不會有效的,你可以先給它賦上x的許可權,然後再給s或t  的許可權

相關推薦

Linux中的使用者許可權管理

1、使用者和組的概念 Linux是多使用者多工(Multi-Users,Multi-tasks)的作業系統,對於每個使用者,使用使用者標識(ID)、密碼(Passwd)來唯一標識使用者。對於使用者的管理有3A認證:Authentication(認證)、Autho

Linux學習之使用者許可權管理

1、概述: 1)、使用者:是每個使用者用使用者來標識 密碼是認證手段 2)、認證:——Authentication——>將使用某種識別技術將使用者標識關聯起來 3)、授權:Authorization 4)、許可權執行審查

Linux下的使用者許可權

目錄 檢視組資訊 使用者管理 組管理 前言:在linux中一切都是檔案(資料夾和硬體裝置是特殊的檔案),如果有可能儘量使用文字檔案。文字檔案是人和機器能理解的檔案,也成為人和機器進行交流的最好途徑。由於所有的配置檔案都是文字

linux中使用者許可權問題

使用者、組、許可權 一、許可權:r, w, x 1.檔案許可權:       r:可讀,可以使用類似cat等命令檢視檔案內容;       w:可寫,可以編輯或刪除此檔案;       x: 可執行,eXacu

青蛙學Linux—使用者許可權檔案屬性

1、使用者和組 1.1、使用者角色 在Linux下有以下三種角色使用者: 超級使用者:擁有對系統的最高管理許可權的使用者,預設使用者名稱為root。需要注意的是,與Windows下的超級管理員Administrator不同,root使用者在Linux下擁有最高的許可權,你可以使用root使用者執行

Linux命令02:使用者許可權

使用者、群組和許可權 command function useradd [username] 建立使用者(預設建立一個以使用者名稱為名的組名) -u 指定使用者的UID -g

Linux用戶權限管理(一)

linux用戶、組使用Linux是一個Multi-tasks(多任務)、 Multi-Users(多用戶)的系統每一個登陸者或使用者都有用戶標識、密碼(所謂3A) 所謂的3A: Authentication(驗證機制) Authorization(授權機制) Audition(審計)組的概

Linux用戶權限的概念

linux用戶、組和權限安全上下文(Security Context):1.權限權限定義的例子:文件:tom和jerry同時運行/tmp/inittab.new tom(屬主) tom(屬組)TOM: ls /tmp/inittab.newJerry: ls /tmp/inittab.new只

linux 使用者許可權管理

使用者(user)和使用者組(group) Linux 系統中存在三種使用者:root 使用者、系統使用者(也稱之為偽用 戶)、普通使用者 系統約定: RHEL6 uid: 0 特權使用者 uid: 1~499 系統使用者 uid: 500+ 普通使用者 使用者和使用者組的對應關係是:一

Linux使用者許可權管理及正則表示式

1、複製/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部檔案的屬組和其他使用者沒有任何訪問許可權。 [[email protected] ~]# cp -a /etc/skel /home/tuser1 [[email protected] ~]#

使用者許可權(未完結)

一、“/etc/passwd” 1、/etc/passwd檔案每個欄位的具體含義: a) 第1個欄位(列)記錄的是這個使用者的名字(在建立使用者時root使用者起的)。 b) 第2個欄位(列)如果是x,表示該使用者登入Linux系統時必須使用密碼;如果為空,則該使用者在登入時無須提供密

Linux用戶權限管理

執行 獲取 ica 一起 swd shel document 註意 ttr Linux-用戶和權限管理 一、用戶和組 早期的計算機的使用場景,一般都是多用戶,多任務下( Multi-task,Multi-Users)。為了區別不同的使用者,隔離每個人對計算機資源的訪問,引

用戶權限

用戶、組、權限 在Linux系統中每一個文件都具有“所有者與所屬用戶組”屬性,那麽下面我們就來簡單介紹一下所有者與所屬用戶組。 在Linux系統中每一個文件都具有“所有者與所屬用戶組”屬性,那麽下面我們就來簡單介紹一下所有者與所屬用戶組。☆所有者即用戶(Userna

用戶權限命令練習

用戶、組、權限命令練習1、創建用戶gentoo,附加組為bin和root,默認shell為 /bin/csh,註釋信息為"Gentoo Distribution" 2、創建下面的用戶、組和組成員關系名字為admins 的組 用戶natasha,使用admins 作為附屬組

2017-11-13Linux基礎知識(11)用戶權限管理

linux 基礎 在之前的章節中講述了bash的基礎特性以及IO重定向以和管道等其它的功能程序,之後介紹了一些其相關的命令,例如:tr和tee命令等,之後我們介紹了Here document,在這一章中,我們開始講述用戶、組及權限管理中的一部分,我們首先來說用戶和組。一、用戶 Linux操作系統

linux用戶權限管理

linux文件管理在linux中的每個用戶必須屬於一個組,不能獨立於組外。在linux中每個文件有所有者、所在組、其它組的概念 在linux系統中,所創建的用戶帳號和其相關信息(密碼除外)均是存放在/etc/passwd配置文件中。由於所有用戶對passwd文件均有讀取的權限,因此密碼信息並未保存在該文件中

第六章 linux用戶權限管理

then login 通過 替換 ogr 特殊 conf 鎖定 全局 用戶組和權限管理 介紹安全3A ?資源分派: Authentication:認證 Authorization:授權 Accouting|Audition:審計 用戶user ?令牌token,identi

linux 用戶 權限管理

count 標識 ask then 根據 multi pos 轉換 機制     Multi-task Multi-Users     每個使用者:       用戶標識 、 密碼:         Authentication(認證機制):         Author

Linux用戶管理權限

nta 屬組 gin 常用選項 組管理命令 upm 管理 針對 cut 一、用戶組1、用戶User1)令牌token,identity2)Linux用戶:Username/UID3)管理員:root,04)普通用戶:1-65535系統用戶:1-499(CentOS6),1-

Linux用戶權限管理及正則表達式

shu grub.con ble gre 正則 lin ace logo 內部 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶沒有任何訪問權限。 [root@centos7 ~]# cp -a /etc/s