瞭解掌握Linux系統用戶及用戶組管理,看這篇就夠了

Linux 操作系統 UNIX Bash 紅帽公司 CentOS 黑客 波波說運維 2019-04-05

概述

Linux/Unix是一個用戶、多任務的操作系統;在講Linux賬號及賬戶組管理之前,先簡單瞭解一下多用戶、多任務操作系統的基本概念。

瞭解掌握Linux系統用戶及用戶組管理,看這篇就夠了

linux系統用戶和權限相關示意圖


Linux的單用戶多任務

在Linux下,當你登錄後,你也可以同時開啟很多的服務任務和進程,而各自服務都會跑的很好卻對其他任務沒有任何影響,這種登錄一個用戶登錄系統執行多個服務任務和進程的情況,就稱為單用戶多任務。

Linux的多用戶多任務

有時可能是很多用戶同時用同一個系統,如公司幾十個運維人員,每臺機器都可以和被若干個運維人員登錄部署或解決相關故障問題,但並不是所有的運維人員都要做同一件事,所以就有了多任務、多用戶的情況。

值得注意的是:多用戶、多任務並不是大家同時擠到一起,在一臺機器的鍵盤和顯示器前來操作機器,多用戶可能是通過SSH客戶端工具等遠程工具等遠程登錄服務器來進行,比如對服務器的運程控制,只要具有相關用戶的權限,任何人都是可以上去操作訪問服務器。


/etc/passwd和/etc/shadow

這兩個文件可以說是linux系統中最重要的文件之一。如果沒有這兩個文件或者這兩個文件出問題,則你是無法正常登錄linux系統的。

1、/etc/passwd文件

# cat /etc/passwd | head
瞭解掌握Linux系統用戶及用戶組管理,看這篇就夠了

PS:”head” 前面的 “|” 是管道符,它的作用是把前面的命令的輸出再輸入給後面的命令。

‘/etc/passwd’ 由 ‘:’ 分割成7個字段,每個字段的具體含義是:

1)用戶名(如第一行中的root就是用戶名),代表用戶賬號的字符串。用戶名字符可以是大小寫字母、數字、減號(不能出現在首位)、點以及下劃線,其他字符不合法。雖然用戶名中可以出現點,但不建議使用,尤其是首位為點時,另外減號也不建議使用,因為容易造成混淆。

2)存放的就是該賬號的口令,為什麼是 ‘x’ 呢?早期的unix系統口令確實是存放在這裡,但基於安全因素,後來就將其存放到 ‘/etc/shadow’ 中了,在這裡只用一個 ‘x’ 代替。

3)這個數字代表用戶標識號,也叫做uid。系統識別用戶身份就是通過這個數字來的,0就是root,也就是說你可以修改test用戶的uid為0,那麼系統會認為root和test為同一個賬戶。通常uid的取值範圍是0~65535(但實際上已經可以支持到4294967294),0是超級用戶(root)的標識號,1~499由系統保留,作為管理賬號,普通用戶的標識號從500開始,如果我們自定義建立一個普通用戶,你會看到該賬戶的標識號是大於或等於500的。

4)表示組標識號,也叫做gid。這個字段對應著/etc/group 中的一條記錄,其實/etc/group和/etc/passwd基本上類似。

5)註釋說明,該字段沒有實際意義,通常記錄該用戶的一些屬性,例如姓名、電話、地址等等。不過,當你使用finger的功能時就會顯示這些信息的(稍後做介紹)。

6)用戶的家目錄,當用戶登錄時就處在這個目錄下。root的家目錄是/root,普通用戶的家目錄則為/home/username,這個字段是可以自定義的,比如你建立一個普通用戶test1,要想讓test1的家目錄在/data目錄下,只要修改/etc/passwd文件中test1那行中的該字段為/data即可。

7)shell,用戶登錄後要啟動一個進程,用來將用戶下達的指令傳給內核,這就是shell。Linux的shell有很多種sh, csh, ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,該字段中除了/bin/bash外還有/sbin/nologin比較多,它表示不允許該賬號登錄。如果你想建立一個賬號不讓他登錄,那麼就可以把該字段改成/sbin/nologin,默認是/bin/bash.

2、/etc/shadow文件

這個文件,和/etc/passwd類似,用 ‘:’ 分割成9個字段。

#cat /etc/shadow |head -n 3
瞭解掌握Linux系統用戶及用戶組管理,看這篇就夠了

每個字段的含義是:

1)用戶名,跟/etc/passwd對應。

2)用戶密碼,這個才是該賬號的真正的密碼,不過這個密碼已經加密過了,但是有些黑客還是能夠解密的。所以,該文件屬性設置為000,但是root賬戶是可以訪問或更改的。

[root@localhost ~]# ls -l /etc/shadow
---------- 1 root root 719 5月 10 09:02 /etc/shadow

3)上次更改密碼的日期,這個數字是這樣計算得來的,距離1970年1月1日到上次更改密碼的日期,例如上次更改密碼的日期為2012年1月1日,則這個值就是 ‘365 x (2012-1970) + (2012-1970)/4 + 1 = 15341’. 因為如果是閏年,則有366天。

4)要過多少天才可以更改密碼,默認是0,即不限制。

5)密碼多少天后到期。即在多少天內必須更改密碼,例如這裡設置成30,則30天內必須更改一次密碼,否則將不能登錄系統,默認是99999,可以理解為永遠不需要改。

6)密碼到期前的警告期限,若這個值設置成7,則表示當7天后密碼過期時,系統就發出警告告訴用戶,提醒用戶他的密碼將在7天后到期。

