本文介紹Linux的用戶管理
用戶管理
Linux 是一個可以實現多用戶登陸的操作系統,不同用戶可以同時登陸同一台主機,他們共享一些主機的資源,但他們也分別有自己的用戶空間,用於存放各自的文件。
但實際上他們的文件都是放在同一個物理磁盤上的甚至同一個邏輯分區或者目錄里,但是由於用戶管理和權限機制,不同用戶不可以輕易地查看、修改彼此的文件。
與windows相比LINUX中的用戶和賬號的作用是一樣的。
都是基於用戶對訪問的資源做控制,只不過在表示的細節上有差異。
用戶帳號
類型 | 說明 |
---|---|
超級用戶 | root賬戶擁有整個系統至高無上的權利 |
本地用戶 | 由管理員創建,權限受到一定的限制,在自己的宿主目錄是完整的權限 |
系統用戶 | 一般是不會登錄系統的,用於維持某個服務程序正常運行 |
偽用戶 | linux中任何一個命令的操作都必須有一個用戶的身份 偽用戶一般和系統或者程序服務相關 bin、daemon、shutdown 、halt等 linux默認都有這些偽用戶 偽用戶通常不需要或無法登陸系統,可以沒有宿主目錄 源碼安裝nginx,運行nginx web服務器默認使用nobody用戶 |
用戶分類
根據帳號的位置:可分為本地帳號、遠程(域)帳號
根據帳號的功能:
類型 | UID |
---|---|
超級用戶(root) | 0 |
普通用戶 | 1-999為系統用戶 1000+為本地用戶 RHEL中本地用戶UID從500開始 |
UID即每個用戶的身份標示,類似於每個人的身份證號碼
用戶組分類
根據帳號的位置:可分為本地用戶組、遠程(域)用戶組
根據帳號的功能:
類型 | GID |
---|---|
超級用戶組(root) | 0 |
普通用戶組 | 1-999為系統用戶組 1000+為本地用戶組 |
配置文件
關於用戶和組的相關配置文件存放在以下目錄中:
類型 | 賬戶信息 | 密碼信息 |
---|---|---|
用戶 | /etc/passwd | /etc/shadow |
組 | /etc/group | /etc/gshadow |
用戶賬戶信息文件說明
用戶的賬戶信息保存在/etc/passwd文件中
這個文件以如下格式保存了每系統帳戶的所有信息:
root:x:0:0:root:/root:/bin/bash
用戶名:密碼占位符:UID:GID:用戶描述:宿主目錄:登錄的shell
用戶密碼信息文件說明
用戶的密碼信息保存在/etc/shadow文件中
這個文件以如下格式保存了系統帳戶的密碼信息:
root:$1$LTbeEPHI$AuZ6b2iHVNdekNHu2WvSP/::0:99999:7:::
用戶名:加密后的密碼:最近更改密碼的日期:密碼不能修改的天數:密碼過期時間:密碼需要更改期限到來的前7天發出警告:密碼過期了幾天后還能修改密碼:帳號過期時間:保留
用戶組信息文件說明
用戶組信息保存在/etc/shadow文件中
這個文件以如下格式保存了系統用戶組的所有信息:
root:x:0:tangbb
組名:組密碼占位符:GID:組成員列表
用戶組密碼信息文件說明
用戶組密碼信息保存在/etc/gshadow文件中
這個文件以如下格式保存了系統用戶組的密碼信息:
root:x:0:
組名:組密碼:組管理者列表:組用戶列表
/etc/gshadow和/etc/group是互補的兩個文件;對於大型服務器,針對很多用戶和組,定制一些關系結構比較復雜的權限模型,設置用戶組密碼是極有必要的。
比如我們不想讓一些非用戶組成員永久擁有用戶組的權限和特性,這時我們可以通過密碼驗證的方式來讓某些用戶臨時擁有一些用戶組特性,這時就要用到用戶組密碼。
解決模板文件被刪之后用戶名顯示不正常的問題
當添加新的用戶帳戶時,默認會執行下列操作:
它的主目錄就會被創建(一般是"/home/用戶名",除非你特別設置)
一些隱藏文件 如.bash_logout, .bash_profile 以及 .bashrc 會被復制到用戶的主目錄
會創建一個和用戶名同樣的組(除非你給新創建的用戶指定了組)
- 刪除用戶的規則文件
[root@VM_200_13_centos ~]# useradd test
[root@VM_200_13_centos ~]# echo 123456 | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.
[root@VM_200_13_centos ~]# ls -a /home/test
. .. .bash_logout .bash_profile .bashrc
[root@VM_200_13_centos ~]# rm -rf /home/test/.bash*
[root@VM_200_13_centos ~]# su - test
Password:
bash-4.2$ su - test
從上面最后一行看出用戶名顯示為bash-4.2
- 恢復用戶的規則文件
bash-4.2$ su - test
Password:
Last login: Sun Aug 14 01:38:21 CST 2016 on pts/0
-bash-4.2$ su
Password:
[root@VM_200_13_centos test]# cp /etc/skel/.bash* /home/test/
[root@VM_200_13_centos test]# chown test:test /home/test/.bash*
[root@VM_200_13_centos test]# su - test
Last login: Sun Aug 14 01:40:15 CST 2016 on pts/0
[test@VM_200_13_centos ~]$
從上面最后一行看出用戶名已經正常顯示
用戶操作
介紹用戶的添加刪除等操作
添加用戶
命令:useradd
作用:添加用戶
語法:useradd [選項] 用戶名
選項 | 說明 |
---|---|
-u | 創建用戶時指定UID |
-d | 創建用戶時指定宿主目錄 不使用該選項時會默認會以用戶名在/home目錄下創建宿主目錄 |
-g | 創建用戶時指定起始組(起始組只能有一個) |
-G | 創建用戶時指定附加組(可以有多個附加組) |
-s | 創建用戶時指定登錄的shell |
-M | 創建用戶時不創建宿主目錄 |
創建用戶tangpeng
[root@VM_200_13_centos ~]# ls /home
[root@VM_200_13_centos ~]# useradd tangpeng
[root@VM_200_13_centos ~]# ls /home
tangpeng
指定UID創建用戶tangdd
[root@VM_200_13_centos ~]# useradd -u 9527 tangdd
[root@VM_200_13_centos ~]# ls /home
tangdd tangpeng
創建用戶tangjj指定宿主目錄為/home/zhazha
[root@VM_200_13_centos ~]# useradd tangjj -d /home/zhazha
[root@VM_200_13_centos ~]# ls /home
tangdd tangpeng zhazha
創建用戶tangmm指定起始組為tangdd
[root@VM_200_13_centos ~]# useradd -g tangdd tangmm
[root@VM_200_13_centos ~]# id tangmm
uid=9529(tangmm) gid=9528(tangdd) groups=9528(tangdd)
創建用戶指定附加組為root
[root@VM_200_13_centos ~]# id tangbb
uid=9530(tangbb) gid=9530(tangbb) groups=9530(tangbb),0(root)
指定用戶登錄的shell且不創建宿主目錄
[root@VM_200_13_centos ~]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@VM_200_13_centos ~]# useradd -M -s /usr/sbin/nologin nginx
[root@VM_200_13_centos ~]# ls /home
tangbb tangdd tangmm tangpeng zhazha
刪除用戶
命令:userdel
作用:刪除用戶
語法:userdel [選項] 用戶名
選項 | 說明 |
---|---|
-f | 強制刪除用戶即便是登錄中的用戶 |
-r | 刪除宿主目錄和郵件 |
-Z | 刪除和這個用戶關聯的SELinux用戶 |
刪除用戶tangpeng同時刪除宿主目錄和郵件
[root@VM_200_13_centos ~]# userdel -r tangpeng
[root@VM_200_13_centos ~]# ls /home
tangbb tangdd tangmm zhazha
修改用戶
命令:usermod
作用:修改用戶
語法:usermod [選項] 用戶名
參數 | 說明 |
---|---|
-u | 修改用戶UID |
-d | 修改用戶宿主目錄 |
-g | 修改用戶起始組 |
-G | 修改用戶附加組 |
-s | 修改用登錄的shell |
切換用戶
命令:su
作用:切換用戶
語法:su [選項] [-] 用戶名
說明:加上-會在切換用戶時把環境變量一起進行切換
[root@VM_200_13_centos ~]# su - tangdd
查看用戶
命令:id
作用:打印指定用戶的用戶和用戶組信息
語法:id [選項] 用戶
選項 | 說明 |
---|---|
-Z | 只打印當前用戶的安全上下文(只在開啟SELinux的內核系統中有效) |
-g | 只打印有效用戶組 |
-G | 打印所有用戶組 |
-n | 忽略(兼容其他版本) |
-u | 只打印有效的UID |
命令:w
作用:顯示登錄到系統的用戶
語法:w [選項]
選項 | 說明 |
---|---|
-h | 不顯示有信息 |
-u | 忽略當前進程用戶名 |
-s | 以短格式輸出 |
-f | 顯示遠程主機名字段 |
-o | 使用舊樣式數據 |
-i | 使用ip來替代主機名 |
命令:who
作用:顯示當前登錄的用戶信息
語法:who [選項]... [FILE|ARG1 ARG2]
說明:如果沒有指定文件則使用 /var/run/utmp、/var/log/wtmp作為記錄文件;ARG1 ARG2可以為am i或者mom likes等同於who -m
選項 | 說明 |
---|---|
-a | 輸出所有信息,等同於 who -b -d -l -p -r -t -T -u |
-b | 上次系統啟動時間 |
-d | 輸出撕掉的進程 |
-H | 打印行標題欄 |
-l | 打印登錄系統的用戶進程 |
-q | 統計登錄的所有用戶數量 |
-r | 輸出當前運行級別 |
-s | 只打印用戶名,終端類型時間 |
-t | 打印上一次系統時間修改 |
-u | 列出登錄恩典用戶 |
命令:finger
作用:顯示系統用戶信息
語法:finger [選項] [用戶] [用戶@主機]
選項 | 說明 |
---|---|
-s | 顯示用戶的注冊名、實際用戶名、終端名稱、寫狀態、停滯時間、登錄時間等信息 |
-l | 顯示用戶的注冊名、實際用戶名、宿主目錄、登錄shell、登錄日志、郵件、計划 |
-p | 除了不顯示.plan文件和.project文件以外,與-l選項相同 |
用戶組操作
介紹用戶組的添加刪除等操作
添加用戶組
命令:groupadd
作用:添加用戶組
語法:groupadd [選項] 組名
選項 | 說明 |
---|---|
-f | 如果用戶組已經存在則不創建,並取消-g指定的GID |
-g | 指定GID |
-p | 指定組密碼 |
-r | 為該組創建系統帳號 |
-o | 允許使用不唯一的GID創建用戶組 |
-K | 覆寫/etc/login.defs文件中創建用戶組的默認配置(修改時在該選項后以鍵值對形式進行修改) |
GID即用戶組的ID
刪除用戶組
命令:groupdel
作用:刪除用戶組
語法:groupdel [選項] 組名
該命令比較簡單,出去-h選項外的另一個-R選項都是不常用的
[root@VM_200_13_centos ~]# groupdel tangdd
修改用戶組
命令:groupmod
作用:修改用戶組
語法:groupmod [選項] 組名
選項 | 說明 |
---|---|
-g | 修改當前組的GID為指定的GID |
-n | 修改當前組名為新的組名 |
-o | 允許使用一個重復的GID |
-p | 修改組密碼 |
密碼修改
命令:passwd
作用:修改用戶密碼
語法:passwd [選項] <用戶名>
說明:不加用戶名則修改當前用戶
選項 | 說明 |
---|---|
-k | 設置只有在密碼過期失效后才能修改 |
-d | 刪除密碼,只有ROOT用戶能使用該選項 |
-l | 鎖定密碼,只有ROOT用戶能使用該選項 |
-u | 解除鎖定,只有ROOT用戶能使用該選項 |
-e | 使帳號的密碼過期,只有ROOT用戶能使用該選項 |
-f | 強制執行 |
-x | 密碼最長使用壽命,只有ROOT用戶能使用該選項 |
-n | 密碼最短使用壽命,只有ROOT用戶能使用該選項 |
-w | 在密碼過期之前用戶收到警告的天數,只有ROOT用戶能使用該選項 |
-i | 指定密碼過期后的第幾天禁用帳號,只有ROOT用戶能使用該選項 |
-S | 報告用戶的密碼狀態,只有ROOT用戶能使用該選項 |
--stdin | 以標准輸入設定用戶的密碼,只有ROOT用戶能使用該選項 |
選項都比較簡單,最后一個可能比較難懂
[root@VM_200_13_centos ~]# echo cnmlgb | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.