前言
只有光頭才能變強
回顧前面:
沒想到上一篇能在知乎獲得千贊呀,Linux也快期末考試了,也有半個月沒有寫文章了。這篇主要將Linux下的使用者和許可權知識點再整理一下。
那麼接下來就開始吧,如果文章有錯誤的地方請大家多多包涵,不吝在評論區指正哦~
一、Linux下的使用者
Linux是一個多使用者的系統,我們可以多個使用者同時登陸Linux~
- 賬戶實質上就是一個使用者在系統上的標識。
Linux中的賬戶包括
- 使用者賬戶
- 普通使用者賬戶:在系統上的任務是進行普通工作
- 超級使用者賬戶(或管理員賬戶):在系統上的任務是對普通使用者和整個系統進行管理。
- 組賬戶(組是使用者的集合)
- 標準組:標準組可以容納多個使用者
- 私有組:私有組中只有使用者自己
當一個使用者同屬於多個組時,將這些組分為
- 主組(初始組):使用者登入系統時的組。
- 附加組:登入後可切換的其他組
上面也說了,賬戶的實質上就是使用者在系統上的標識,這些標識是用檔案儲存起來的:
- 使用者名稱和 UID 被儲存在
/etc/passwd
檔案中,檔案許可權(-rw-r--r--)
- 組和GID 被儲存在
/etc/group
檔案中,檔案許可權(-r--------)
- 使用者口令(密碼)被儲存在
/etc/shadow
檔案中 ,檔案許可權(-rw-r--r-- )
- 組口令被儲存在
/etc/gshadow
檔案中 ,檔案許可權(-r--------)
也就是說:我們建立的使用者,這個使用者的資訊由不同的檔案來儲存著。
有了上面的知識點,下面我來簡述一下建立使用者的時候會發生什麼:
- 使用者名稱和 UID 被儲存在
/etc/passwd
這個檔案中,使用者的口令通常用shadow passwords
保護 - 當使用者登入時,他們被分配了一個主目錄和一個執行的程式(通常是 shell)
- 若沒有指定他所屬於的組,RHEL/CentOS就建立一個和該使用者同名的私有組,且使用者被分配到這個私有組中
再來回顧一下:賬戶的實質上就是使用者在系統上的標識,這些標識是用檔案儲存起來的。也就是說:我們是可以直接編輯修改系統賬戶檔案來維護賬戶。
- 但是不建議這樣做,如果明確要這樣做的話,最好使用命令檢測一下你編輯的語法是否有問題:
pwck
:驗證使用者賬號檔案,認證資訊的完整性。該命令檢測檔案“/etc/passwd”
和“/etc/shadow”
的每行中欄位的格式和值是否正確grpck
:驗證組賬號檔案,認證資訊的完整性。該命令檢測檔案“/etc/group”
和“/etc/gshadow”
的每行中欄位的格式和值是否正確。
既然不建議我們直接編輯檔案的方式來管理使用者,那麼Linux是肯定有現成的命令給我們使用的:
1.1管理Linux使用者的命令
使用者管理:
useradd
usermod
userdel
組管理:
groupadd
groupmod
groupdel
批量管理使用者:
- 成批新增/更新一組賬戶:
newusers
- 成批更新使用者的口令:
chpasswd
組成員管理:
- 向標準組中新增使用者
gpasswd -a <使用者賬號名> <組賬號名>
usermod -G <組賬號名> <使用者賬號名>
- 從標準組中刪除使用者
gpasswd -d <使用者賬號名> <組賬號名>
口令維護(禁用、恢復和刪除使用者口令):
- 設定使用者口令:
passwd [<使用者賬號名>]
- 禁用使用者賬戶口令
passwd -l <使用者賬號名>
- 檢視使用者賬戶口令狀態
passwd -S <使用者賬號名>
- 恢復使用者賬戶口令
passwd -u <使用者賬號名>
- 清除使用者賬戶口令
passwd -d <使用者賬號名>
口令時效設定:
- 修改
/etc/login.defs
的相關配置引數
設定已存在使用者的口令時效:
chage
命令
使用者切換命令:
su
- 直接切換為超級使用者
sudo
- 直接使用 sudo 命令字首執行系統管理命令。執行系統管理命令時無需知道超級使用者的口令,使用普通使用者自己的口令即可
更多資料查詢:
- www.cnblogs.com/slgkaifa/p/…--linux許可權之su和sudo的差別
使用者相關的命令:
id
:顯示使用者當前的uid、gid和使用者所屬的組列表groups
:顯示指定使用者所屬的組列表whoami
:顯示當前使用者的名稱w/who
:顯示登入使用者及相關資訊newgrp
:用於轉換使用者的當前組到指定的組賬號,使用者必須屬於該組才可以正確執行該命令
1.2Linux使用者的練習題
用cat命令,觀察如下檔案:/etc/passwd , /etc/shadow, /etc/group,/etc/gshadow;顯示useradd命令新增使用者引數的預設值
建立linux賬戶jkXX(XX為學生學號末兩位),要求使用者組為users,並設定密碼;觀察/etc/passwd和/etc/shadow檔案的變化;退出root賬戶,用jkXX賬戶登入,在其主目錄下建立一個myfirst檔案,並用長格式列出myfirst檔案
用root賬戶登入;新增組jsj;設定使用者jkXX為jsj組使用者,觀察/etc/passwd、/etc/group和/etc/gshadow檔案變化
新增一個新使用者airXX(XX為學生學號末兩位),觀察新使用者airXX的使用者id和組id;然後刪除該使用者,注意不要在命令中加選項,觀察使用者檔案和組檔案的變化;觀察airXX使用者的目錄是否存在;
shadow檔案中密碼為*號和!!代表什麼?
答:*
代表賬戶禁用;!!
代表密碼鎖定。
airXX使用者組id是多少?這個組是什麼型別的組?這樣做有什麼好處?
答:air08使用者組id是501,這個組屬於私有組。每個未指定組的使用者會建立一個同名的組,這樣的組稱為私有組,只有一個使用者,既有利於防止資訊洩露,也也有利於防止不合理的授權。總之,有利於安全管理。
預設情況下刪除使用者,但卻保留了使用者的主目錄,這樣做有什麼好處?
答:保留使用者目錄,防止將使用者目錄下有價值的資料誤刪除。
用cat命令,觀察檔案/etc/passwd;仿照passwd檔案的格式,用vi編輯一個新的檔案,檔名為userXX(XX為學生學號末兩位),檔案包括3條記錄,使用者名稱分別為jkXX(XX為學生學號末兩位),peter,jason,他們的使用者id大於1000,組id大於1000,要求peter和jason同組;用命令newusers根據檔案userXX的內容批量生成使用者;觀察/etc/passwd檔案的變化。
用cat命令,觀察檔案/etc/shadow;用vi編輯一個新檔案,檔名為mimaXX(XX為學生學號末兩位),檔案包括3條記錄,每條記錄使用者名稱與上一步驟要求相同,密碼自行設定,使用者名稱和密碼用冒號:隔開;用命令chpasswd根據檔案mimaXX的內容批量生成密碼;觀察檔案/etc/shadow變化;用命令chpasswd -m再次批量生成密碼,觀察檔案/etc/shadow變化;
退出root賬戶,用jkXX賬戶登入。退出jkXX賬戶,返回root賬戶,觀察/etc/shadow檔案;用passwd命令鎖定使用者jkXX,觀察/etc/shadow檔案變化;然後退出root賬戶,用jkXX賬戶登入,是否成功?
用chage命令檢視peter賬戶的時間設定;重新設定peter賬戶的時間,要求兩天內不能更改口令,且口令最長的存活期為 90 天,並在口令過期前 5 天通知使用者,口令超期7天密碼失效;用chage命令再次檢視peter賬戶的時間設定
用root賬戶登入;用su切換到jason賬戶;用cd進入使用者主目錄;建立一個新檔案abc,用長格式列出abc檔案;觀察檔案的使用者和組的屬性
鎖定賬戶後,shadow檔案發生了什麼變化?
答:鎖定賬戶的密碼之前會鎖定標誌!!
用su切換使用者後,建立的新檔案檔案屬於哪個使用者?
答:新檔案屬於切換之後的使用者。
兩次執行chpasswd命令,結果是否相同?加密演算法md5和sha512哪個更安全?
答:兩次執行chpasswd命令結果不同,預設情況採用sha512加密演算法;-m選項時,採用md5加密演算法;sha512更安全,因為加密資訊長度更長,破解計算量大。
建立三個普通使用者賬戶,要求如下:使用者名稱分別為jkXX(XX為學生學號末兩位),peter,jason,其中jkXX和jason為相同普通組成員;觀察/etc/passwd檔案的變化。為jkXX賬戶新增root組;
分別練習id,groups,whoami,who命令,顯示當前賬戶的資訊;用su命令切換到jkXX賬戶,分別練習id,groups,whoami,who命令,顯示當前賬戶的資訊。用newgrp切換jkXX賬戶的組,分別練習id,groups,whoami,who命令,顯示當前賬戶的資訊
二、許可權管理
Linux是多使用者的作業系統,允許多個使用者同時在系統上登入和工作。 為了確保系統和使用者的安全,Linux自然就有自己一套的許可權管理機制了!
相信用過Linux的同學在檢索資料夾檔案的時候常常用到ls -l
的命令,會出來一大串的資料。這些資料你能讀懂了嗎?
例如:
drwxr-xr-x 3 osmond osmond 4096 05-16 13:32 nobp
複製程式碼
其實很簡單:
其實我們看許可權就是看drwxr-xr-x
這麼一串東西,看起來很複雜,但不是的,一下就可以理解了。我們來分解一下:
這9個字元每3個一組,組成 3 套 許可權控制
- 第一套控制檔案所有者的訪問許可權
- 第二套控制所有者所在使用者組的其他成員的訪問許可權
- 第三套控制系統其他使用者的訪問許可權
rwx分別代表的意思:
看到這裡來,如果前面的你看懂了,那drwxr-xr-x
這麼一串東西我覺得你很容易就能理解了:
- d是資料夾,後面還有9個字母,每3個分成一組,
-
號表示沒有。那麼這個資料夾的許可權就是:- 對當前使用者是可讀可寫可執行,對同組的使用者是可讀可執行,對其他的使用者是可讀可執行
是不是很簡單??r-read,w-write,x-execute
,很好理解的。
對於這些rwx命令為了方便還可以換成八進位制的資料來表示,我相信大家看完下面的demo也知道其實就這麼一回事了:
許可權的優先順序:
- 如果UID匹配,就應用使用者屬主(user)許可權
- 否則,如果GID匹配,就應用組(group)許可權
- 如果都不匹配,就應用其它使用者(other)許可權
- 超級使用者root具有一切許可權,無需特殊說明
2.1管理Linux許可權的常用命令
chmod
- 改變檔案或目錄的許可權
chown
- 改變檔案或目錄的屬主(所有者)
chgrp
- 改變檔案或目錄所屬的組
umask
- 設定檔案的預設生成掩碼
例子:
2.2許可權擴充套件知識
上面提到了umask屬性,它用來做這樣的東西的:預設生成掩碼告訴系統當建立一個檔案或目錄時不應該賦予其哪些許可權。
- 預設的umask的值是022,我們看一下下面的例子應該就能懂了:
除了上面所說的許可權之外,Linux還提供了三種特殊的許可權:
- SUID:使用命令的所屬使用者的許可權來執行,而不是命令執行者的許可權
- SGID:使用命令的組許可權來執行。
- Sticky-bit:目錄中的檔案只能被檔案的所屬使用者和root使用者刪除。
它們是這樣表示的:
- SUID和SGID用s表示;Sticky-bit用t表示
- SUID是佔用屬主的x位置來表示
- SGID是佔用組的x位置來表示
- sticky-bit是佔用其他人的x位置來表示
例如:drwxrwxrwt 5 root root 4096 06-18 01:01 /tmp
它就擁有sticky-bit許可權。-rwsr-xr-x 1 root root 23420 2010-08-11 /usr/bin/passwd
它就擁有SUID許可權
SUID,SGID,sticky-bit同樣也有數字的表示法:
使用的例子:
Linux核心中有大量安全特徵。EXT2/3/4檔案系統的擴充套件屬性(Extended Attributes)可以在某種程度上保護系統的安全
常見的擴充套件屬性:
- A(Atime):告訴系統不要修改對這個檔案的最後訪問時間。
- 使用A屬性可以提高一定的效能。
- S(Sync):一旦應用程式對這個檔案執行了寫操作,使系統立刻把修改的結果寫到磁碟。
- 使用S屬效能夠最大限度的保障檔案的完整性。
- a(Append Only):系統只允許在這個檔案之後追加資料,不允許任何程式覆蓋或者截斷這個檔案。如果目錄具有這個屬性,系統將 只允許在這個目錄下建立和修改檔案,而不允許刪除任何檔案。
- i(Immutable):系統不允許對這個檔案進行任何的修改。如果目錄具有這個屬性,那麼任何的程式只能修改目錄之下的檔案,不允許建立和刪除檔案。
- a屬性和i屬性對於提高檔案系統的安全性和保障檔案系統的完整性有很大的好處。
常用命令:
- 顯示擴充套件屬性:
lsattr [-adR] [檔案|目錄]
- 修改擴充套件屬性:
chattr [-R] [[-+=][屬性]] <檔案|目錄>
2.3許可權管理練習題
用root賬戶登入,建立一個檔案aaaXX(XX為學生學號末兩位),用長格式檢視檔案許可權;用chmod命令,文字設定法,給aaaXX檔案同組增加寫屬性,觀察結果;用chmod命令,數字設定法,給aaaXX檔案設定許可權為766,觀察結果;
切換到peter賬戶,檢視當前umask是多少,觀察結果;建立一個目錄foldXX(XX為學生學號末兩位),檢視其許可權;建立一個新檔案bbb,檢視其許可權;改變unmask為066,建立一個新檔案ccc,檢視其許可權
切換到jkXX賬戶;建立一個檔案myfile,觀察其屬性;用chgrp改變檔案myfile組屬性為root;試著去改變檔案myfile主屬性為root,可以嗎?切換到root賬戶,改變檔案myfile主屬性為root,觀察結果
數字設定766代表檔案許可權是什麼?
答:766代表檔案許可權為rwx-rw-rw-
為什麼用jkXX賬戶改變檔案myfile的屬主失敗?
答:因為chown只有root賬戶才可以使用
Umask為022和066對新建立的檔案屬性影響一樣嗎?為什麼?
答:影響當然不一樣,umask定義的是預設不應該獲得的許可權,066比022轉換成為二進位制數後,多了兩個限制位元位。
以root賬戶登入,複製/usr/bin/dir檔案到使用者主目錄,用長格式列出,設定檔案的suid和sguid為1,用長格式列出;切換帳號為jkXX,執行復制過來的檔案dir(注意執行當前路徑下的檔案要帶上路徑,例如./dir);
切換到jkXX賬戶,進入/tmp目錄,建立資料夾myfold,設定資料夾myfold許可權為777,並且sgid和sticky-bit為1,用長格式列出,觀察myfold的屬性;進入myfold,建立新檔案aaa,設定屬性為任何人可讀可寫,用長格式列出;切換到jason賬戶,進入/tmp/myfold目錄,刪除aaa檔案,是否可以刪除?
root賬戶,進入使用者主目錄;建立一個檔案bbb檔案,檢視檔案的擴充套件屬性;給檔案bbb新增擴充套件屬性i,然後試著刪除該檔案,是否成功,怎樣才能刪除;建立一個ccc檔案,給檔案ccc新增擴充套件屬性a,用長格式列表/bin目錄並重定向輸出到ccc檔案,觀察ccc檔案長度的變化,用長格式列表/etc目錄,並重定向輸出到ccc檔案,是否成功
切換到jkXX賬戶,在/tmp目錄下建立一個目錄myshare,用getfacl檢視myshare目錄檔案訪問控制表;設定myshare資料夾對於jason使用者許可權為rwx,檢視檔案訪問控制表的變化;切換到jason賬戶,進入myshare檔案建立檔案yyy,是否成功;切換到peter賬戶,進入myshare檔案建立檔案zzz,是否成功,為什麼?
myfold目錄下,為什麼jason賬戶不能刪除一個任何人都可讀可寫的檔案?
答:因為檔案所在的資料夾myfold被它的所屬者jk08設定了stickybit位,該資料夾下面的所有檔案,只有檔案所屬者,以及root使用者才能刪除。
為什麼peter賬戶在在myshare資料夾裡面不能建立檔案?
答:因為myshare資料夾,屬於jk08使用者,只有jk08對該目錄具備rwx許可權。此外,採用facl的方式,給jason使用者開放了該目錄的rwx訪問許可權;peter既不是資料夾的擁有者,也沒有在facl中開放rwx許可權;依據許可權設定情況,peter只有該資料夾的rx許可權。因此,不能建立檔案。
新增擴充套件屬性a後,用重定向將輸出內容給ccc檔案,可能會失敗,怎樣才能輸出成功?
答:應該採用追加方式的重定向>>,可以在檔案末尾新增內容,這樣才符合檔案擴充套件屬性a的安全規定。
三、總結
本文主要是總結了Linux下操作使用者和許可權的知識~~~這兩個知識點在Linux下也是很重要的,是學習Linux的基礎~
繼續完善上一次的思維導圖:
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同學,可以關注微信公眾號:Java3y
文章的目錄導航: