關(guān)于這部分內(nèi)容,阿銘在Linux系統(tǒng)日常管理工作中用得并不多,但并不代表這部分內(nèi)容不重要。畢竟Linux系統(tǒng)是一個多用戶系統(tǒng),每個賬號用來干什么,我們必須了如指掌,因為這涉及安全問題。
安裝完系統(tǒng)后,我們就一直使用root賬號來操作,其實這并不安全。因為root賬號權(quán)限太高,容易誤操作。阿銘建議你以后在工作中盡量避免直接使用root賬號登錄系統(tǒng),使用普通用戶也可以完成大部分工作。
5.1認(rèn)識/etc/passwd和/etc/shadow
這兩個文件可以說是Linux系統(tǒng)中最重要的文件之一。如果沒有這兩個文件或者這兩個文件出了問題,則無法正常登錄系統(tǒng)。下面咱們先來看看/etc/passwd文件,示例命令如下:
# cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
看到上面那條命令,你是不是有點不知所以呢?其實,head前面的符號|,我們稱為管道符,它的作用是把前面的命令的輸出再輸入給后面的命令。管道符在第11章中還會介紹,阿銘用得也是蠻多的,請掌握它的用法。
5.1.1/etc/passwd解說
/etc/passwd由:分割成7個字段,每個字段的具體含義如下所示。
-
第1個字段為用戶名(如第1行中的root就是用戶名),它是代表用戶賬號的字符串。用戶名中的字符可以是大小寫字母、數(shù)字、減號(不能出現(xiàn)在首位)、點或下劃線,其他字符不合法。雖然用戶名中可以出現(xiàn)點,但不建議使用,尤其是首位。另外,減號也不建議使用,容易造成混淆。
-
第2個字段存放的是該賬號的口令。這里為什么是x呢?早期的Unix系統(tǒng)口令確實存放在這里,但基于安全因素,后來就將其存放到/etc/shadow中了,這里只用一個x代替。
-
第3個字段為一個數(shù)字,這個數(shù)字代表用戶標(biāo)識號,也稱為uid。系統(tǒng)就是通過這個數(shù)字識別用戶身份的。這里的0就是root,也就是說我們可以修改test用戶的uid為0,那么系統(tǒng)會認(rèn)為root和test為同一個賬戶。uid的取值范圍是0~655 35(但實際上已經(jīng)可以支持到429 496 729 4),0是超級用戶(root)的標(biāo)識號,Rocky 8的普通用戶標(biāo)識號從1000開始。如果我們自定義建立一個普通用戶,你會看到該賬戶的標(biāo)識號是大于或等于1000的。
-
第4個字段也是數(shù)字,表示組標(biāo)識號,也稱為gid。這個字段對應(yīng)著/etc/group中的一條記錄,其實/etc/group和/etc/passwd基本類似。
-
第5個字段為注釋說明,沒有實際意義。通常記錄該用戶的一些屬性,例如姓名、電話、地址等。我們可以使用chfn命令來更改這些信息,這在稍后會介紹。
-
第6個字段為用戶的家目錄,當(dāng)用戶登錄時,就處在這個目錄下。root的家目錄是/root,普通用戶的家目錄則為/home/username,用戶家目錄是可以自定義的。比如,建立一個普通用戶test1,要想讓test1的家目錄在/data目錄下,只要將/etc/passwd文件中對應(yīng)該用戶那行中的本字段修改為/data即可。
-
最后一個字段為用戶的shell。用戶登錄后,要啟動一個進(jìn)程,用來將用戶下達(dá)的指令傳給內(nèi)核,這就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多種,而RHEL/Rocky的shell就是bash。查看/etc/passwd文件,該字段中除了/bin/bash,還有很多/sbin/nologin,它表示不允許該賬號登錄。如果想建立一個不允許登錄的賬號,可以把該字段改成/sbin/nologin,默認(rèn)是/bin/bash。
5.1.2/etc/shadow解說
/etc/shadow和/etc/passwd類似,由:分割成9個字段,示例命令如下:
# cat /etc/shadow |head -n 3
root:$6$Wu/W4eryssf9B3xQ$jgNuM24oQ9boSTUPaeJ/79GFjLUX912bSDu3ak40qJIxNj4/SpaK.JXguDYowM00mt3/5tvNIoBJ7RNcpH2K.107:::
bin1807899999::
daemon1807899999::
每個字段的含義如下所示:
-
第1個字段為用戶名,與/etc/passwd對應(yīng)。
-
第2個字段為用戶密碼,是該賬號的真正密碼。這個密碼已經(jīng)加密,但是有些黑客還是能夠解密的。所以,將該文件屬性設(shè)置為000,但root賬戶是可以訪問或更改的。使用命令ls -l查看該文件的權(quán)限,示例命令如下:
# ls -l /etc/shadow ---------- 1 root 689 12月 30 07:46 /etc/shadow
-
第3個字段為上次更改密碼的日期,這個數(shù)字以1970年1月1日和上次更改密碼的日期為基準(zhǔn)計算而來。例如,上次更改密碼的日期為2020年1月1日,則這個值就是365* (2020-1970)+(2020-1970)/4+1=18263。如果是閏年,則有366天。
-
第4個字段為要過多少天才可以更改密碼,默認(rèn)是0,即不受限制。
-
第5個字段為密碼多少天后到期,即在多少天內(nèi)必須更改密碼。例如,這里設(shè)置成30,則30天內(nèi)必須更改一次密碼;否則,將不能登錄系統(tǒng)。默認(rèn)是99999,可以理解為永遠(yuǎn)不需要改。
-
第6個字段為密碼到期前的警告期限。若這個值設(shè)置成7,則表示當(dāng)7天后密碼過期時,系統(tǒng)就發(fā)出警告,提醒用戶他的密碼將在7天后到期。
-
第7個字段為賬號失效期限。如果這個值設(shè)置為3,則表示密碼已經(jīng)到期,然而用戶并沒有在到期前修改密碼,那么再過3天,這個賬號便失效,即鎖定。
-
第8個字段為賬號的生命周期。跟第3個字段一樣,這個周期是按距離1970年1月1日多少天算的。它表示的含義是,賬號在這個日期前可以使用,到期后賬號將作廢。
-
最后一個字段作為保留用的,沒有什么意義。
上面關(guān)于密碼文件字段的介紹內(nèi)容偏多并不太容易記住,在這里阿銘提醒你,這部分內(nèi)容無需記住,只需要了解即可,因為在工作中我們幾乎用不到這些知識點。
5.2用戶和用戶組管理
上面介紹了/etc/passwd和/etc/shadow這兩個文件的具體含義,但這只是理論知識,實際上,對于在Linux下用戶和組如何創(chuàng)建、刪除以及更改其屬性,我們一無所知。
5.2.1新增組的命令groupadd
命令groupadd的格式為 groupadd [-g GID] groupname,示例命令如下:
# groupadd grptest1
# tail -n1 /etc/group
grptest11002:
如果不加-g選項,則按照系統(tǒng)默認(rèn)的gid創(chuàng)建組。跟uid一樣,gid也是從1000開始的。我們也可以按如下操作自定義gid:
# groupadd -g 1008 grptest2
# tail -n2 /etc/group
grptest11002:
grptest21008:
5.2.2刪除組的命令groupdel
有時,我們會有刪除組的需求,此時可進(jìn)行如下操作:
# groupdel grptest2
# tail -n2 /etc/group
slocate21:
grptest11002:
命令groupdel沒有特殊選項,但有一種情況不能刪除組,如下所示:
# groupdel user1
groupdel:不能移除用戶“user1”的主組
上例中,user1組中包含user1賬戶,只有刪除user1賬戶后才可以刪除該組。
5.2.3增加用戶的命令useradd
從字面意思上來看,useradd就是增加用戶,該命令的格式為useradd [-u UID] [-g GID] [-d HOME] [-M] [-s],其中各個選項的具體含義如下。
-
-u:表示自定義UID。
-
-g:表示使新增用戶屬于已經(jīng)存在的某個組,后面可以跟組id,也可以跟組名。
-
-d:表示自定義用戶的家目錄。
-
-M:表示不建立家目錄。
-
-s:表示自定義shell。
下面我們先來新建一個用戶test10,示例命令如下:
# useradd test10
# tail -n1 /etc/passwd
test10:x:1001:1001::/home/test10:/bin/bash
# tail -n1 /etc/group
test10:x:1001:
如果useradd不加任何選項,直接跟用戶名,則會創(chuàng)建一個跟用戶名同名的組。當(dāng)然,很多時候需要我們自己去定義uid、gid或者所屬的組,示例命令如下:
# useradd -u1005 -g 1006 -M -s /sbin/nologin user11
useradd:“1006”組不存在
# useradd -u1005 -g 1001 -M -s /sbin/nologin user11
# useradd -u1006 -g grptest1 user12
# tail -n2 /etc/passwd
user11:x:1005:1001::/home/user11:/sbin/nologin
user12:x:1006:1002::/home/user12:/bin/bash
# tail -n2 /etc/group
user1:x:1003:
test10:x:1001:
如果-g選項后面跟一個不存在的gid,則會報錯,提示該組不存在。剛剛上面說過,加上-M選項后,則不建立用戶家目錄,但在/etc/passwd文件中仍然有這個字段。如果你使用命令ls /home/user11查看一下,會提示該目錄不存在。所以,-M選項的作用只是不創(chuàng)建那個目錄。下面我們來查看user11的家目錄,會提示我們目錄不存在,示例命令如下:
# ls /home/user11
ls: 無法訪問/home/user11: 沒有那個文件或目錄
5.2.4刪除賬戶的命令userdel
命令userdel的格式為userdel [-r] username,其中-r選項的作用是,當(dāng)刪除用戶時,一并刪除該用戶的家目錄。下面我們先來看看user12的家目錄,示例命令如下:
# ls -ld /home/user12
drwx------ 2 user12 grptest1 62 1月 2 06:47 /home/user12
如果不加-r選項,則會直接刪除用戶user12,但保留其家目錄,如下所示:
# userdel user12
# ls -ld /home/user12
drwx------ 2 user12 grptest1 62 1月 2 06:47 /home/user12
此時user12的家目錄還在,那么我們再加上-r選項刪除user1用戶,如下所示:
# ls -ld /home/user1
drwx------ 2 user1 test10 62 12月 30
07:46 /home/user1
# userdel -r user1
# ls -ld /home/usre1
ls: 無法訪問/home/user1: 沒有那個文件或目錄
此時user1的家目錄已經(jīng)不復(fù)存在。
審核編輯 :李倩
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209327 -
命令
+關(guān)注
關(guān)注
5文章
683瀏覽量
22011
原文標(biāo)題:第6章 Linux系統(tǒng)用戶與用戶組管理(上)
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論