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 #查看用戶的組信息查看用戶信息
cat /etc/passwd #/etc/passwd默認權限為644,其最小權限為444用戶信息的顯示有7個字段
注:一般來說,只有 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 "------------------------------" elseecho "該用戶的用戶名:$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" ];thenecho "該用戶有登錄系統的權限!!"echo "------------------------------"elif [ $Login == "/sbin/nologin" ];thenecho "該用戶沒有登錄系統的權限!!"echo "------------------------------"fi fi查看密碼信息
cat? /etc/shadow #shadow默認權限為600,最小權限為400密碼信息的顯示有9個字段
字段2是用戶的密碼位,如果是 *?表示該用戶禁用,!!?表示用戶密碼未初始化,如果為空,表示空密碼的
注:借助chage指令,可以修改用戶的密碼策略,也可通過編輯 /etc/shadow (不建議)
比如:chage???-l???bob,查看用戶bob的密碼策略
???????????chage??-M??90??bob,將用戶bob的密碼有效期修改為90天腳本實現修改用戶的密碼策略
查看組信息
cat /etc/group組信息的顯示有四個字段
注:一個用戶只能有一個主要組,最多可以有31個附加組。主要組是用戶創建文件時默認的所有組,附加組主要用于權限管理。不論用戶屬于哪個組,用戶都能擁有該組的權限
特殊組wheel
? ? ? ? 在Linux中有一個特殊組wheel,wheel組就類似于一個管理員的組。在linux中,即使我們有系統管理員root的權限,也不推薦用root用戶登錄。一般情況下用普通用戶登錄就可以了,在需要root權限執行一些操作時,再su登錄成為root用戶。但是,任何人只要知道了root用戶的密碼,就都可以通過su命令來登錄為root用戶--這無疑為系統帶來了安全隱患。所以,將普通用戶加入到wheel組中,被加入的這個普通用戶就成了管理員組內的用戶了,然后可以修改配置文件使得只有wheel組內的用戶可以切換到root用戶。
二:用戶和組信息的管理
用戶管理
新建用戶系統會做三件事
添加用戶時指定參數:
- 添加用戶時,使用 -g?指定新建用戶的組,使用 -u 指定用戶uid
- -G?參數可以指定新建用戶的附加組
- 使用??-s???/sbin/nologin??指定創建的用戶沒有登錄系統的權限
- 還可以使用 -M?參數,指定創建的用戶不在home目錄下創建家目錄
- 還可以使用 -d?參數 ,指定其家目錄
注:用戶創建時,默認的屬性(比如UID,GID,是否創建家目錄,創建郵箱等)都是通過/etc/login.defs文件控制的,修改此文件的屬性,會影響以后創建的所有用戶。也可以創建用戶時指定參數修改,這樣只對當前創建用戶有效
刪除用戶?:
userdel? -r? james? #刪除用戶一定記得加 -r?參數 !!修改賬戶密碼?:
passwd? james? #給james用戶設置密碼? 當前用戶為 root 時:
? ? 當前用戶為普通用戶時:
修改賬戶屬性:?
usermod? ?參數?? james鎖定和解鎖用戶 :
- 鎖定用戶:?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
刪除組: groupdel????xie
注:只能刪除附加組,而不能刪除主組!!!!
修改組的屬性: groupmod??xie
修改組中的用戶: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?表示的是文件名
文件權限的修改?
修改文件的權限?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 所屬的組為 rootchgrp? ?-R? root? abrt ? ? ? ? ? //改變abc這個目錄及其目錄下所有的文件的所屬的組織為 root chown? ‐R? root? abrt? ? ? ? ? //改變abc這個目錄及其下面所有的文件和目錄的所有者是 root注:修改文件和文件夾所有者和所屬組方法都是一樣的,如果要把文件夾內的文件的所有者和所屬組都修改了,要加 -R?參數。chown除了可以修改屬主屬性,還可以修改所屬組屬性。? ? ? ? ? ? ? ? ? ? ? ??
語法:?chown? ? 屬主:屬組? ?文件
chown ? john:james ? adjtime ? //改變 adjtime 的所有者為john,所屬組為 jamesACL控制權限?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: rootuser::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: rootuser::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需要滿足的幾個條件
- SUID只對可執行文件有效
- 調用者對該文件有執行權
- 在執行過程中,調用者會暫時獲得該文件的所有者權限
- 該權限只在程序執行的過程中有效
SGID的作用:SGID是set?gid的簡稱,它出現在文件所屬組權限的執行位上面,標志位 s?。它用當設置了SGID后,UMSK第一位為2 。它作用于目錄,當用戶 a 對某一目錄有rwx 權限時,該用戶就可以在該目錄下建立文件,新建文件的所屬主和所屬組繼承于 a。當另一個用戶 b 也對該目錄有rwx權限的時候,就可以修改 a 創建的文件,而且修改后的文件所屬主和所屬組都會變成 b!但是如果該目錄用SGID修飾,則所有擁有 rwx權限的用戶在這個目錄下建立的文件都是屬于這個目錄所屬的組。當其他用戶修改時,有三種情況:
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中的sudo、sudo -i、su、su -命令
sudo?:暫時切換到超級用戶模式以執行超級用戶權限,提示輸入密碼時該密碼為當前用戶的密碼,而不是超級賬戶的密碼。缺點是每次執行超級用戶權限都要在命令前加上 sudo ,優點是在當前終端再使用 sudo?不要再重復輸入密碼(只對于當前終端有效)。
sudo -i:為了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當前賬戶的密碼。沒有時間限制。執行該命令后提示符變為“#”而不是“$”。想退回普通賬戶時可以執行“exit”或“logout”?。
注意:但是只有指定的一些用戶才有執行?sudo?的權限,具體配置在 /etc/sudoers?文件中。
有兩個方法:第一是將該用戶加入?wheel組中(因為/etc/sudoers中默認加入了wheel組中的用戶可以使用sudo權限),第二是在/etc/sudoers文件中加入? hack???ALL=(ALL) ? ?ALL
su?: 切換到某某用戶模式,提示輸入密碼時的密碼為切換后賬戶的密碼,用法為“su? 賬戶名稱”。如果后面不加賬戶時系統默認為root賬戶,密碼也為超級賬戶的密碼。沒有時間限制。
su -?:su -?和 su?的不同之處在于 su -?切換用戶后的目錄為切換后目錄的家目錄,而 su?則是原目錄
?
?
?
?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的Linux下的用户、组和权限的详细解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java transient关键字(序列
- 下一篇: Java 文件操作二(重命名、设置只读、