本節內容
用戶管理
1. 為什么需要用戶?
1.linux是一個多用戶系統
2.權限管理(權限最小化)
2. 用戶相關文件
/etc/passwd -->用戶基本信息
/etc/shadow -->密碼信息
/etc/default/useradd -->保存了useradd的默認配置
/etc/login.defs -->保存了全局信息
/etc/group -->組信息
/etc/gshadow-->組密碼
/etc/skel-->用戶家目錄模板
3. 用戶信息
三類用戶:
超管root(0)
系統用戶(運行服務,通常不許登錄系統1-999)
普通用戶(1000-60000)
4. useradd:添加用戶
-g: 指定主組
-G:指定附加組
-u: 指定uid
-r: 創建系統用戶
-s: 指定shell類型(/bin/bash,/sbin/nologin)
-c: 添加描述信息
5. usermod:修改用戶信息
-g: 指定主組
-G:指定附加組
-u: 指定uid
-r: 創建系統用戶
-s: 指定shell類型(/bin/bash,/sbin/nologin)
-l: 改名
-e: 過期時間(/)
6. passwd:修改用戶密碼
passwd 用戶名
echo "用戶密碼" | passwd --stdin "用戶名"
7. groupadd:添加組
8. userdel:刪除用戶
-r: 刪除用戶家目錄
9. groupdel:刪除組
10. id: 查看用戶信息
11. su:切換用戶
一、用戶管理
為什么需要有用戶?
1. linux是一個多用戶系統
2. 權限管理(權限最小化)
用戶:存在的目的是為了對系統中的資源做歸屬
密碼:存在的目的是為了對用戶做身份認證
用戶和用戶組
用戶組,在用戶組中可以包含一個或者多個用戶(用戶組是為了方便對多個用戶進行授權操作)
二、用戶管理相關文件
/etc/passwd:用戶基本信息
/etc/shadow:用戶密碼信息、過期時間等
/etc/group:用戶組信息
/etc/gshadow:用戶組密碼
/etc/default/useradd:創建用戶的默認配置信息
/etc/skel/:用戶家目錄模板
/etc/login.defs:全局用戶設定信息
1、/etc/passwd:用戶基本信息
1. 該文件中一行就是一個用戶!
2. 統計當前系統中有多少用戶:
[root@renyz08 ~]# cat /etc/passwd | wc -l
20
3. passwd文件詳解
account:password:UID:GID:GECOS:directory:shell
accout:用戶名
password:用戶密碼,密碼位置默認是x(用x進行密碼占位)
UID:用戶身份id,用來唯一的標識一個用戶
GID:用戶組id,用來在系統中唯一的標識一個用戶組(這里指的是其基本組的組ID)
GECOS:用戶描述信息,可以空白,也可以隨意寫(useradd -c )
directory:用戶家目錄(/root用戶家目錄,其他用戶是在/home)
shell:用戶所使用的shell類型
shell類型:
/bin/bash-->可以登錄系統
/sbin/nologin-->該用戶一定無法登錄系統
root : x : 0 : 0 : newuser : /root : /bin/bash
用戶名 密 碼 用戶id 用戶所在組的id 描述信息 家目錄 shell類型
比如:
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
2、/etc/group:用戶組信息
在Linux系統中創建每個用戶時,將自動創建一個與其同名的基本用戶組,而且這個基本用戶組只有該用戶一個人。如果該用戶以后被歸納入其他用戶組,則這個其他用戶組稱之為擴展用戶組。一個用戶只有一個基本用戶組,但是可以有多個擴展用戶組
概念(主組和附加組):
用戶的基本組(主組):當前用戶具有哪個組的權限
用戶的附加組:用戶額外屬於的組
root:x:0:
root 組名
x 用x進行密碼占位(組密碼)
0 GID(組ID)
最后還有一位表示有哪些用戶在此組內
如下:表示ken用戶在root組內
root:x:0:
renyz08:x:1000:renyz08
3、/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中的用戶類別
超級管理員(root) uid 0
系統用戶 uid 1-999 運行服務
普通用戶 uid 1000+ (1k-60k) 工作中用到的用戶
注意:uid的划分只是一種規范,可以自己隨意指定
系統用戶:
1. 運行服務程序的
2. 一般不讓系統用戶登錄系統
3. 系統用戶無家目錄
創建用戶時默認的shell類型為/bin/bash
面試題:系統用戶都是不可以登錄系統的嗎?
錯誤的。在linux當中創建用戶的時候默認使用的shell類型為/bin/bash是可登錄系統的,如果沒有指定不可登錄系統的shell類型的話。系統用戶是可以登錄我們的系統的。只是說在工作中需要不讓系統用戶登錄系統,我們在創建系統用戶的時候指定系統用戶的shell類型不可登錄系統。
四、useradd命令
作用:創建用戶
使用格式:
useradd options... username
選項:
-d, --home HOME_DIR:指定用戶家目錄
-c, --comment COMMENT:用戶說明信息(添加描述信息)
-e, --expiredate EXPIRE_DATE:指的賬號的過期時間,時間格式 YYYY/MM/DD
-g, --gid GROUP:指的用戶的基本組的組id(主組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)
例子1:創建普通用戶ren
[root@renyz08 ~]# useradd ren
[root@renyz08 ~]# tail -1 /etc/passwd
ren:x:1001:1001::/home/ren:/bin/bash
例子2:創建用戶並添加描述信息
[root@renyz08 ~]# useradd -c "Hello linux" ren1
[root@renyz08 ~]# tail -1 /etc/passwd
ren1:x:1002:1002:Hello linux:/home/ren1:/bin/bash
例子3:創建用戶並指定用戶ID為1010
[root@renyz08 ~]# useradd -u 1010 ren2
[root@renyz08 ~]# tail -1 /etc/passwd
ren2:x:1010:1010::/home/ren2:/bin/bash
例子4:創建用戶並指定主組ID為0 #指定組的時候組必須存在!
[root@renyz08 ~]# useradd -g 0 ren3
或者
[root@renyz08 ~]# useradd -g root ren3
[root@renyz08 ~]# id ren3
uid=1011(ren3) gid=0(root) 組=0(root)
例子5:創建用戶並指定附加組ID為0 #指定組的時候組必須存在!
[root@renyz08 ~]# useradd -G 0 ren4
[root@renyz08 ~]# id ren4
uid=1012(ren4) gid=1012(ren4) 組=1012(ren4),0(root)
例子6:創建系統用戶
[root@renyz08 ~]# useradd -r -s /sbin/nologin ren5
[root@renyz08 ~]# tail -1 /etc/passwd
ren5:x:997:995::/home/ren5:/sbin/nologin
1.可以查看用戶ID,發現是1000以內
2.用戶家目錄不會創建
五、passwd命令
作用:設置用戶密碼
選項:
-l 鎖住密碼(lock)
-u 解鎖密碼(unlock)
-d 刪除用戶密碼(delete)
-e 使用戶密碼過期(expire到期、終止)
--stdin 從標准輸入獲取密碼(standard input)
例子1:給用戶創建密碼
[root@renyz08 ~]# passwd ren
更改用戶 ren 的密碼 。
新的密碼:
無效的密碼: 密碼少於 8 個字符
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
Changing password for user ren.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
注意:root登錄到普通用戶是不需要輸入密碼的!
[root@renyz08 ~]# su - ren
[ren@renyz08 ~]$ su – root #從普通用戶切換到root是需要輸入密碼的
Password:
[ren@renyz08 ~]$ exit #輸出exit退回上一次登錄的用戶
logout
[root@renyz08 ~]#
例子2:鎖住用戶密碼
[root@renyz08 ~]# passwd -l ren
Locking password for user ren.
passwd: Success
[root@renyz08 ~]# su - ren1
[ren1@renyz08 ~]$ su - ren #普通用戶在此登錄輸入密碼之后會提示認證失敗!
Password:
su: Authentication failure鑒定故障
例子3:解鎖用戶密碼
[root@renyz08 ~]# passwd -u ren
解鎖用戶 ren 的密碼。
passwd: 操作成功
[root@renyz08 ~]# su - ren1
上一次登錄:四 7月 11 19:29:01 CST 2019pts/0 上
[ren1@renyz08 ~]$ su – ren #再次輸入密碼登錄發現可以正常登錄
密碼:
上一次登錄:四 7月 11 19:28:01 CST 2019pts/0 上
最后一次失敗的登錄:四 7月 11 19:29:46 CST 2019pts/0 上
最有一次成功登錄后有 1 次失敗的登錄嘗試。
[ren@renyz08 ~]$
例子4:讓用戶密碼過期
[root@renyz08 ~]# passwd -e ren
正在終止用戶 ren 的密碼。
passwd: 操作成功
[ren1@renyz08 ~]$ su – ren
Password:
You are required to change your password immediately (root enforced)
Changing password for ken.
您需要立即更改密碼(root 強制)
為 ren 更改 STRESS 密碼。
(current) UNIX password: #輸入當前用戶密碼
New password: #輸入新的密碼,字母+數字組合
Retype new password:
例子5:--stdin使用格式
echo 密碼 | passwd --stdin 用戶名
[root@renyz08 ~]# echo "0304" | passwd --stdin ren
更改用戶 ren 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
passwd: all authentication tokens updated successfully.
六、Userdel命令
作用:刪除用戶
選項:
-r 刪除用戶時連同用戶家目錄刪掉
例子1:刪除用戶及家目錄
[root@renyz08 ~]# userdel -r ren4
[root@renyz08 ~]# id ren4
id: ren4: no such user #無ren4用戶了
[root@renyz08 ~]# ls /home #用戶家目錄也無ren4家目錄
ren ren1 ren2 ren3 renyz08
例子2:刪除用戶時不刪除用戶家目錄
[root@renyz08 ~]# userdel ren3
[root@renyz08 ~]# id ren3
id: ren3: no such user
[root@renyz08 ~]# ls /home
ren ren1 ren2 ren3 renyz08 #但是用戶家目錄依然存在
[root@renyz08 ~]# useradd ren3 #創建同名用戶時報如下的錯誤
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
useradd:警告:此主目錄已經存在。
不從 skel 目錄里向其中復制任何文件。
正在創建信箱文件: 文件已存在
[root@renyz08 ~]# id ren3 #但是用戶仍然創建成功了
uid=1011(ren3) gid=1011(ren3) 組=1011(ren3)
如果不想看到上面的報錯信息需要如下的操作:
[root@renyz08 ~]# userdel ren3
[root@renyz08 ~]# rm -rf /home/ren3 #刪除用戶家目錄
[root@renyz08 ~]# rm -rf /var/spool/mail/ren3 #刪除用戶郵箱
[root@renyz08 ~]# useradd ren3
[root@renyz08 ~]#
例子3:使用userdel ren3刪除用戶ren3后,再創建同名文件,登錄ren3后的問題解決
-bash-4.2$
如果登錄用戶的時候發現出現上面的錯誤是因為缺少用戶家目錄模板下面的三個隱藏文件
處理辦法:cp /etc/skel/.bash* /home/ren3
如下操作:
[root@renyz08 ~]# userdel ren3
[root@renyz08 ~]# id ren3
id: ren3: no such user
[root@renyz08 ~]# useradd ren3
useradd:警告:此主目錄已經存在。
不從 skel 目錄里向其中復制任何文件。
正在創建信箱文件: 文件已存在
[root@renyz08 ~]# su - ren3
最后一次失敗的登錄:五 7月 12 18:11:08 CST 2019pts/0 上
最有一次成功登錄后有 2 次失敗的登錄嘗試。
su: 警告:無法更改到 /home/ren3 目錄: 權限不夠
-bash: /home/ren3/.bash_profile: 權限不夠
-bash-4.2$ rm -rf /home/ren3
rm: 無法刪除"/home/ren3": 權限不夠
-bash-4.2$ exit
登出
-bash: /home/ren3/.bash_logout: 權限不夠
[root@renyz08 ~]# rm -rf /home/ren3
[root@renyz08 ~]# mkdir /home/ren3
[root@renyz08 ~]# cp /etc/skel/.bash* /home/ren3
[root@renyz08 ~]# su - ren3
上一次登錄:五 7月 12 18:13:19 CST 2019pts/0 上
[ren3@renyz08 ~]$
七、groupadd
作用:創建用戶組
例子1:創建組
[root@renyz08 ~]# groupadd ren5
[root@renyz08 ~]# tail -1 /etc/group
ren5:x:1012:
八、groupdel
作用:刪除用戶組
例子1:刪除組
[root@renyz08 ~]# groupdel ren5
[root@renyz08 ~]# tail -1 /etc/group
九、id命令
作用:查看指定的用戶信息(或判斷用戶是否存在)
格式:id [-u|-g|-G] username
選項
-u:僅僅顯示用戶uid
-g:僅僅顯示用戶gid
-G:僅僅顯示用戶全部組id
例子1:查看用戶信息
[root@renyz08 ~]# id ren1
uid=1002(ren1) gid=1002(ren1) 組=1002(ren1)
[root@renyz08 ~]# id ren6
id: ren6: no such user
十、su命令(switch user)
作用:切換用戶
格式:su - 目標用戶
注意:在切換用戶的時候需要加上-進行環境變量的整體改變
su命令和su -命令最大的本質區別就是:
前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;而后者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境才不會出現PATH環境變量錯誤。su切換成root用戶以后,pwd一下,發現工作目錄仍然是普通用戶的工作目錄;而用su -命令切換以后,工作目錄變成root的工作目錄了。用echo $PATH命令看一下su和su -以后的環境變量有何不同。以此類推,要從當前用戶切換到其它用戶也一樣,應該使用su -命令
例子1:切換用戶
[root@renyz08 ~]# su - ren
十一、/etc/shadow:用戶密碼信息、過期時間等
zxhk: $6$dgnPoZ0s$6xNKEWz : 17729 : 0 : 99999 : 7 : : :
第一段:用戶名:
第二段:加密后的密碼
第三段:上次修改密碼舉例元年經過的天數1970年1月1日(如果該字段空,意味着該用戶密碼被禁用)
第四段:密碼最短使用時間(0表示不限制)
第五段:密碼最長有效期(99999表示不限制)(如果第5的值小於第四段,那么用戶無法修改自己的密碼)
第六段:密碼到期前幾天開始發送告警,提示密碼即將過去,請立即修改
第七段:非活動期間,密碼到期后的寬限時間(登錄系統的時候必須先修改密碼,才能登錄)
第八段:密碼過期時間(也是舉例計算機元年經過的天數)(這里和前面的幾個時間沒有聯系)
第九段:保留字段
常常聽到:我的密碼忘記或者被更動了?怎么辦?
有的時候會發生這樣的情況,就是說,你的 root 密碼忘記了!要怎么辦?重新安裝嗎?另外, 有的時候是被入侵了, root 的密碼被更動過,該如何是好?
這個時候就必須要使用到 /etc/shadow 這個資料了!我們剛剛知道密碼是存在這個檔案中的, 所以只要你能夠以各種可行的方法開機進入 Linux ,例如單人維護模式,或者是以 live CD (KNOPPIX) 來進入 Linux 系統。之后,將硬碟順利掛載,然后進入 /etc/shadow 這個檔案中,將 root 的密碼這一欄全部清空!然后再登入 Linux 一次,這個時候 root 將不需要密碼 (有的時候需要輸入空白字元) 就可以登入了!這個時候請趕快以 passwd 設定 root 密碼即可。
十二、usermod命令
作用:修改用戶信息
選項:
-g,,--gid GROUP:更新使用者新的起始登入群組。群組名須已存在。(指定主組的ID)
-G,--groups GROUP1[,GROUP2,...[,GROUPN]]]: 定 義 使 用 者 為 一 堆 groups 的成員。每個群組使用,區格開來(指定附加組ID)
-u,--uid UID: 用者ID值。必須為唯一的ID值(指定UID)
-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:移動用戶家目錄至新的位置
例子1:更改ren1用戶的uid為1010
[root@renyz08 ~]# usermod -u 1010 ren1
[root@renyz08 ~]# id ren1
uid=1010(ren1) gid=1004(ren1) 組=1004(ren1)
例子2:更改ren1用戶的主組為root
[root@renyz08 ~]# usermod -g root ren1
[root@renyz08 ~]# id ren1
uid=1010(ren1) gid=0(root) 組=0(root)
例子3:ren2用戶添加root為附加組
[root@renyz08 ~]# usermod -G root ren2
[root@renyz08 ~]# id ren2
uid=1005(ren2) gid=0(root) 組=0(root) #會替換以前的附加組
例子4:ren2用戶增加ren1為附加組
[root@renyz08 ~]# usermod -G root,ren1 ren2
[root@renyz08 ~]# id ren2
uid=1005(ren2) gid=0(root) 組=0(root),1004(ren1)
例子4:更改ren1用戶登錄名為ren10
[root@renyz08 ~]# usermod -l ren10 ren1 #新名在前,舊名在后
[root@renyz08 ~]# id ren1
id: ren1: no such user
[root@renyz08 ~]# id ren10
uid=1010(ren10) gid=0(root) 組=0(root)
練習
1. 創建用戶java,uid 1000 基本組是gp001 附加組 gp002 gp003
2. 修改用戶java,
將名稱修改為python,
將uid修改為 2000,
修改主組是cats,
shell類型改為 /sbin/nologin
讓該用戶在10月1號到期