1. 程式人生 > >Linux結構與其中的使用者及組

Linux結構與其中的使用者及組

Linux的倒樹形結構

linux是一個倒樹型結構,最大的目錄名稱叫“/” (根目錄),下面有著很多的二級目錄存放著不同的配置檔案(什麼…你說你把根目錄刪了…emmm…跑路吧,祝福你)

linux系統中的二級目錄

/bin ## 二進位制可執行檔案,系統常規命令
/boot ## 啟動目錄,存放系統自動啟動檔案,核心,初始化程式
/dev ## 系統裝置管理檔案
/etc ## 大多數系統配置檔案存放路徑
/home ## 普通使用者家目錄
/lib ## 函式庫
/lib64/ ## 64位函式庫
/media ## 臨時掛載點
/mnt ## 臨時掛載點
/run ## 自動臨時裝置掛載點
/opt ## 第三方軟體安裝路徑
/proc ## 系統硬體資訊和系統程序資訊
/root ## 超級使用者家目錄
/sbin ## 系統管理命令,通常只有root可以執行
/srv ## 系統資料目錄
/var ## 系統資料目錄
/sys ## 核心相關資料
/tmp ## 臨時檔案產生目錄
/usr/ ## 使用者相關資訊資料

一但把上面的檔案刪壞了,系統可就完蛋了

Linux中對於使用者與組的操作

1.使用者存在的意義

類似於一個合法的身份資訊(就像你的身份證號)
回收權利

2.組存在的意義

便於區分管理使用者之間的身份、許可權差別(級別的區分)
共享權利

3.使用者的檢視

1)檢視當前使用者
whoami ##檢視當前使用者
在這裡插入圖片描述
2)系統中使用者的檢視
id ##檢視指定使用者id資訊
-u ##檢視使用者的uid(使用者id【身份證號】)
-g ##檢視使用者的gid(初始組【家庭住址】)
-G ##檢視使用者所在的所有組的id(包括附加組【所享受的不同的權力與義務】)
在這裡插入圖片描述
####初始組每個使用者只有一個,代表了最基礎的分組
####附加組可以有很多個,以此來區分管理不同使用者的許可權

使用者切換

1)gnome-session-quit [–force] ##登出當前使用者,再用其他使用者登入
2)su - 使用者名稱稱
su - 中“-”表示在使用者身份切換時同時切換當前使用者的環境
su - 執行時高階使用者切換到低階使用者不需要密碼,低階使用者切換到高階需要,平級使用者切換也需要密碼
在這裡插入圖片描述

注意:每使用一次su命令,就會多出來一個bash程序,過多的bash會導致程式出錯,所以每次使用su命令之後最好要使用exit或者logout退出,最多保持有兩個bash

在這裡插入圖片描述

使用者在系統中的儲存方式

/etc/passwd
###使用者資訊檔案
使用者名稱稱:密碼:uid:gid:說明:家目錄:預設shell(有哪些能用可以檢視/etc/shells)
在這裡插入圖片描述


/etc/group
使用者組資訊檔案
組的名字:組密碼:組id:組成員
在這裡插入圖片描述
/etc/shadows
認證資訊檔案(密碼)
在這裡插入圖片描述
/etc/skel/.*
預設開啟shell的配置,使用者的骨檔案
在這裡插入圖片描述
/home/username
使用者的家目錄

檔案的監控:watch [-n 頻率] +命令(對於命令的按頻率執行,ctrl+c退出)

在這裡插入圖片描述
意思是以每秒一次的頻率執行cat /etc/passwd這個命令
在這裡插入圖片描述

使用者管理命令

在下面的實驗進行前,由於實驗結果很難直接看到,所以我們需要一些準備工作:
開啟一個terminal,輸入命令
在這裡插入圖片描述
這個命令的意思是以每秒一次的頻率監控/etc/passwd這個檔案的後三行
這樣我們就可以在每條命令敲完後直觀的看到我們的命令對於使用者管理的作用

使用者的刪除

