Linux系統管理之用戶管理

Linux是個多用戶多任務的分時操作系統,所有要使用系統資源的用戶都必須先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。用戶的賬號一方面能幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也能幫助用戶組織文件,併爲用戶提供安全性保護。每個用戶賬號都擁有一個惟一的用戶名和用戶口令。用戶在登錄時鍵入正確的用戶名和口令後,才能進入系統和自己的主目錄。實現用戶賬號的管理,要完成的工作主要有如下幾個方面:

  • 用戶管理,包括用戶的添加、刪除、修改

  • 用戶組的管理,包括用戶組的添加,修改刪除

  • 密碼管理即用戶口令管理,包括密碼設置、修改密碼


一、用戶管理

用戶的管理主要包括:新增用戶、用戶相關屬性的修改(新的屬主、屬組、加入附加組)、用戶信息清除。

1、創建新用戶

創建用戶使用命令 useradd 命令,使用adduser也可以,使用adduser其實本質上依然使用的是useradd命令,他們是軟連接的關係,本文中統一使用 useradd。

a、useradd 格式及相關參數

格式:
useradd [ options ] 用戶名

選項:
-u uid:指定id號
-g Gid:指定基本組
-d  HOME_DIR 指定家目錄
-G group1 [,group2,...] 指定附加組 ,配合a使用,保留原始的組信息
-c "CIMMENT" 指定描述信息
-s shell 指定默認shell
-r 創建系統用戶 -s nologin
-o 配合-u選項,不檢查UID的唯一性 創建同UID的用戶,權限相同
-N 不創建石有組做主組,使用users組做主組
-D  修改/etc/default/useradd

例如:新建一個用戶python,其ID號爲2002,其家目錄爲/app/python,描述信息爲“My name is python”,非交互式方式登錄。

[root@centos7 ~]# useradd -u 2002 -c "My name is python" -d /app/python -s /sbin/nologin

之所以在創建用戶的時候有諸多選項主要是由和用戶相關的配置文件有關,/etc/passwd 配置文件中定義了一個用戶的相關屬性信息,每個信息之間以冒號“:”分割,共七個字段,分別是:用戶名、密碼位、UID、GID、描述信息、家目錄、使用的 shell 類型。

[root@centos7 ~]# cat /etc/passwd
 root:x:0:0:Superuser:/:
 daemon:x:1:1:System daemons:/etc:
 bin:x:2:2:Owner of system commands:/bin:
 sys:x:3:3:Owner of system files:/usr/sys:
 adm:x:4:4:System accounting:/usr/adm:
 uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
 ...後面的省略...

2.修改用戶屬性

修改用戶賬號就是根據實際情況更改用戶(chgrp是針對文件而言)的有關屬性,如用戶號、主目錄、用戶組、登錄Shell等。修改已存在用戶的信息使用usermod命令,格式如下:

格式:
usermod [ options ] [ args... ] 用戶

選項:
-u 新的屬主
-g 新的屬組
-aG 附加組,加a保留原來的屬組
-s 新的shell
-d home :新的家目錄
-c 修改註釋信息(chfn)
-l login_name:新的名字,其他信息都不變化
-L lock :指定用戶,在/etc/shadow密碼欄增加!
-U unlock :指定用戶,在/etc/shadow密碼欄減少!
-e YYY-MM-DD :指定用戶賬號過期日期
-f INACTIVE :設定非活動期限

usermod 命令只有超級管理員才能使用,或者通過 sudo 命令授權某個普通用戶來使用,沒有授權的普通用戶是不能使用的該命令的。

實例:

a、將用戶的 python 的 shell 類型改爲/bin/bash ,家目錄改爲/home/python,用戶組改爲tom(tom組已經存在)組。

[root@centos7 ~]# usermod -d /home/python -s /bin/nash -g tom python

b、將用戶tom的的主組改爲python

[root@centos7 ~]# usermod tom -g python

c、添加python的附加組爲 root

[root@centos7 ~]# usermod -aG root python  # -a參數作用爲保留原有的組,如果不加-a選項,python的組將變成root

3.刪除用戶

如果一個用戶賬號不再使用,便能從系統中刪除。刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還要刪除用戶的主目錄。刪除一個已有的用戶賬號使用 userdel 命令,格式如下:

