Linux運維之Linux下用戶和組的管理

一、用戶賬戶介紹

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

Linux運維之Linux下用戶和組的管理

  • Linux的單用戶多任務

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

  • Linux的多用戶多任務

有時可能是很多用戶同時用同一個系統,如公司幾十個運維人員,每臺機器都可以和被若干個運維人員登錄部署或解決相關故障問題,但並不是所有的運維人員都要做同一件事,所以就有了多任務、多用戶的情況。值得注意的是:多用戶、多任務並不是大家同時擠到一起,在一臺機器的鍵盤和顯示器前來操作機器,多用戶可能是通過SSH客戶端工具等遠程工具等遠程登錄服務器來進行,比如對服務器的運程控制,只要具有相關用戶的權限,任何人都是可以上去操作訪問服務器。


  • linux系統用戶角色劃分

用戶在系統中是分角色的,在Linux系統中,由於角色的不同,權限和所完成的任務也不同;值得注意的是用戶的角色是通過UID和GID識別的;特別是UID,在運維工作中,一個UID是唯一標識一個系統用戶的賬號。


linux系統用戶從不同維度來看,分為:

  1. 根據賬號的位置分為:本地帳號、遠程(域)帳號、 LDAP、NIS。

本地帳號:顧名思義就是服務器本地的賬號,存在於服務器本身。

遠程(域)賬號:存在於遠程的linux服務器或者認證服務器。類似SSH登錄的賬號,ftp賬號等等。你需要通過這些賬號遠程登錄別的服務器去進行操作。

LDAP:是一種開源的解決方案,可以進行統一的管理,例如管理用戶的讀寫權限,目錄權限,訪問權限,等到後面我們詳細講解LDAP。


NIS:在一個大型的網域中,如果有多部Linux主機,而且需要每臺主機都設定相同的帳號與密碼時,是十分麻煩的。此時,如果能夠有一臺NIS主控制服務器(master server)來管理該網域中所有主機的帳號密碼,也是比較方便的。這裡不做贅述,感興趣的小夥伴可以上網搜索一下相關資料。


2.根據賬號的角色分為:超級用戶,程序用戶,普通用戶

超級用戶:Linux系統上的默認是root用戶,其UID和GID均為0。在每臺unix/linux操作系統中都是唯一且真實存在的,通過它可以登錄系統,可以操作系統中任何文件和命令, 擁有最高的管理權限。在生產環境,一般禁止root賬號遠程登錄SSH連接服務器,以加強系統安全。


程序用戶:真實用戶區分開來,這類用戶的最大特點是安裝系統後默認就會存在的,且默認情況不能登錄系統,它們是系統正常運行必不可少的, 他們的存在主要是方便系統管理,滿足相應的系統進程都文件屬主的要求。例如系統默認的bin、adm、nodoby、mail用戶等。由於服務器角色的不同, 有部分用不到的系統服務被禁止開機執行,因此,在做系統安全優化時,被禁止開機啟動了的服務對應的虛擬用戶也是可以處理掉的(刪除或註釋)。

普通用戶:一般為管理員賬號創建的用戶,權限比較小,也是為了系統的安全性創建的用戶。一般來說普通用戶都會限制比較嚴格的權限,例如/etc/ssh/sshd_config文件沒有讀取寫入權限,/var/log/下的log文件甚至不能讀取,本用戶不能寫入別的用戶的目錄或者文件等等。

超級用戶(root)  UID:0

          程序用戶 UID:1-499

          普通用戶 UID:500+

PS:多用戶系統從實際來說使得系統管理更為方便了。從安全角度來說,多用戶也更為安全,比如普通用戶abc下的某個文件不想讓其他用戶看到,只是設置一下該文件的權限為普通用戶abc一個用戶可讀可寫可執行的權限就行了,這樣以來只有普通用戶abc一個用戶可以對其私有文件進行操作,從而達到了保護每個用戶的私有數據安全。

系統中組的介紹