以圖中的tom使用者為例,現在我們可以看到圖中檔案的最後一行有一個名為tom的使用者
userdel #使用者刪除命令
userdel student ##刪除使用者但不刪除使用者的配置檔案在這裡插入圖片描述
我們再次開啟一個terminal,輸入userdel tom這個命令,執行命令,我們會看到上面的tom被刪掉了
在這裡插入圖片描述
但是這個時候我們再次建立同樣的一個使用者時,卻被系統報錯,為什麼呢
在這裡插入圖片描述
可以看到,雖然我們建立成功了,但是也是被系統提示有問題,這是因為我們刪除tom這個使用者時,並沒有刪除乾淨,tom的家目錄以及配置檔案都還在,自然會出現問題,而如果我們需要徹底地刪除一個使用者的話,就需要下面的這個命令:
userdel -r student##刪除使用者並刪除使用者的配置檔案
在這裡插入圖片描述
這樣刪除乾淨之後再建立的話就不會被系統提示錯誤

使用者建立

useradd##建立使用者時,讀取/etc/login.defs檔案內容確定規則
/etc/login.defs檔案如下
在這裡插入圖片描述
useradd -u **** westos ##制定使用者uid
在這裡插入圖片描述
建立了一個uid為1086的使用者tom
useradd -g ** westos ##制定使用者初始組id,“**使用者組必須是存在的”
在這裡插入圖片描述
建立了一個gid為10的使用者tom
useradd -G ** westos##制定使用者的附加組id“**使用者組必須是存在的”
在這裡插入圖片描述
建立一個使用者附加組id為10,這是我們開啟檔案/etc/group可以看到wheel組裡多了一個tom
useradd -c “*****” westos##指定使用者的說明
在這裡插入圖片描述
我們可以看到在新建立的使用者tom後有一個“abc”的描述
useradd -d /home/lee westos##指定使用者的家目錄
如果你制定了一個不存在的家目錄,你會發現使用者還是可以正常建立,並且系統會自動幫你建立這個目錄
useradd -s /bin/sh westos##指定使用者的預設shell
shell就是使用者的操作命令與系統核心溝通的橋樑,不同的shell有不同的用途和表現方式

輸入命令watch -n 1 cat /etc/group來監控使用者組的變化

groupadd ##建立使用者組
在這裡插入圖片描述
建立了一個名為redhat的使用者組
groupadd -g *** ##建立使用者組並制定使用者組的id
在這裡插入圖片描述
建立了一個gid為10086的使用者組
groupdel##刪除使用者組
在這裡插入圖片描述
可以看到,redhat使用者組已經被刪除

更改使用者資訊

