本節內容
useradd
userdel
usermod
groupadd
groupdel
用戶管理
為什么需要有用戶?
1. linux是一個多用戶系統
2. 權限管理(權限最小化)
用戶:存在的目錄是為了對系統中的資源做歸屬
密碼:存在的目的是為了對用戶做身份認證
用戶和用戶組
用戶組,在用戶組中可以包含一個或者多個用戶
方便對多個用戶進行授權操作
用戶管理相關文件
/etc/passwd:用戶基本信息
/etc/shadow:用戶密碼信息、過期時間等
/etc/group:用戶組信息
/etc/gshadow:用戶組密碼
/etc/default/useradd:創建用戶的默認配置信息
/etc/skel/:用戶家目錄模板
/etc/login.defs:全局用戶設定信息
/etc/passwd: 每行是一個用戶,用來記錄用戶的基本信息,每行的格式
account:password:UID:GID:GECOS:directory:shell
accout:用戶名
password:用戶密碼,密碼位置默認是x
UID:用戶身份id,用來唯一的標識一個用戶
GID:用戶組id,用來在系統中唯一的標識一個用戶組(這里指的是其基本組的組ID)
GECOS:用戶描述信息,可以空白,也可以隨意寫(useradd -c )
directory:用戶家目錄
shell:用戶所使用的shell類型
/bin/bash-->可以登錄系統
/sbin/nologin-->該用戶一定無法登錄系統
比如
root : x : 0 : 0 : newuser : /root : /bin/bash
用戶名 密 碼 用戶id 用戶所在組的id 描述信息 家目錄 shell類型
/etc/group
用戶組信息
linux,用戶一定是屬於一個組的
在linux中,創建用戶的時候,
會自動創建一個組,組名和組id都和所創建的用戶相同
而且,該用戶會自動加入到這個組中
c:x:1007:
組成:groupname:password:GID: [user1, user2.....]
groupname:組名
password:組密碼
GID:組id
[user1, user2.....]:改組中的用戶列表
概念
用戶的基本組(主組):當前用戶具有哪個組的權限
用戶的附加組:用戶額外屬於的組
zx
主組:gp02
附加組:gp01、gp03
/etc/default/useradd
定義創建用戶默認選項的文件
# useradd defaults file # useradd默認文件
GROUP=100 #表示可創建普通組
HOME=/home #用戶的家目錄建在/home中;用戶家目錄的默認創建地
INACTIVE=-1 #是否啟用帳號過期停權,-1表示不啟用;寬限天數,0及以下數皆為無效數字
EXPIRE= #帳號終止日期,不設置表示不啟用;帳號失效日期(如:20081212)
SHELL=/bin/bash #所用SHELL的類型;登錄后執行的程序
SKEL=/etc/skel #用戶家目錄中的環境文件,默認添加用戶的目錄默認文件存放位置;也就是說,當我們用adduser添加用戶時,用戶家目錄下的文件,都是從這個目錄中復制過去的;
CREATE_MAIL_SPOOL=yes #是否創建用戶郵件緩沖,yes表示創建
Linux中的用戶類別
可以登錄系統的用戶
管理員用戶:uid為0的用戶
普通用戶:就是可以登錄系統,但是沒有管理員權限的用戶
不能登錄系統的用戶:
系統用戶:用來運行一個程序,而不是用來登錄系統
各類用戶的id
管理員用戶:0
系統用戶:1-999
普通用戶:1000-60000(自定義uid最大4294967294)
系統用戶的特點
1. 因為不需要登錄,所以shell類型通常為/sbin/nologin
2. 系統用戶沒有家目錄
3. 系統用戶id通常是小於1000
Useradd命令
useradd [options] username
options:
-d, --home HOME_DIR:指定用戶家目錄
-c, --comment COMMENT:用戶說明信息
-e, --expiredate EXPIRE_DATE:指的賬號的過期時間,時間格式 YYYY/MM/DD
-g, --gid GROUP:指的用戶的基本組的組id
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指的用戶的附加組列表
-u,--uid UID:指的用戶的uid
-m, --create-home:創建用戶的時候自動創建用戶家目錄(默認就已經使用)
-M:不自動創建用戶家目錄
-o, --non-unique:通常和-u一起使用,用來讓兩個用使用相同的uid
-r, --system:創建一個系統用戶
-s, --shell SHELL:在創建用戶的時候,指定用戶的shell類型
(/bin/bash/,/sbin/nlogin)
創建一個系統用戶
# useradd -s /sbin/nologin -M -r ken
passwd命令
passwd [[options] username]
(如果不指定用戶名,那么就是修改當前用戶的密碼)
options:
--stdin
-l:鎖定用戶
-u:解鎖用戶
-d:刪除用戶密碼
-e:讓用戶密碼過期
echo “ 123“ | passwd --stdin ken
表示給ken用戶設置密碼123 (ken用戶必須存在)
設置密碼的原則
1. 長度要夠
2. 密碼復雜度(數字+字母+特殊符號)
Userdel命令
刪除用戶 userdel
userdel [options] username
options:
-r:在刪除用戶的時候,連同用戶數據一並刪除
創建用戶組 groupadd
groupadd [options] groupname
options:
-g GID:
-o:
刪除用戶組 groupdel
groupdel groupname
Shadow文件詳解
zxhk: $6$dgnPoZ0s$6xNKEWz : 17729 : 0 : 99999 : 7 : : :
第一段:用戶名:
第二段:加密后的密碼
第三段:上次修改密碼舉例元年經過的天數1970年1月1日(如果該字段空,意味着該用戶密碼被禁用)
第四段:密碼最短使用時間(0表示不限制)
第五段:密碼最長有效期(99999表示不限制)(如果第5的值小於第四段,那么用戶無法修改自己的密碼)
第六段:密碼到期前幾天開始發送告警,提示密碼即將過去,請立即修改
第七段:非活動期間,密碼到期后的寬限時間(登錄系統的時候必須先修改密碼,才能登錄)
第八段:密碼過期時間(也是舉例計算機元年經過的天數)(這里和前面的幾個時間沒有聯系)
第九段:保留字段
Usermod命令
usermod [options] username
options
-g, --gid GROUP: 更 新 使 用 者 新 的 起 始 登 入 群 組 。 群 組 名 須 已 存 在 。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]: 定 義 使 用 者 為 一 堆 groups 的 成 員 。 每 個 群 組 使 用 ,區 格 開 來
-u, --uid UID: 用 者 ID 值 。必 須 為 唯 一 的 ID 值
-s, --shell SHELL: 指 定 新 登 入 shell 。 如 此 欄 留 白 , 系 統 將 選 用 系 統 預 設 shell 。
-L, --lock: 鎖定用戶的密碼
-U : 解鎖用戶的密碼
-l, --login NEW_LOGIN : 變 更 使 用 者 login 時 的 名 稱 為 login_name 。
-e, --expiredate EXPIRE_DATE:加 上 使 用 者 帳 號 停 止 日 期 。 日 期 格 式 為 MM/DD/YY.
-d, --home HOME_DIR:更 新 使 用 者 新 的 登 入 目 錄 。
-m, --move-home:移動用戶家目錄至新的位置
id命令
作用:用來查看指定的用戶的信息(或判斷用戶是否存在)
格式:id [-u|-g|-G] username
選項
-u:僅僅顯示用戶uid
-g:僅僅顯示用戶gid
-G:僅僅顯示用戶全部組id
su命令(switch user)
作用:進行切換用戶
格式:su - 目標用戶
su命令和su -命令最大的本質區別就是:
前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;而后者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境才不會出現PATH環境變量錯誤。su切換成
root用戶以后,pwd一下,發現工作目錄仍然是普通用戶的工作目錄;而用su -命令切換以后,工作目錄變成root的工作目錄了。用echo $PATH命令看一下su和su -以后的環境變量有
何不同。以此類推,要從當前用戶切換到其它用戶也一樣,應該使用su -命令
練習
1. 創建用戶java,uid 1000 基本組是gp001 附加組 gp002 gp003
2. 修改用戶java,
將名稱修改為python,
將uid修改為 2000,
修改主組是cats,
shell類型改為 /sbin/nologin
讓該用戶在10月1號到期
答案:
1.
[root@ken ~] # useradd -u 1000 -g gp001 -G gp002,gp003 java
2.
[root@ken ~]# usermod -l python -u 2000 -g cats -s /sbin/nologin -e 10/01 java