用戶(user)介紹

如果要使用系統資源,就必須向系統管理員申請一個賬號,然後通過這個賬號進入系統。這個賬號和用戶是同一個賬號,通過建立不同屬性的用戶,一方面,可以合理的利用和控制系統資源,另一方面也可以幫助用戶組織文件,提供對用戶文件的安全性保護。

每一個用戶都有一個唯一的用戶名和用戶口令,在登錄系統後,只有正確輸入了用戶名和密碼,才能登錄系統和相應的目錄。 在生產環境中,一般會為每一個有權限管理服務器的運維人員分配一個獨立的普通用戶賬號及8位以上(包含數字、字母)以上的密碼。

如zgy普通用戶,該人員只能通過建立的這個賬號登錄到系統中進行維護,當需要超級用戶權限時,可以通過"sudo 命令名"方式來執行僅有root權限才允許執行的權限。當然,sudo權限要儘量的小。還有,當運維人數不多時(如2-3個),也可以直接su - 切換到超級用戶root下,再執行相應的維護工作。特別提醒,維護時,如果不需要root權限,就不要進入root用戶下操作,以減少誤操作對系統帶來的損失。

用戶組(group)介紹

簡單的說,linux系統中的用戶組(group)就是具有相同特性的用戶(user)集合; 有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件或目錄,如果不用用戶組,這種需求在授權時就很難實現。如果使用用戶組就方便多了,只需要把授權的用戶都加入到同一個用戶組裡,然後通過修改該文件或目錄的對應的用戶組的權限,讓用戶組具有符合需求的操作權限,這樣用戶組下的所有用戶對該文件或目錄就會具有相同的權限,這就是用戶組的用途。 將用戶分組是linux系統中對用戶進行管理及控制訪問權限的一種手段,通過定義用戶組,在很大程度上簡化了運維管理工作。 實際上,在日常生活中,對人類的分組也是無處不在的,大到國家,小到公司,家庭,學校,班級等等都類似linux中用戶組的概念,而其中的成員就類似linux用戶組中用戶的概念。

linux系統組從不同維度來看,分為:

根據組的位置:同樣可以分為本地組、遠程(域)組。 LDAP,NIS。

這裡不在敘述他們的意義。

根據組的角色:超級用戶組(root)  UID:0

       程序用戶組 UID:1-499

       普通用戶 組 UID:500+

PS:如果不特殊指定的話,創建用戶後,每一個用戶都有一個同名的組


關於用戶的相關配置文件

Linux系統中下的賬戶文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四個文件。

與用戶相關的配置文件

/etc/passwd:用戶的配置文件, 保存用戶賬戶的基本信息

/etc/shadow:用戶影子口令文件,用於存放加密後的密碼

/etc/passwd文件中每行定義一個用戶賬號,有多少行就表示多少個賬號,在一行中可以清晰的看出,各內容之間又通過”:”號劃分了7個字段,這7個字段分別定義了賬號的不同屬性,passwd文件實際內容如下:

例如:

Linux運維之Linux下用戶和組的管理

這7個字段各代表什麼意思呢?

root:用戶名

x: 密碼佔位符

0: UID

0: GID

root : 用戶描述

/root: 用戶主目錄(bash中"~"代表的那個)

/bin/bash: 登錄後使用的shell

Linux中的偽用戶


Linux運維之Linux下用戶和組的管理

nobody為偽用戶,常用的程序使用偽用戶的有NFS。

還有Nginx,如果不修改配置文件時運行nginx web服務器默認使用nobody用戶。


Linux運維之Linux下用戶和組的管理


查看主機上有多少可以使用的shell(s)

查看/etc/shells即可


Linux運維之Linux下用戶和組的管理

Linux用戶管理命令

Linux是一個多用戶多任務的操作系統,有著很豐富的用戶管理工具,這些工具包括用戶的查詢。添加、修改、以及不同用戶之間相互切換等;通過這些工具,我們可以簡單、方便、安全的進行用戶管理工作。


