Linux是個多使用者多任務作業系統,所有要使用系統資源的使用者都必須向管理者申請一個賬号,然後以這個賬号的身份進入系統。使用者的賬号一方面能幫助管理者對使用系統的使用者進行跟蹤,并控制他們對系統資源的通路;另一方面也能幫助使用者組織檔案,并為使用者提供安全性保護。每個使用者賬号都擁有一個惟一的使用者名和使用者密碼。使用者在登入時輸入正确的使用者名和密碼後,才能進入系統和自己的主目錄。
實作使用者的管理,要完成的工作主要有如下幾個方面:
1、使用者賬号的添加、删除和修改。
2、使用者密碼的管理。
3、使用者組的管理。
首先Linux使用者類别有:
管理者,UID:root,0
系統使用者,UID:1-499(CentOS 6),1-999(CentOS 7)
登陸使用者,UID:>500(CentOS 6),>1000(CentOS 7)
使用者組類别:
管理者組,GID:root,0
系統組,GID:1-499(CentOS 6),1-1000(CentOS 7)
普通組,GID:>500(CentOS 6),>1000(CentOS 7)
Linux組的類别:
使用者的主要組(主組):每個有且僅有一個主要組,當使用者建立時,自動建立一個與使用者同名的組作為主要組。
使用者的附加組(輔助組):一個使用者可以屬于零個或多個輔助組。
CentOS6和7的預設UID和GID不同,這個是由于/etc/login.defs檔案裡面的預設值所決定的
<a href="http://s1.51cto.com/wyfs02/M00/85/51/wKioL1egC9bAeHcFAABGjOhu7ec016.png" target="_blank"></a>
Linux使用者群組的主要配置檔案
/etc/passwd:使用者及其屬性資訊(名稱、UID、主組ID等)
該檔案裡面一共有7項,包括
# [root@centos ~]# cat /etc/passwd
# root(使用者名):x(密碼):0(UID):0(GID):root(注釋):/root(家目錄):/bin/bash(預設SHELL)