usermod後面加上不同的引數就能實現不同的功能
1.-l 新名字 需要更新的舊名字 ##更改使用者名稱字
在這裡插入圖片描述
原本有一個使用者叫做tom,現在在terminal中輸入命令usermod -l harry tom,執行在這裡插入圖片描述
可以看到原本的tom改成了harry
2.-u 使用者新uID 需要更改的使用者 #更改使用者uid
在這裡插入圖片描述
可以看到harry的uid變成了1004
3.-g 使用者新gID 需要更改的使用者 #更改使用者gid(gid 初始組的id)
在這裡插入圖片描述
可以看到harry的gid變成了1000
4.-G 使用者附加組 需要更改的使用者 #更改一個使用者的附加組(但是隻是刪除原來的,新增後來的(-aG 是隻新增,不刪除))
在這裡插入圖片描述
將harry的附加組改為chrony,
在這裡插入圖片描述
但是從這裡可以看出-G這個引數只是單純的將使用者原來的附加組刪掉,並給予一個新的附加組身份,而想要在不改變原來附加組的情況下增加一個附加組要用-aG引數,命令如下
在這裡插入圖片描述
可以看到,在不改變原來附加組的情況下,為harry使用者新增加了一個chrony附加組。
5.-G “”(雙引號單引號都行(’’)) 需要清空附加組的使用者 #清空使用者附加組
在這裡插入圖片描述
可以看到harry的附加組都被刪除
6.-c “*”(兩個雙引號之間什麼都不加就是刪除) 需要更改的使用者 #更改使用者說明資訊
在這裡插入圖片描述
例如上圖中harry使用者的說明是abc,然後我們敲下如下命令
在這裡插入圖片描述
我們可以看到使用者的描述變成了123
7.-s 想要換成的shell 需要更改的使用者 #更改使用者的shell
8.-d 更改的家目錄 需要更改的使用者 #更改使用者的家目錄(只能更改家目錄的指向,至於這個家目錄對不對,不會檢視,也就是說如果改為一個不存在的家目錄,在修改時不會報錯,但是在登陸使用者時會報錯)
在這裡插入圖片描述
可以看到我們指定了一個不存在的目錄作為harry使用者的家目錄,但是命令成功執行,並沒有報錯,但是在我們想要切換到這個使用者中時
在這裡插入圖片描述
系統提示我這個目錄不存在,由於沒有正確的配置檔案,連shell也出現了問題
在這裡插入圖片描述
可以看到明顯和我們正常使用時的命令提示符不一樣,這是因為harry使用者沒有正確的目錄去存放shell的配置檔案,自然在執行時會出現問題。
8…但是如果我們已經有了一個正常的家目錄,而我們需要改變名字時,不妨用下面的命令
-md 更改的家目錄 需要更改的使用者 (家目錄的指向和名字都會改)(這個引數的前後順序不可逆(按順序執行))
在這裡插入圖片描述
可以看到harry使用者的家目錄已經變成了/home/hahaha,隨後我們切換到harry使用者,系統卻沒有發出報錯提示,這是因為-md引數會在更改家目錄指向的同時更改家目錄的名字,原來存在的家目錄的名字變成了hahaha,這樣的話hahaha變成了一個真實存在的目錄,自然也就不會出現問題了

使用者的凍結與解凍

如果在你管理的伺服器中有使用者做出了一些討厭的事(比如遊戲開掛,比如公共聊天口出髒言),怎麼才能有效的制止呢?
將usermod加上下面這兩個引數就可以輕鬆搞定
1.-L 需要鎖定的使用者 #凍結使用者
~~叮~~恭喜您,您的賬戶已被凍結~~~~~~~
2.-U 需要解鎖的使用者 #解鎖使用者
~~給你解凍了(我才不想)~~~~~~~~~~~

passwd檔案——使用者的詳細資訊集散地

在你建立一個使用者後,登出當前使用者,在你想要切換到剛剛建立的使用者時卻發現登陸介面上並沒有你建立的使用者,別急,這時候你需要下面這個命令:
passwd 使用者名稱#給你的使用者一個密碼[這是因為剛剛建立的使用者沒有密碼,預設是凍結的,這時你可以從/etc/passwd檔案中看到這個使用者但是在登陸介面卻找不到這個使用者(和凍結狀態是一樣的,如果在not listed裡直接登入這個使用者,會提示你認證不通過),需要一個密碼,密碼給定後,在登陸介面就可以看到這個使用者了]

使用者認證資訊

在你的系統中,所有的使用者id資訊都被儲存在一個檔案當中,這個檔案就是:
/etc/shadow(新建使用者時預設的數值具體見/etc/login.defs檔案)
在這裡插入圖片描述
一共九列(每一列用":"隔開),各列含義如下
1.使用者名稱
2.使用者密碼(預設加密方式為sha512對稱加密,如果加密字串前出現“!”那麼恭喜你,你的使用者被凍結了)
3.最後一次密碼被更改的時間(從1970年1月1日算起的累計天數)(啥…你說為什麼要這麼設定…emmmm…不知道,問開發者去)
4.密碼最短有效期(密碼最短要使用多少天(時間內不能更改))
5.密碼最長有效期(使用者必須在此有效期內更新密碼,如果超時會被凍結)(就比如你沒有續費的QQ會員,到期就被停掉了)
6.密碼警告期限(密碼過期前指定天數內傳送警告資訊給使用者)(~~叮~~系統提示:你的賬戶還有XX天就要完蛋,趕緊改密碼)
7.非活躍天(此位預設為空,如果設定數值,那麼在密碼最長有效期過後仍然可以使用的天數) (仁慈地留給你最後撲騰的期限,比如信用卡的還款日如果是15號,那你16去還可能還不算失信,到了17號就完了,別問我咋知道的)
8.帳號到期日(預設為空,表示帳號一定會被凍結的時間點)
9.使用者自定義(沒有被系統所使用)(企業裡自定義)

