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文件里面的默認值所決定的
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 的數據吞噬設備