假如把普通使用者的UID更改成0,該普通使用者會變成管理者賬号,因為在Linux系統裡面,識别管理者是否為管理者,就是檢視使用者的UID号碼,為0則為管理者,在生産環境中,可能會把管理者root的賬号改成其他名字,這樣做是以防止黑客攻擊root賬号來進行破解。
/etc/group:組及其屬性資訊
getent group [groupname]
# [root@centos7 ~]# cat /etc/group
# root(主組):x(組密碼):0(GID):gentoo(附加組的使用者清單)
組成員:将該組作為輔助組的成員清單。當成員先把該組當作輔助組,再轉成主要組時,不改變。當成員離開該組時,被删除。
/etc/shadow:使用者密碼及其相關屬性
# [root@centos 7~]# cat /etc/shadow
# root(使用者名):$6$(加密方式為sha512加密)5wrv8BV(随機數,俗稱鹽)$n3wljU/4.OUa/X.RYOGbE3SX72vay1Qo1ZXiUNZhuQJIB7fdzE87gaCQiuiOZbin(使用者密碼):17110(從1970-1-1到最近一次修改的時間經過了多少天來表示):0(最小存活期,密碼再過幾天可以被更改):99999(最大存活期,密碼過期時間):7(在正确登入時,密碼過期前提醒時間):(在正确登入時,密碼過期後幾天賬号會被鎖定):(從1970年1月1日算起,多少天後帳号失效):(保留)
上面這個設定了密碼顯示的使用者。
現在我們再建立一個使用者看看
[root@centos6 ~]# useradd wang
[root@centos6 ~]# tail -1 /etc/shadow
wang:!!:17015:0:99999:7:::
我們會看見賬号密碼那裡有兩個!!,這表示賬号被鎖定,沒有密碼的話不允許該使用者去登陸,假如有密碼,但是那裡還是有一個歎号的話,也表示賬号被鎖定,不對使用者進行解鎖的話該使用者将無法登陸。假如沒有歎号的話,該使用者可以沒有密碼的情況下面直接登陸。不過該功能隻能在CentOS 5版本和更老的版本可以實作,為了安全起見,從CentOS 6以後已經修正此問題。
/etc/gshadow:組密碼及其相關屬性
getent gshadow [groupname]
# cat /etc/gshadow
# root/(主組):(組密碼):(組管理者清單):gentoo(附加組的使用者清單)
當使用者不是該groupname的輔助組成員時,則需要輸入密碼,成功後臨時以主要組的身份加入該組。
當使用者是該groupname的輔助組成員時,無需輸入密碼,将臨時以主要組的身份加入該組,而其原有的主要組,臨時變為輔助組。
注意:為安全起見,現在一般都沒有組密碼,直接管理者指派,因為當其他使用者知道了組密碼,可以随意加入該組,這樣的話就顯得不安全。
使用者群組管理指令
使用者管理指令: useradd usermod userdel
組的管理指令: groupadd groupmod groupdel
使用者管理指令
useradd [options] username增加使用者
-u UID username 建立使用者時指定UID,(如不指定則Centos:500-60000, Centos7: 1000-60000)
-o 配合-u選項使用,不檢查UID的唯一性,可以與已存在的使用者的uid相同
-g groupname username 建立使用者時,指定主組為某個已存在的組(将不會再建立與使用者同名的組)
-G group1[,group2] username 指定使用者的輔助組,但GID要事先存在
-N username 不建立私用組做主組,使用使用者的主要組做主組
-d 目錄: 指定家目錄(確定指定的家目錄所在的上級目錄要存在,且家目錄本身不能存在)
-c 備注 建立使用者時指定描述資訊
-s shell:指定預設shell,應該指定使用/etc/shells檔案中出現的shell
-r 建立系統使用者 特點:CentOS 6: ID<500,CentOS 7: ID<1000 預設shell為/sbin/nologin
-D 顯示或更改預設設定 (預設值設定:/etc/default/useradd或/etc/login.defs檔案中)(此指令相當于cat / etc/default/useradd)
注:建立使用者時的諸多預設設定配置檔案為/etc/login.defs
useradd –D -s SHELL -d是指定使用者的家目錄和登入shell
注意:建立使用者不加-d和-s是是系統預設的家目錄(/home/qqq)和登入shell(/bin/bash)。
useradd –D –b BASE_DIR
useradd –D –g GROUP
[root@centos6 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
該指令,可以檢視到建立使用者時候的各項預設值
例如更改其他使用者預設的家目錄和預設SHELL之類等等的參數就在這裡面
/etc/skel 家目錄檔案的來源,在此檔案夾裡面建立檔案的話,建立新使用者的時候會連指定的新檔案一并建立
/etc/login.defs 一些使用者群組等建立的預設設定的檔案
usermod [options] username 修改指定使用者(跟useradd指令使用方法類似)
-u UID 更改使用者的UID
-g 組名 使用者名 更改使用者的主組
-G "" username 或 usermod -G primarygroup username 清空使用者所有的輔助組
-aG 組名,可以追加輔助組而不用覆寫之前的組
-s SHELL 更改使用者的預設SHELL
-c 注釋
-d home,跟-m同時用移動家目錄資料,并将家目錄移動到目的目錄并改名 (不會建立,隻修改/etc/passwd當中的家目錄資訊)
-m 移動家目錄資料,跟-d同時用
-l 新的名字,把使用者改名
-e 指定過期日期yyyy-mm-dd
-f days 指定密碼過期之後多少天帳戶過期
-L 鎖定指定使用者,在/etc/shadow 裡面加! (同以上/etc/shadow的解釋)
-U 解鎖使用者,将/etc/shadow 裡面的!号拿掉 (同以上/etc/shadow的解釋)
userdel [options] LOGIN 删除指定使用者
-r 連同家目錄和郵箱一起删除
組的管理指令
groupadd [options] groupname 添加指定組
-g:指定使用者的GID
-r groupname: 建立系統組 CentOS 6: ID<500 CentOS 7: ID<1000
groupmod [options] GROUP 修改指定組
-g newgid groupid: 修改組的GID
-n newgrpname oldgrpname: 修改組的組名
groupdel [options] GROUP 删除指定組
groupmems [options] [action] 更改和檢視組成員
groupmems -a user_name | -d user_name | [-g group_name] | -l | -p (CentOS 7才有此指令)
options:
-g, --group groupname 更改為指定組 (隻有root)(檢視組裡有哪些使用者)
-l -g 使用者名: 檢視指定使用者名組下面還有哪些使用者屬于此組
-a 要增加的組
切換使用者或以其他使用者身份執行指令
切換使用者的方式:
su UserName:非登入式切換,即不會讀取目标使用者的配置檔案,不改變目前工作目錄
su – UserName:登入式切換,會讀取目标使用者的配置檔案,切換至家目錄,完全切換
root su至其他使用者無須密碼;非root使用者切換時需要密碼
換個身份執行指令:
su [-] UserName-c 'COMMAND'
選項:-l –login:
su -l UserName相當于su-UserName
檢視使用者相關的ID資訊
id [OPTION]… [USER]
-u: 檢視使用者的UID
-g: 檢視使用者的GID
-G: 檢視使用者的Groups
-n: 檢視使用者的Name
修改使用者密碼政策
chage -l username 顯示帳戶的密碼資訊
-d 指定密碼的上次修改時間(yyyy-mm-dd)
-d 0 則強制使用者下次登入時必須修改密碼
-E 指定賬戶的過期時間
-I 密碼過期之後多少天帳戶過期
-m 設定最小存活時間
-M 設定最大存活時間
-W 設定密碼過期前的提醒時間
chage username 互動式修改使用者的密碼政策
示例:
chage -d 0 tom 下一次登入時強制重設密碼
chage -m 0 –M 42 –W 14 –I 7 tom
chage -E 2016-09-10 tom
getent passwd,shadow,gourp,gshadow USERNAME/GROUPNAME
直接檢視指定使用者/組裡面的passwd,shadow,gourp,gshadow檔案裡面的内容
其他指令總結:
chsh:修改預設的shell
chfn:修改使用者注釋
finger:檢視個人資訊
vipw:使用vim來編輯passwd檔案
vigr:使用vim來編輯group檔案
pwconv:pwconv指令用來開啟使用者的投影密碼
pwunconv:pwconv指令用來關閉使用者的投影密碼
Linux系統裡的使用者和群組密碼,分别存放在名稱為passwd和group的檔案中, 這兩個檔案位于/etc目錄下。因系統運作所需,任何人都得以讀取它們,造成安全上的破綻。投影密碼将檔案内的密碼改存在/etc目錄下的shadow和gshadow檔案内,隻允許系統管理者讀取,同時把原密碼置換為"x"字元,有效的強化了系統的安全性。
批量增加使用者和改密碼
newusers FILE(有格式的檔案) 批量加使用者 檔案格式 /etc/passwd 檔案的格式 root:x:0:0::/root:/bin/bash
ex. newusers user.txt
chpasswd FILE (有格式的檔案) 批量改密碼 USERNAME:PASSWORD
ex. cat p.txt |chpasswd
注意,按照以上步驟的方法批量添加完使用者和密碼以後,這些使用者的家目錄裡面并沒有配置,此時需要我們手動把這裡面的配置複制到它們的家目錄裡面
/etc/skel 這個檔案甲下面的檔案是關于使用者初始配置裡面的變量檔案之類
cp -r /etc/skel/.[^.]* /home/USERNAME
練習:
建立下面的使用者、組群組成員關系
名字為admins 的組
使用者natasha,使用admins 作為附屬組
使用者harry,也使用admins 作為附屬組
使用者sarah,不可互動登入系統,且不是admins 的成員,
natasha,harry,sarah密碼都是centos
groupadd admins
useradd -G admins natasha
useradd -G admins harry
useradd -s /sbin/nologin sarah
echo centos |passwd --stdin natasha > /dev/null
echo centos |passwd --stdin harry > /dev/null
echo centos |passwd --stdin sarah > /dev/null
/dev/null是一個特殊的裝置,就是一個資料黑洞,吞噬送往該裝置的所有資料,以後如果不想讓螢幕有顯示可以,會經常用到這個/dev/unll 的資料吞噬裝置
本文轉自 優果馥思 51CTO部落格,原文連結:http://blog.51cto.com/youguofusi/1965892