超級使用者改密碼不需要知道原密碼也不會受到密碼強度,長度的限制(為所欲為)
普通使用者(在terminal中輸入passwd直接回車改密碼並且改不了其他使用者的密碼)修改密碼需要
1.知道原密碼
2.密碼不能和帳號名稱相似
3.密碼不能是純數字或純字母
4.密碼不能是有序的字母和數字的組合
如果一個超級使用者改密碼,新的密碼不符合要求,系統會提示但不會阻止,使用者還是可以用這個不符合要求的新密碼登陸,但是普通使用者在更改密碼的時候必須按照系統要求,否則會被系統阻止(emmm…只許州官放火,不許百姓點燈說的大概就是這個吧)
在這裡插入圖片描述
雖然提示密碼過短,但是還是設定成功了。

對於使用者密碼的管理

passwd 使用者名稱 #更改使用者密碼
在這裡插入圖片描述
passwd -S 使用者名稱 #顯示使用者密碼資訊
在這裡插入圖片描述
passwd -l 使用者名稱#凍結使用者(密碼前會出現兩個!,強度更高)
在這裡插入圖片描述
passwd -u 使用者名稱#解鎖使用者(將密碼前面的兩個!去掉,強度更高)
usermod -L 使用者名稱#凍結使用者(密碼前會出現一個!,強度較低用passwd -l 凍結的賬戶用usermod -U解鎖需要用兩次)
usermod -U 使用者名稱 #解鎖使用者(在密碼不為空時使用)
這時我們對一個用passwd -l鎖住的使用者(密碼前有兩個!)使用usermod -U命令,可以看到密碼前面去掉了一個!,但還是有一個!,處於鎖定狀態
在這裡插入圖片描述
我們這時再次使用usermod -U命令或者使用passwd -u命令都會去掉前面的最後一個!,成功解鎖使用者
在這裡插入圖片描述
事實證明,passwd命令對於密碼的管理比usermod命令強度更高
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
passwd -d 使用者名稱 #清空使用者密碼
清空使用者密碼不是鎖住,而是不需要密碼也能登陸
在這裡插入圖片描述
可以看到,harry使用者密碼欄為空,但是並沒有出現!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用者密碼最後一次被修改的時間
passwd -e 使用者名稱 #只能改成0
chage -d * 使用者名稱 #改成*
##當這一項為0時,使用者登入時強制改密碼(比如發給新生的銀行卡密碼,批量建立的新帳號密碼)
在這裡插入圖片描述
最短有效期
passwd -n * 使用者名稱 #每一次更新密碼後的天內使用者自己不能再次更改密碼
chage -m * 使用者名稱
在這裡插入圖片描述
表示harry在改過密碼的1天內不能再改密碼
在這裡插入圖片描述
可以看到“you must wait longer”
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最長有效期
passwd -x * #每一次更新的密碼最多使用
天(逾期凍結)
chage -M *
在這裡插入圖片描述
警告期
passwd -w * #在使用者密碼即將過期前的天傳送警告
chage -W *
在這裡插入圖片描述
非活躍天
passwd -i * #一旦使用者超過最長有效期未更新密碼,給予其
天的時間不凍結
chage -I *
在這裡插入圖片描述
帳號到期日
chage -E "--" 使用者名稱 #使用者在日會被凍結,例如2018-01-05
一旦到期,就會被凍結,沒有非活躍天(也是從1970年1月1日算起)
在這裡插入圖片描述

passwd命令和chage命令的許多功能都是一樣的,但是也有不一樣的地方,千萬不要記混了