格式:
[root@centos7 ~]# userdel [ options ] 用戶名

參數:
-r :刪除該用戶在/etc/passwd等文件中的條目,並且刪除其家目錄和郵件目錄
-f :強制刪除

例如:

[root@centos7 ~]# userdel -r python

此命令刪除用戶 python 在系統文件(主要是/etc/passwd,/etc/shadow,/etc/group等)中的記錄,同時刪除用戶的主目錄(/home/pythony 以及/var/spool/mail/python)。


二、用戶組管理

用戶組的管理和用戶的管理基本相同,只是針對的對象不同罷了,用戶管理是針對用戶,而用戶組管理針對的是用戶組。主要操作有:創建用戶組、修改用戶的用戶組、刪除一個組。

每個用戶都有一個用戶組,系統能對一個用戶組中的所有用戶進行集中管理。不同Linux系統對用戶組的規定有所不同,如Linux下的用戶屬於和他同名的用戶組,這個用戶組在創建用戶時同時創建。用戶組的管理涉及用戶組的添加、刪除和修改。組的增加、刪除和修改實際上就對/etc/group文件的更新。

用戶組(group)就是具有相同特徵的用戶(user)的集合體;比如有時我們要讓多個用戶具有相同的權限,比如查看、修改某一文件或執行某個命令,這時我們需要用戶組,我們把用戶都定義到同一用戶組,我們通過修改文件或目錄的權限,讓用戶組具有一定的操作權限,這樣用戶組下的用戶對該文件或目錄都具有相同的權限,這是我們通過定義組和修改文件的權限來實現的;

1.創建用戶組

增加用戶使用 groupadd 命令。

格式:
groupadd 選項 用戶組

選項:
 -g GID 指定新用戶組的組標識號(GID)。
 -o 一般和-g選項同時使用,表示新用戶組的GID能和系統已有用戶組的GID相同。
 -r 創建一個系統組
 
實例:
[root@centos7 ~]# groupadd g1
 此命令向系統中增加了一個新組g1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。
 
[root@centos7 ~]# groupadd -g 1001 g2
 此命令向系統中增加了一個新組group2,同時指定新組的組標識號是1001。

2.修改用戶組

修改用戶組使用 groupmod 命令。

格式:
groupmod 選項 用戶組

選項:
 -g GID 爲用戶組指定新的組標識號。
 -o 和-g選項同時使用,用戶組的新GID能和系統已有用戶組的GID相同。
 -n 新用戶組 將用戶組的名字改爲新名字
 
實例:
[root@centos7 ~]# groupmod -g 1002 g2  # 此命令將組g2的組標識號修改爲102。
[root@centos7 ~]# groupmod -g 10000 -n g3 g2  # 此命令將組g2的標識號改爲10000,組名修改爲g3。

如果一個用戶同時屬於多個用戶組,那麼用戶能在用戶組之間轉換,以便具有其他用戶組的權限。用戶能在登錄後,使用命令newgrp轉換到其他用戶組(這裏的切換是臨時切換,當用戶退出後,組主還是原來的組)。

[root@centos7 ~]# su - python
[python@centos7 ~]# newgrp g1  # 臨時切換主組

這條命令將當前用戶轉換到 g1 用戶組,前提條件是g1用戶組確實是該用戶的主組或附加組。類似於用戶賬號的管理,用戶組的管理也能通過集成的系統管理工具來完成;如果g1用戶組不是該用戶的附加組,在切換的時候需要提供密碼。

3.刪除用戶組

刪除用戶組使用 groupdel 命令,格式如下:

格式:
groupmod 選項 用戶組

選項:
 -g GID 爲用戶組指定新的組標識號。
 -o 和-g選項同時使用,用戶組的新GID能和系統已有用戶組的GID相同。
 -n 新用戶組 將用戶組的名字改爲新名字
 
實例:
 [root@centos7 ~]# groupmod -g 1002 g2  # 此命令將組g2的組標識號修改爲1002。
 [root@centos7 ~]# groupmod -g 10000 -n g3 g2  # 此命令將組g2的標識號改爲10000,組名修改爲g3

4.與用戶組相關的另外兩個命令 groupmems 和 groups