添加用戶的命令useradd和adduser,這兩個命令所能達到的效果是一樣的。當然除了useradd和adduser命令意外,我們還能通過修改用戶配置文件/etc/passwd和/etc/group及手動創建的辦法來直接添加用戶,不過不推薦這個方法。這裡推薦大家統一使用useradd命令。

useradd 添加賬戶

當使用useradd命令不加參數選項,後面直接跟所添加的用戶名時,系統首先會讀取配置文件/etc/login.defs和/etc/default/useradd文件中所配置的信息建立用戶的家目錄,並複製/etc/skel中的所有文件(包括隱藏的環境配置文件)到新用戶的家目錄中。


useradd語法:

<code>[root@localhost ~]# man useradd
NAME
useradd - create a new user or update default new user information
SYNOPSIS
useradd [options] LOGIN
useradd -D
useradd -D [options]/<code>


描述:

新賬號建立

當不加-D參數時,useradd指令使用命令列來指定新賬號的設定值和使用系統上的預設值(指前文提到的/etc/login.defs和/etc/default/useradd等配置文件)。新用戶賬號將產生一些系統檔案,如用戶目錄的建立,拷貝起始檔案等,這些均可以利用命令列選項指定。

下面是具體的選項:


<code>  -c comment :新賬戶的password的說明欄   
   -u:  指定 UID 標記號。這個值是唯一的,除非用-o選項。數字不可為負值
-d:  指定宿主目錄,缺省為 /home/用戶名
-e:  指定帳號失效時間
  -f:   賬戶過期幾天後永久停權。
-g:  指定所屬的基本組(組名或GID)
-G:  指定所屬的附加組(組名或GID)
  -m:   用戶目錄如不存在則自動建立。
-M:  不為用戶建立並初始化宿主目錄。優先於/etc/login.defs文件的設定。
  -n:   默認情況下,用戶的用戶組和用戶的名稱會相同,如果命令加了-n參數,就不會生成和用戶同名的用戶組

  -r:   用來建立系統賬戶。系統賬戶的UID會比定義在/etc/login.defs的UID_MIN來的小。
-s:  指定用戶的登錄Shell
  /<code>

當使用useradd命令不加參數選項,後面直接跟所添加的用戶名時,系統首先會讀取配置文件/etc/login.defs和/etc/default/useradd中所定義的參數或規則,根據設置的規則添加用戶,同時會向/etc/passwd和/etc/group文件內添加新建用戶和用戶組記錄。

當然/etc/passwd和/etc/group的加密資訊文件/etc/shadows和/etc/gshadow也會同步生成記錄,同時系統還會根據/etc/default/useradd文件中所配置的信息建立用戶的家目錄,並複製/etc/skel中的所有文件(包括隱藏的環境配置文件)到新用戶的家目錄中。


改變新建用戶的預設值 :

當執行useradd命令或加-D選項時,可以更改新建用戶的默認配置值,或是由命令列編輯的方式更新預設值

為了方便讀者閱讀查看,依然用表格的方式把useradd加-D選項後,命令後面依然可使用的參數選項展現給大家如下所示

Linux運維之Linux下用戶和組的管理

Linux運維之Linux下用戶和組的管理


檔案

<code>/etc/passwd -使用者賬號資訊
/etc/shadow -使用者賬號資訊加密
/etc/group -群組資訊
/etc/default/useradd -定義資訊
/etc/login.defs -系統廣義設定
/etc/skel -內含定義檔的目錄
SEE ALSO
chfn(1), chsh(1), passwd(1), crypt(3), groupadd(8), groupdel(8),
groupmod(8), login.defs(5), userdel(8), usermod(8)./<code>

useradd實例:

實例3:不加任何參數,直接執行useradd usesname添加用戶

<code>[root@localhost ~]# useradd zhonggy
[root@localhost ~]# ls -ld /home/zhonggy/
drwx------ 3 zhonggy zhonggy 4096 May 7 09:17 /home/zhonggy//<code>


