其實說真的,這些基礎挺枯燥的,內容呢絕大多數都是些靜態的。
上一篇文章我們學習了基本的指令和vim編輯器的操作方法。這篇文章我們主要來學習下Linux中使用者的概念和許可權相關的知識。
一、使用者與使用者組
其實在Windows中也有使用者的概念,比如管理員和訪客,只是在Windows這種操作介面系統中,使用者的概念給人的感覺十分弱化,沒有那麼顯眼。但是在Linux中卻是十分重要的。試想一下,可能會有很多人操作同一臺伺服器。那麼就需要區分使用者,以分配不同的許可權。否則,所有使用者都可以通過rm -rf命令刪除所有檔案。這肯定是一場災難。
Linux系統是一個多使用者多工的分時作業系統,任何一個要使用系統資源的使用者,都必須首先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。使用者的賬號一方面可以幫助系統管理員對使用系統的使用者進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助使用者組織檔案,併為使用者提供安全性保護。每個使用者賬號都擁有一個唯一的使用者名稱和各自的口令。使用者在登入時鍵入正確的使用者名稱和口令後,就能夠進入系統和自己的主目錄。使用作業系統的人,都算是使用者,更具體的來說,登入作業系統的賬號都是使用者。而使用者組,就是擁有相同系統許可權的一組使用者。
下面,我們先來看下與賬號有關的系統檔案。
1、配置檔案
1.1 /etc/group,使用者組的所有資訊都存放在該檔案裡
- root組編號是0
1-499是
系統預留的編號,預留給安裝的軟體和服務的- 使用者手動建立的使用者組從
500
開始 - 組密碼佔位符都是x
- 如果組內只有一個使用者,而且使用者名稱和組名相同的話,是可以省略使用者名稱的
儲存當前系統中,所有使用者組的資訊,看一下里面的內容是這樣的:
上圖只是檔案中的部分資料,那該檔案中的資料是什麼意思呢。三個冒號,分割出四個部分。既:組名:口令:組標識號:組內使用者列表。
我們以上圖中的mail:x:12:exim為例:
含義 | |
---|---|
組的名稱 | |
x | 密碼佔位符 |
12 | 組編號 |
exim | 組中使用者名稱列表 |
1.2 /etc/gshadow
是/etc/group的加密資訊檔案,比如使用者組(Group)管理密碼就是存放在這個檔案。/etc/gshadow和/etc/group是互補的兩個檔案;對於大型伺服器,針對很多使用者和組,定製一些關係結構比較複雜的許可權模型,設定使用者組密碼是極有必要的。
用於存放當前系統中使用者組的密碼資訊,和/etc/group中的記錄一一對應。
跟/etc/group中的分割方式一樣,介紹下都是什麼意思,以上圖中的mail:::exim為例:
組的名稱 | |
組密碼,*為空 | |
組管理者,為空表示都可以管理這個組 | |
exim | 組中使用者名稱列表 |
1.3 /etc/passwd
Linux系統中的每個使用者都在/etc/passwd檔案中有一個對應的記錄行,它記錄了這個使用者的一些基本屬性。這個檔案對所有使用者都是可讀的。
這個資訊就有點多了,既:使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:登入Shell,還是以最後一個mail為例:
含義 | |
---|---|
使用者名稱 | |
x | 密碼佔位符 |
8 | 使用者編號 |
12 | 使用者組編號 |
使用者註釋資訊 | |
/var/spool/mail | 使用者主目錄 |
/sbin/nologin | shell型別 |
1.4 /etc/shadow
該檔案中的記錄行與/etc/passwd中的一一對應,它由pwconv命令根據/etc/passwd中的資料自動產生
它的檔案格式與/etc/passwd類似,由若干個欄位組成,欄位之間用":"隔開,既:登入名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標誌。這些欄位是:
含義 | |
---|---|
root | 使用者名稱 |
password | 單向加密後的密碼 |
17982 | 修改日期,這個是表明上一次修改密碼的日期與1970-1-1相距的天數密碼不可改的天數:假如這個數字是8,則8天內不可改密碼,如果是0,則隨時可以改 |
0 | 這個是表明上一次修改密碼的日期與1970-1-1相距的天數密碼不可改的天數:假如這個數字是8,則8天內不可改密碼,如果是0,則隨時可以改 |
99999 | 如果是99999則永遠不用改。如果是其其他數字比如12345,那麼必須在距離1970-1-1的12345天內修改密碼,否則密碼失效 |
7 | 修改期限前N天發出警告 |
密碼過期的寬限天數 | |
帳號失效日期 | |
保留:被保留項,暫時還沒有被用上 |
2、使用者命令
- whoami,顯示登入的使用者名稱
- id [student],比如id root,顯示指定使用者資訊,包括使用者編號,組編號等。
- groups [student],比如 groups root,顯示root使用者所在的所有組。
3、使用者和使用者組操作
- useradd [選項] [使用者名稱],新增新的使用者賬號。
- userdel [選項] [使用者名稱],刪除已有的使用者賬號。
- -r,把使用者的主目錄一起刪除
- usermod [選項] [使用者名稱],根據實際情況更改使用者的有關屬性,如使用者號、主目錄、使用者組、登入Shell等。
- -d,指定個人資料夾
- groupadd [選項] [使用者組],增加一個新的使用者組。
- -g,指定新建使用者組的標識號
- groupdel [使用者組名],刪除一個已建立的使用者組。
- groupmod [選項] [使用者組名],修改使用者組的屬性。
- -n,將使用者組的名字改為新名字
- -g,GID 為使用者組指定新的組標識號
我們瞭解了使用者組的增刪改的相關命令,實際上,這些命令就是操作了本篇文章開始時所介紹的那些檔案。那麼接下來,我們來實踐一下:
首先我們先建立一個使用者:
直接執行useradd zaking,然後我們再新增一遍已經新增過得使用者名稱:
系統會告訴你,已經存在了,無法再建立。並且,在/home裡,我們也可以看到,系統在新建使用者的同時,也為我們在/home目錄下建立了對應使用者名稱的資料夾:
ok,那我們是不是可以用這個使用者來登入了呢?就一個使用者名稱,我他媽咋登入伺服器?你他媽逗我?別急,我們們慢慢來……
我們來執行以下passwd [使用者名稱]命令,開建立剛才使用者的密碼,密碼的輸入是隱藏模式,就像這樣:
然後,我們就可以試著登入了,就跟我們登入root賬號一樣,輸入剛才新建立的賬號密碼就可以進到伺服器裡面了:
ok,我們建立好了一個新賬號。但是我們看到:
它自己的home/zaking目錄有使用者許可權,但是沒有使用者組許可權。所以我們新增一個使用者組:
這樣我們就新建了一個使用者組,但是我們怎麼確定這個使用者組新建成功了呢?
我們看到,檔案的最後,就有我們剛才新建的使用者和使用者組。
那我想把zaking使用者分配給zakingroup使用者組要怎麼辦呢?
通過這個命令就可以把使用者新增到你想要新增的使用者組,但是這裡強調一點實際上,使用者組新增使用者的操作也因不同的選項會產生不同的結果,要注意更深入的學習。那麼下面,我們就可以通過 groups [使用者名稱],來檢視使用者所屬的使用者組:
既然使用者和使用者組都已經建立好了,那麼我們看看怎麼把它們都刪除了。我們先來刪除使用者組:
誒?竟然不讓刪,為啥?上面報錯的意思是:無法移除zaking使用者的主組。其實這裡不讓刪的原因跟我們之前使用的把使用者新增到使用者組的命令有關,但這裡不多說,多說就太多了。我們需要先把zaking使用者從zakingroup使用者組移除。其實在我們建立zaking使用者的時候,它預設有一個組就是它自己,還記得我們檢視/etc/group最後面的那兩條資料麼?當我們通過命令把zaking移入zakingroup時,當時的命令實際上是切換了主組。所以我們現在這樣是刪不了的。
所以,我們可以嘗試先把使用者刪除了。
看到沒?它說zaking這個組沒有刪除,注意不是使用者,而是組。那我們再來看下/etc/group這個檔案:
我們看到這兩個組還在這:
看到了嗎,找不到這個使用者了。我們再試下登入,發現登入不上了。但是我們看一下home目錄:
zaking這個資料夾還在,之前的命令有說明怎麼把這個目錄也一起刪了,這裡我不試了,自己去試一下哦。
然後,接下來我們該刪除zaking和zakingroup使用者組了:
沒了吧,很簡單。簡單的實踐就到這裡了,下面我們再來學習下linux許可權相關的內容。
二、許可權
1、檔案許可權
1.1檔案基本許可權
之前第一篇有簡單聊過檔案許可權問題,今天我們們再來簡單地複習下檔案許可權相關的內容,並且學習如何修改許可權。
看上圖的紅框部分,就是檔案相應許可權的說明:
- | rw- | r-- | r-- |
檔案型別 | 所有者 | 所屬組 | 其他人 |
檔案的型別基本上有三種:
- -,指檔案
- d,只目錄/資料夾
- l,軟連結
之前也說過了,英文字母的意思分別是r:read、讀,w:write、寫,x:excute、執行。這個都沒啥好說的,靜態知識,死記硬背就好了。額外的,之前的說過許可權數字,在強調一遍吧。r:4,w:2,x:1。
1.2基本許可權的修改
那現在我們來看下許可權相關的命令。
- chmod [選項] [模式] 檔名,修改使用者對檔案的許可權。
- 選項:-R,遞迴
- 模式:[ugoa][+-=][rwx],u代表當前使用者,g代表所屬組,o代表其他人,a代表所有人。
- chown [使用者名稱] [檔名],設定檔案所有者和檔案關聯組的命令,比如:如果想讓一個使用者擁有7許可權,可以把這個檔案的所有者改成這個使用者名稱,chown zaking folder。
- chgrp [組名] [檔名],用於變更檔案或目錄的所屬組。
1.3許可權的作用
這部分是比較重要的。首先,對於檔案來說,最高許可權是x。對於目錄來說,最高許可權是w,只有讀許可權沒有意義,對目錄有了寫許可權,裡面可以做任何事情。
我們來看個表格,說明檔案和目錄的一些細微的區別:
r | w | x | |
檔案 | 讀取檔案內容 | 編輯、新增、修改檔案內容,不能刪除檔案,除非對目錄有寫的許可權 | 可執行 |
目錄 | 可以檢視目錄下的檔名 | 具有修改目錄結構的許可權。如新建、刪除和重新命名此目錄下的檔案和目錄。 | 進入目錄 |
2、預設許可權
1.umask
啥意思呢?首先,umask是檢視預設許可權的意思,其中第一位的0是檔案特殊許可權,後面的三位022就是檔案預設許可權。那022是啥意思呢?022是檔案預設的許可權掩碼。首先,預設的完整許可權是777對吧,777 - 022 = 755。就是檔案的預設許可權,755啥意思不用我多說了吧。
其次,檔案預設不能建立可執行檔案,必須手動賦予執行許可權。檔案預設的最大許可權是666,也就是4+2,就是讀和寫的許可權。建立檔案後的預設許可權,為666減去umask值。那麼同理,目錄預設最大許可權是777,建立目錄之後的初始許可權就是777減去umask值。
最後,我們可以臨時修改umask值,通過umask 0000,這樣的命令來修改,如果想要永久修改需要修改/etc/profile檔案內的值。
2.sudo許可權
sudo可以把本身只有超級管理員可以使用的命令賦予普通使用者來使用。sudo操作的物件是系統命令。
另外可以通過visudo可以賦權給使用者,實際上修改的是/etc/sudoers檔案。命令必須寫絕對路徑。
以下是/etc/sudoers檔案的部分內容:
root ALL=(ALL) ALL 使用者名稱 被管理主機地址=(可使用的身份) 授權命令(絕對路徑) stu2 ALL=(root) ALL //新增加使用者行
那麼下面,按照慣例,我們就來實踐一下吧:
還記得之前建立使用者及賦予密碼的方式不?我們現在來建立一個使用者。這裡不多說,如果不知道怎麼建立的回頭去看一下哦。使用者名稱叫做zakingwong。
ok,我們現在建立了一個叫做zakingwong的使用者,並且我們給了它密碼。然後我們先用這個賬號密碼登入進我們的伺服器:
這是zakingwong的umask。
這是root的umask。
那還記得我們之前說過的,umask所代表的含義和umask的作用不?這裡我們們再簡單回顧一下:umask是使用者預設許可權的“補碼”,對於檔案來說,完整的預設許可權是666,咋不是777?記得我們之前說過,檔案預設是不會有執行許可權的,執行的許可權一定是後期賦予的,所以檔案的預設許可權就是666。那麼目錄完整的預設許可權就是777。所以,根據上面我們查詢出來的umask值,我們可以分別用root和zakingwong賬戶來分別建立一個檔案和目錄,看看是不是跟我們說的一樣,哦對了,這裡還得說一下,umask是預設許可權的補碼,至於怎麼計算許可權值,如果你不知道的話,請返回頂部,從頭看找一下。
這是root建立檔案和目錄的結果,這裡我不說,自己去算一下。我心算了一下是對的噢。我們再來看下剛才我們建立的zakingwong是不是這樣:
誒?臥槽?這好像有點不對勁啊?恩,這裡要解釋的東西有點多,大家注意一下。首先,zakingwong沒有操作其他屬於root的許可權,除非root賦予zakingwong許可權。並且這裡root是超級管理員,在第一篇文章我們解釋基本的命令列含義的時候說過,提示符#是超級使用者,$就是普通使用者,普通使用者只有操作家目錄的許可權。所以我們看到,在系統根目錄/下,zakingwong是沒有許可權建立目錄的,所以我們進入到屬於zakingwong的家目錄下,分別建立了demo目錄和test.j檔案。這裡,我們也可以算一下,使用者的預設許可權也是沒問題的。
那,現在,我想要更改zakingwong的home目錄下,所建立的demo目錄和test.js檔案的許可權,怎麼辦呢?其實只需要在zakingwong使用者下,進行相應的許可權賦予操作即可,注意,這時使用的使用者是zakingwong,並不是root,現在的操作跟root還沒關係呢。
看到沒,這樣就賦予了所有的許可權,test.js也是同理:
至於chmod命令下的其他模式,大家自己去試一下哦,這裡多說無益,只是重複操作。
現在,zakingwong只能在自己的home目錄下隨便玩,我希望zakingwong也可以操作根目錄怎麼辦呢?第一,我們可以改變該檔案的所有者,也就是上面說過的chown命令,但是這裡你要知道的是,更改了所有者,之前的root就用不了,其他眾多的使用者也用不了。所以,在這種情況下,個人覺得,更合適的操作室給使用者增加具有許可權的組,這裡要尤其注意一下。我們們之前給zaking增加組的時候,實際上不是增加,而是更改主組。也就是把zaking從A組移動到了B組,移動之後,zaking就只屬於B組,跟A組就沒關係了。但是,我們這裡要做的,是給zakingwong,增加組,而不是修改組。
首先,我們得新建一個組:
然後,我們把使用者zakingwong,新增進這個使用者組,注意是新增,不是修改主組:
這樣,我們就新增好了。那麼接下來我們可以修改/demo目錄的所屬組:
這樣就修改好了,然後我們試下,使用zakingwong賬戶,能不能操作/demo。
臥槽?還是不行?為啥,我不是更改組了麼?我們們細心一點,沒錯,你更改/demo檔案的所屬組了,但是,但是!這個組沒有修改該檔案許可權,具體如上圖紅框標識。對吧?所以,接下來,我們要賦予zakingwongroup這個組的w許可權。
額……額?抱歉,zakingwong賬戶怎麼會有許可權,我們得用root賬戶。
好了......嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿,我們接下來做一件大事,大家一直想做卻又沒許可權做的事情。刪庫!
我們看到,通過rm -rf命令,zakingwong賬號對demo目錄裡的內容具有了完整的許可權,但是卻不能刪除demo目錄,因為它的所有者並不是zakingwong,那為了完成我們偉大的刪庫夢想,把所有者改成zakingwong不就可以了嘛?我們來試試:
注意上面兩個圖賬號不一樣哦,然後我們現在用zakingwong賬號操作一下試試:
還是不行……哎。。。刪庫的夢想終究還是沒有實現。
由於才疏學淺,我畢竟也是剛學嘛,個人猜測,這裡我們雖然賦予/demo至高許可權,但是這個許可權的範圍是該資料夾內部,並不包含該目錄自身。所以,哪怕賦予普通使用者再高的許可權,也是無法刪除root在根目錄下建立的資料夾的。只有root可以。當然,這只是個人猜測,也可能是我的操作或者某一個環節出了問題,這裡不再深究。如後續的學習中發現問題,會回來勘誤。也竭誠歡迎各位大佬給予建議。
好了,在刪庫的動力支撐下,我們結束了本篇使用者與許可權的相關內容,接下來我們一起來學習下shell。