groupmems 命令可以管理組類的成員,例如:查看組中的成員,刪除組中的成員,清空組成員等;groups 命令主要是查看某用戶屬於哪個組。例如

#.*.-----------  ------------.*.#
格式:
groupmems  [ ptions ] -g 組名

選項:
-d user :從組中刪除指定用戶
-l :列出指定組中的用戶
-p :清空組成員

實例:
[root@centos7 ~]# groupmems -l -g g1  # 列出g1組中的成員
python tom
[root@centos7 ~]# groupmems -d tom -g g1 # 從組g1中刪除用戶tom
python
[root@centos7 ~]# groupmems -p -g g1  # 清空g1組中的成員

[root@centos7 ~]#

#.*.-----------  ------------.*.#

[root@centos7 ~]# groups tom  # 查看tom屬於那些組,結果發現tom只屬於自己,結果爲tom
tom
[root@centos7 ~]# groups python # 查看python屬於那些組
python g1 g2        # python不經屬於自己,還屬於g1 、g2 組

三、密碼管理

密碼管理我們使用 passwd 命令來實現,用法相對簡單,下面介紹其用法:

格式:passwd [ options ] user

選項:

  • -l  :鎖定用戶 加雙!!

  • -u :解鎖用戶

  • -e : 強制用戶下次登錄修改密碼

  • -n days :指定最短使用期限

  • -x maxdays :最大使用期限

  • -w warndays :提前多少天開始警告

  • -i inactivedays :非活動期限

  • --stdin :從標準輸入接收用戶密碼

實例:

host ~ ]#
[ root@localhost ~ ]#passwd python   # 直接改密碼,交互式方式
Changing password for user python.
New password:    # 輸入新密碼
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple   # 如果密碼設置太簡單,這裏會提示
Retype new password:  # 再次輸入密碼
passwd: all authentication tokens updated successfully.  # 設置成功提醒
[ root@localhost ~ ]#echo centos | passwd --stdin python # 利用管道非交互式設置密碼
Changing password for user python.
passwd: all authentication tokens updated successfully.
[ root@localhost ~ ]#

四、用戶與用戶組相關的配置文件

1、用戶配置文件/etc/passwd,/etc/shadown

(1)用戶信息配置文件 /etc/passwd

一個新的用戶一旦創建成功,那麼該用戶信息將添加到文件 /etc/passwd 中,該文件中定義了改用的基本屬性。該文件對所有用戶都是可讀的。

[ root@localhost ~ ]#
[ root@localhost ~ ]#cat /etc/passwd
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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
...後面省略...
[ root@localhost ~ ]#

該文件從左至右共有 7 個字段,分別是:

用戶名:口令:UID:GID:用戶描述信息:用戶家目錄:登錄Shell類型
  • 用戶名:代表用戶賬號的字符串。通常長度不超過8個字符,並且由大小寫字母和/或數字組成。登錄名中不能有冒號等特殊字符,因爲冒號在這裏是分隔符。用戶名以數字、字母或下劃線開頭。

  • 口令:一些系統中存放着加密後的用戶口令,雖然這個字段存放的只是用戶口令的加密串,不是明文,不過由於/etc/passwd文件對所有用戶都可讀,所以這仍是個安全隱患。因此,目前許多Linux系統都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特別的字符,例如“x”。

  • UID:即用戶標識號,該字段是一個 0-65535 的整數,系統內部用他來標識用戶。一般情況下他和用戶名是一一對應的。如果幾個用戶名對應的用戶標 識號是相同的,系統內部將把他們視爲同一個用戶,不過他們能有不同的口令、不同的主目錄及不同的登錄Shell等。0是終極用戶root的標識號,1~64由系統保留(不同版本的系統,保留數值不一樣),系統賬號的UID範圍爲1-499(CentOS 6)或1-999(CentOS 7)。

  • GID:即組標識號,該字段記錄的是用戶所屬的用戶組。他對應着/etc/group文件中的一條記錄。

  • 描述信息:該字段記錄着用戶的一些個人情況,例如用戶的真實姓名、電話、地址等,這個字段並沒有什麼實際的用途。在不同的Linux系統中,這個字段的 格式並沒有統一。在許多Linux系統中,這個字段存放的是一段任意的註釋性描述文字,用做finger命令的輸出。

  • 家目錄:即用戶的起始工作目錄,他是用戶在登錄到系統之後所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用 戶主目錄的名稱就是該用戶的登錄名。各用戶對自己的主目錄有讀、寫、執行(搜索)權限,其他用戶對此目錄的訪問權限則根據具體情況設置

  • 登錄SHELL: 用戶登錄後,要啓動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程式,即Shell。Shell是用戶和Linux系統之間的接口。 Linux的Shell 有許多種,每種都有不同的特點。常用的有sh(Bourne Shell),csh(C Shell),ksh(Korn   Shell),tcsh(TENEX/TOPS-20 type C Shell),bash(Bourne Again   Shell)等。系統管理員能根據系統情況和用戶習慣爲用戶指定某個Shell。如果不指定Shell,那麼系統使用bash爲默認的登錄Shell,即這個 字段的值爲/bin/bash。