在這個例子中,我們添加了一個名為zhonggy系統用戶,當查看/home/目錄時,會發現系統自動建立了一個zhonggy的目錄。

我們再來看/etc/passwd文件中有關新用戶zhonggy的記錄:

<code>在這個例子中,我們添加了一個名為zhonggy系統用戶,當查看/home/目錄時,會發現系統自動建立了一個zhonggy的目錄。
我們再來看/etc/passwd文件中有關新用戶zhonggy的記錄:/<code>

#行中的505:505就是/etc/login.defs文件內容預設的。

提示:有很多的朋友習慣先通過cat來讀取/etc/passwd文件,然後再通過grep來抽取zhonggy字段,也可以達到同樣的目的,但在寫法上就遜色很多了。如下:

<code>[root@localhost ~]# cat /etc/passwd | grep zhonggy
zhonggy:x:505:505::/home/zhonggy:/bin/bash

[root@localhost ~]# finger zhonggy #使用finger命令來查看用戶信息
Login: zhonggy Name: (null)
Directory: /home/zhonggy Shell: /bin/bash
Never logged in.
No mail.
No Plan./<code>

從上文過濾出的zhonggy用戶記錄來看,用戶的UID和GID分別為505,並且zhonggy的家目錄為/home/zhonggy,所對應的shell為bash


接下來,我們再看看/etc/shadow、/etc/group和/etc/gshadow文件,是不是也有與zhonggy用戶有關的記錄:

<code>[root@localhost ~]# grep zhonggy /etc/shadow
zhonggy:!!:16562:0:99999:7:::
You have new mail in /var/spool/mail/root
[root@localhost ~]# grep zhonggy /etc/group
zhonggy:x:505:
[root@localhost ~]# grep zhonggy /etc/gshadow
zhonggy:!::/<code>


提示:根據上文結果,我們發現/etc/shadow、/etc/group和/etc/gshadow幾個文件都存在和zhonggy用戶相關的記錄。

我們還可以查看/etc/default/useradd 和/etc/login.defs兩個文件的規則,看一下zhonggy用戶的增加是不是符合這兩個配置文件預設的值。最後可以查看/home/zhonggy目錄下的文件,是不是和/etc/skel目錄下的一樣。


實例 4:useradd的-g、-u參數,執行useradd [參數] username 添加用戶

<code>[root@localhost ~]# groupadd -g 801 sa
#創建用戶組sa制動gid 801,這個是groupadd命令的用法
[root@localhost ~]# useradd -g sa -u 901 oldboy1
#創建用戶oldboy1屬於指定組sa,指定uid901,用戶名oldboy1
[root@localhost ~]# id oldboy1 #通過id命令查看結果
uid=901(oldboy1) gid=801(sa) groups=801(sa) context=root:system_r:unconfined_t:SystemLow-SystemHigh
生產場景中的創建賬戶的完整命令例子:
groupadd -g 801 sa

seradd -g sa -u 901 ett
echo “6fuwrfwq3e” |passwd ett --stdin
echo “ett ALL=(ALL) NOPASSWD:ALL” >>/etc/sudoers
visudo -v
history -c/<code>


實例5:useradd的——M、-s參數的例子

<code>[root@localhost ~]# useradd oldboy2 -M -s /sbin/nologin  
#-M表示不創建家目錄,-s指定用戶登錄後的shell,這裡是/sbin/nologin表示禁止登陸。此例在生產環境中部署apache,mysql,nagios服務時經常用到。
[root@localhost ~]# ls -ld /home/ | grep oldboy2
[root@localhost ~]# grep oldboy2 /etc/passwd
oldboy2:x:902:902::/home/oldboy2:/sbin/nologin/<code>


實例6:useradd 的-e參數的例子

在本例中,我們主要來看看-e參數,這個參數還是比較重要的,是設定用戶的賬號什麼時候過期,在生產場景中,員工離職或者一些臨時有需求的用戶或者需要有時間限制的一些用戶,可能需要這個選項。