7)賬號失效期限。你可以這樣理解,如果設置這個值為3,則表示:密碼已經到期,然而用戶並沒有在到期前修改密碼,那麼再過3天,則這個賬號就失效了,即鎖定了。

8)賬號的生命週期,跟第三段一樣,是按距離1970年1月1日多少天算的。它表示的含義是,賬號在這個日期前可以使用,到期後賬號作廢。

9)作為保留用的,沒有什麼意義。


新增/刪除用戶和用戶組

1、新增一個組

命令 : groupadd

語法 : groupadd [-g GID] groupname

[root@localhost ~]# groupadd grptest1
[root@localhost ~]# tail -n1 /etc/group
grptest1:x:502:

不加 “-g” 選項則按照系統默認的gid創建組,跟用戶一樣,gid也是從500開始的。

[root@localhost ~]# groupadd -g 511 grptest2
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:502:
grptest2:x:511:

“-g” 選項可以自定義gid.

2、刪除組

命令 : groupdel

[root@localhost ~]# groupdel grptest2
[root@localhost ~]# tail -n3 /etc/group
testgroup:x:500:
user1:x:501:
grptest1:x:502:

該命令沒有特殊選項,但有一種情況不能刪除組:

[root@localhost ~]# groupdel user1
groupdel: cannot remove the primary group of user 'user1'

這是因為user1組中包含user1賬戶,只有刪除user1賬戶後才可以刪除該組。

3、增加賬戶

命令 : useradd

語法 : useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]

‘-u’ 自定義UID
‘-g’ 使其屬於已經存在的某個組,後面可以跟組id, 也可以跟組名
‘-d’ 自定義用戶的家目錄
‘-M’ 不建立家目錄
‘-s’ 自定義shell


[root@localhost ~]# useradd test10
[root@localhost ~]# tail -n1 /etc/passwd
test10:x:500:503::/home/test10:/bin/bash
[root@localhost ~]# tail -n1 /etc/group
test10:x:503:

‘useradd’ 不加任何選項直接跟用戶名,則會創建一個跟用戶名同樣名字的組。

[root@localhost ~]# useradd -u510 -g 513 -M -s /sbin/nologin user11
useradd: group '513' does not exist
[root@localhost ~]# useradd -u510 -g 502 -M -s /sbin/nologin user11
[root@localhost ~]# useradd -u511 -g grptest1 user12
[root@localhost ~]# tail -n2 /etc/passwd
user11:x:510:502::/home/user11:/sbin/nologin
user12:x:511:502::/home/user12:/bin/bash
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:502:
test10:x:503:

‘-g’ 選項後面跟一個不存在的gid會報錯,提示該組不存在。剛剛上面說過 ‘-M’ 選項加上後則不建立用戶家目錄,但是在/etc/passwd文件中仍然有這個字段。但是你使用 ls /home/user11 查看一下會提示該目錄不存在。所以 ‘-M’ 選項的作用只是不創建那個目錄。

[root@localhost ~]# ls /home/user11
ls: 無法訪問/home/user11: 沒有那個文件或目錄

4、刪除賬戶

命令 : userdel

語法 : userdel [-r] username

[root@localhost ~]# ls -ld /home/user12
drwx------ 3 user12 grptest1 4096 5月 11 07:12 /home/user12
[root@localhost ~]# userdel user12
[root@localhost ~]# ls -ld /home/user12
drwx------ 3 511 grptest1 4096 5月 11 07:12 /home/user12
[root@localhost ~]# ls -ld /home/test10/
drwx------ 3 test10 test10 4096 5月 11 07:09 /home/test10/
[root@localhost ~]# userdel -r test10
[root@localhost ~]# ls -ld /home/test10/
ls: 無法訪問/home/test10/: 沒有那個文件或目錄

‘-r’ 選項的作用只有一個,就是刪除賬戶的時候連帶賬戶的家目錄一起刪除。

5、創建/修改一個用戶的密碼

命令 : passwd

語法 : passwd [username]

等創建完賬戶後,默認是沒有設置密碼的,雖然沒有密碼,但該賬戶同樣登錄不了系統。只有設置好密碼後方可登錄系統。為用戶創建密碼時,為了安全起見,請儘量設置複雜一些。你可以按照這樣的規則來設置密碼:

  1. 長度大於10個字符;
  2. 密碼中包含大小寫字母數字以及特殊字符 ‘*’, ‘&’, ‘%’ 等;
  3. 不規則性(不要出現root, happy, love, linux, 7758520, 111111等等單詞或者數字);
  4. 不要帶有自己名字、公司名字、自己電話、自己生日等。
[root@localhost ~]# passwd
更改用戶 root 的密碼 。
新的 密碼:
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經成功更新。

“passwd” 後面不加username則是修改當前賬戶的密碼。如果你登陸的是root賬戶,後面可以跟普通賬戶的名字,意思是修改指定賬戶的密碼。

[root@localhost ~]# passwd user11
更改用戶 user11 的密碼 。
新的 密碼:
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經成功更新。

只有root才可以修該其他賬戶的密碼,普通賬戶只能修改自己的密碼,其他賬戶的密碼是不可以修改的。



關於linux系統用戶及用戶組管理就整理到這了,大家有什麼需要關注的內容也可以在下方留言,小編有空也會整理下的,後面會分享更多關於devops和DBA方面內容,感興趣的朋友可以關注下!!

瞭解掌握Linux系統用戶及用戶組管理,看這篇就夠了


相關推薦

推薦中...