(2)用密碼映射文件 /etc/shadown

/etc/shadow中的記錄行和/etc/passwd中的一一對應,他由 pwconv 命令根據/etc/passwd中的數據自動產生。他的文件格式和/etc/passwd類似,由若干個字段組成,字段之間用“:”隔開。這些字段是:

登錄名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:保留
  • 登錄名:是和/etc/passwd文件中的登錄名相一致的用戶賬號

  • 加密口令:字段存放的是加密後的用戶口令字。如果爲空,則對應用戶沒有口令,登錄時不必輸入口令;如果含有不屬於集合{ ./0-9A-Za-z }中的字符,則對應的用戶不能登錄。

  • 最後一次修改時間:表示的是從某個時刻起,到用戶最後一次修改口令時的天數。時間起點對不同的系統可能不相同。通常Linux系統中,這個時間起點是1970年1月1日。

  • 最小時間間隔:指的是兩次修改口令之間所需的最小天數。

  • 最大時間間隔:指的是口令保持有效的最大天數。

  • 警告時間:該字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。

  • 不活動時間:表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數,在這段時間裏,你可以登錄,不過登錄時就會讓你修改密碼。

  • 失效時間:字段給出的是個絕對的天數,如果使用了這個字段,那麼就給出相應賬號的生存期。期滿後,該賬號就不再是個合法的賬號,也就不能再用來登錄了。

2、和用戶組相關的文件/etc/group ,/gshadow

(1)用戶組信息配置文件:/etc/group

用戶組的所有信息都存放在/etc/group文件中。將用戶分組是Linux系統中對用戶進行管理及控制訪問權限的一種手段。每個用戶都屬於某個用戶組;一個組中能有多個用戶,一個用戶也能屬於不同的組。當 一個用戶同時是多個組中的成員時,在/etc/passwd文件中記錄的是用戶所屬的主組,也就是登錄時所屬的默認組,而其他組稱爲附加組。用戶要訪問屬 於附加組的文件時,必須首先使用 newgrp 命令使自己成爲所要訪問的組中的成員。用戶組的所有信息都存放在 /etc/group 文件中。此文件的格式也 類似於/etc/passwd文件,由冒號隔開若干個字段,這些字段有:

組名:口令:組標識號:組內用戶列表
  • 組名:是用戶組的名稱,由字母或數字構成。和/etc/passwd中的登錄名相同,組名不應重複。

  • 組口令:字段存放的是用戶組加密後的口令字。一般Linux系統的用戶組都沒有口令,即這個字段一般爲空,或是*。

  • 組標識號:和用戶標識號類似,也是個整數,被系統內部用來標識組。

  • 組內用戶列表:是屬於這個組的所有用戶的列表,不同用戶之間用逗號“,”分隔。這個用戶組可能是用戶的主組,也可能是附加組。

實例:

[ root@localhost ~ ]#cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
...省略...
[ root@localhost ~ ]#

(2)組口令文件 /etc/gshadow

/etc/gshadow文件中主要定義了用戶組的密碼口令等信息,主要包含:組名:組密碼:組id:組成員 4個字段。一般情況下,系統組是不設置密碼口令的,即爲空。

[ root@localhost ~ ]#cat /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
tty:::
disk:::
lp:::daemon
mem:::
kmem:::
wheel:::
mail:::mail,postfix

謝謝閱讀!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章