groupadd 添加組賬戶

<code>-g    指定gid。除非指定-o選項,否則ID值必須是唯一的數字,不能為負值。如果布指定-g參數,則預設值會從500開始。 

-r  建立系統用戶組。GID值會比/etc/login.defs中定義的UID_MIN小。
-f  新增一個賬戶,強制覆蓋已經存在的用戶組賬戶。
/<code>


passwd 設置密碼

普通用戶和超級用戶都可以運行passwd命令,但普通用戶只能更改自身的用戶密碼。超級用戶則可以設置或修改所有用戶的密碼

當直接passwd命令後面不接任何參數或用戶名時,則表示修改當前登陸用戶的密碼。

<code>   -d    清空密碼,僅root能操作
  -f  強制操作,僅root能操作
  -k  保留即將過期的用戶在期滿後仍能使用

-l 鎖定用戶賬戶;鎖定用戶無權更改其密碼,僅root能操作
-S 查看用戶賬戶的狀態
-u 解鎖用戶賬戶;僅root能操作
--stdin 從標準輸入取密碼/<code>

Linux運維之Linux下用戶和組的管理

Linux運維之Linux下用戶和組的管理

Linux運維之Linux下用戶和組的管理

修改用戶密碼有效期:chage

語法:

<code>格式:chage [選項] 用戶名/<code>

常用命令選項:

<code> -d:將最近一次密碼設置時間設置為"最近時間"
-E:指定賬號過期時間,YYYY-MM-DD
-I:指定當密碼失效後多少天鎖定賬號;
-l:列出密碼有效期信息
-m:指定密碼的最小天數
-M:指定密碼的最大天數
-W:將過期警告天數設置為"警告天數"/<code>

id:查看用戶的帳號屬性信息

<code>    -u:只看UID
-g:只看gid
-G:只看GID
-n:看名字,與其他選項連用/<code>

userdel 刪除賬戶

<code> -r    連同主目錄一起刪除/<code>

添加組賬號groupadd命令

<code>格式:groupadd [-g GID] 組名/<code>

選項:

<code>-g gid:指定組ID號。
-o:允許組ID號,不必惟一。
-r:添加系統組,低於499系統賬號。/<code>

刪除用戶組groupdel命令


<code>格式:groupdel 組名
刪除的目標組不能是用戶的基本組/<code>

gpasswd命令 管理組

語法:

<code>格式:gpasswd [選項] 組名/<code>

選項:

<code>    -A    定義組管理員列表
-a 添加組成員,每次只能加一個
-d 刪除組成員,每次只能刪一個
-M 定義組成員列表,可設置多個,用“,”分開——定義的組成員必須是已存在用戶的
-r 移除密碼/<code>


切換所屬基本組newgrp命令

<code>newgrp GRPNAME  exit  //臨時切換屬組/<code>

查看用戶的組信息

groups 命令

<code>格式:groups [用戶名]/<code>

groupmod:更改群組和名稱

<code>  -g GID
-n GRPNAME/<code>

修改用戶賬號的屬性

語法:

<code>格式:usermod [選項] 用戶名/<code>

常用命令選項:

<code>-c:指定註釋信息
-d -m:-d一般跟-m使用,既指定新的家目錄位置,又移動其此前的文件至新的家目錄當中
-e:指定賬號失效時間
-g:指定所屬的基本組(組名或GID)
-a -G GID:不使用-a選項,會覆蓋此前的附加組;
-l:更改用戶賬號的登陸名稱
-L:鎖定用戶賬號
-s:指定用戶登錄Shell
-u:指定UID標誌號
-U:解鎖用戶賬號/<code>

chsh: 修改用戶的默認shellchfn:修改註釋信息

喜歡我的文章可以關注我,以後會有越來越多的文章發佈,希望可以幫到你~


分享到:


相關文章: