用戶和組管理
Linux是一個多用戶、多任務的操作系統。多用戶、多任務就是可以在系統上建立多個用戶,多個用戶可以在同一時間內登錄同一臺主機的系統執行不同的任務,而互不影響。例如某臺linux服務器上有4個用戶,分別是root、www、ftp和mysql,在同一時間內root用戶可能在管理維護系統,www用戶可能在修改自己的程序和操作,ftp用戶可能在上傳軟件到服務器,mysql用戶可能在執行自己的SQL程序,每個用戶互不干擾的進行自己的操作,而每個用戶之間不能越權訪問,比如www用戶不能執行mysql用戶的SQL程序,ftp用戶也不能修改www用戶的程序,因此不同用戶具有不同的權限,每個用戶是在權限允許的范圍內完成不同的任務,linux正是通過這種權限的劃分與管理,實現了多用戶多任務的運行機制。
Linux的安全模型
作為一個安全系統的重要功能之一就是只允許那些授權的用戶登錄該系統,而阻止那些未經授權的用戶登錄(進入)這一系統。,登錄該系統的用戶只能訪問或者操作那些他有權訪問和操作的文件和資源。那么在 Linux 操作系統中又是怎樣做到這些的呢?Linux 操作系統采用了如下的措施:
用戶登錄系統時必須提供用戶名和密碼(用戶是由 root 用戶創建的,最初的密碼也是 root 用戶設定的)。
使用用戶和群組來控制使用者訪問文件和其他資源的權限。
系統上的每一個文件都一定屬于一個用戶(一般該用戶就是文件的創建者)并與一個群組相關。
每一個進程都會與一個用戶和群組相關聯??梢酝ㄟ^在所有的文件和資源上設定權限來只允許該文件的所有者或者某個群組的成員訪問它們。
資源分派:
Authentication:認證 (確認身份,登陸系統的用戶名和密碼)
Authorization:授權 (對于文件或者程序的權限)
Accouting|Audition:審計 (監控日志)
用戶:
管理員:root UID:0
普通用戶:
系統用戶:1-499 (centos6)
1-999(centos7)
系統用戶一般不登錄,都是給后臺進程使用
postfix 27756 0.0 0.0 80976 3396 ? S 17:46 0:00 pickup -l -t fifo -u
這里的這個進程就是使用系統用戶postfix在后臺運行的。這些用戶使用的是nologin的類型shell
登錄用戶:500-60000(centos6)
1000-60000(centos7)
組:
用戶組是一些用戶的集合,在用戶組里賦予組成員用戶相同的權限。有時我們需要讓多個用戶具有相同的權限,比如查看、修改某一個文件的權限,一種方法是分別對多個用戶進行文件訪問授權,如果有10個用戶的話,就需要授權10次,這樣會很麻煩;另一種方法是建立一個組,讓這個組具有查看、修改此文件的權限,然后將所有需要訪問此文件的用戶放入這個組中,那么所有用戶就具有了和組一樣的權限。這就是用戶組,將用戶分組是Linux 系統中對用戶進行管理及控制訪問權限的一種手段,通過定義用戶組,在很大程度上簡化了管理工作。
GID:組標識號
管理員組:root, 0
普通組:
系統組:1-499(centos6), 1-999(centos7)
普通組:500+ , 1000+
linux 安全上下文:
security context
進程所能夠訪問資源的權限取決于進程的運行者的身份
linux組的類別:
用戶的主要組(主組):
用戶必須屬于一個且只有一個主組 組名同用戶名,且僅包含一個用戶:私有組 (private 私有)
[root@localhost ~]# groups zang zang : zang
用戶的附加組(輔助組): 一個用戶可以屬于零個或多個輔助組
[root@localhost ~]# groups zang zang : zang bin [root@localhost ~]# id zang uid=500(zang) gid=500(zang) groups=500(zang),1(bin)
用戶和組的配置文件:
Linux用戶的配置文件:
系統用戶配置文件,是用戶管理中最重要的一個文件。這個文件記錄了Linux系統中每個用戶的一些基本屬性,并且對所有用戶可讀。/etc/passwd中每一行記錄對應一個用戶,每行記錄又被冒號分割。
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
zang:x:500:500::/home/zang:/bin/bash
login name:登錄用(zang)
passwd:密碼 (x)
我們可以使用pwunconv(密碼不轉換),把密碼顯示在X處 ;使用pwconv(密碼轉換)把密碼放到/ect/shadow中。
UID:用戶身份編號 (500)
GID:登錄默認所在組編號 (500) [用戶的主組]
GECOS:用戶全名或注釋
home directory:用戶主目錄 (/home/zang)
shell:用戶默認使用shell (/bin/bash)
注意:第二項(passwd)存放著加密后的用戶口令,雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由于/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 版本都使用了shadow,把真正加密后的用戶口令存放到/etc/shadow文件中,該文件只有root用戶擁有讀權限,從而保證了用戶密碼的安全性。在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如用“x”或者“*”來表示。
下面我們來說一說/etc/shadow
/etc/shadow:用戶密碼及其相關屬性
shadow文件格式 :
zang:$6$vfI0a6tN$amq4Jm801CJKnbgJsjZ9sL3eahHnUrB3BxpRM50cvjrH6KbEV133EwQyFbjXfbWlKGvbDg8L3LwGNThOsmWkL.:17007:0:99999:7 : : :
用戶名:(zang)
用戶密碼:$6加密算法為sha512加密;第二個$與第三個$之間,我們通常稱為salt;第三個$之后為加密的密碼
密碼最后更改日期:從1970年1月1日起到密碼最近一次被更改的時間
最小時間間隔:密碼再過幾天可以被變更(0表示隨時可被變更)
最長密碼使用期限:密碼再過幾天必須被變更(99999表示永不過期)
密碼警告期限:密碼過期前幾天系統提醒用戶(默認為一周)
密碼非活動期限:密碼過期幾天后帳號會被鎖定
失效時間:從1970年1月1日算起,多少天后帳號失效。
保留字段:這個字段留作以后使用。
補充知識:密碼加密
加密機制:
加密:明文–> 密文
解密:密文–> 明文
單向加密:哈希算法,原文不同,密文必不同
相同算法定長輸出,獲得密文不可逆推出原始數據
雪崩效應:初始條件的微小改變,引起結果的巨大改變
如下面的例子:
我們把zang用戶與zanghl用戶的密碼設置為相同的密碼centos
[root@localhost ~]# echo centos | passwd --stdin zang Changing password for user zang. passwd: all authentication tokens updated successfully. [root@localhost ~]# echo centos | passwd --stdin zanghl Changing password for user zanghl. passwd: all authentication tokens updated successfully.
查看配置文件:
[root@localhost ~]# getent shadow zang zang:$6$CIZ.tGks$AZfFMfmNQQ6rfQ7XMIZolX4Awp6CCSmJ8oNUE7xvNuaX7MAqyzx5/dvP/WszEgECpQOiUN.o.BZ..h1ZsMdo/0:17007:0:99999:7::: [root@localhost ~]# getent shadow zanghl zanghl:$6$wpSq8G7i$QMqWoPxyjymeuvy9a0l5B4p8LxFgzAOoiiNAYetFLTrMg/ox7XYB3roVseGzA3hhfYUNdglEplzh8m/s4T4E90:17007:0:99999:7:::
這里我們看到加密時加入的salt并不相同,所以我們說初始條件的微小改變,引起結果的巨大改變。
加密算法:
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
更改加密算法 authconfig –passalgo=sha256 –update
[root@localhost ~]# cat /etc/login.defs ... ENCRYPT_METHOD SHA256
密碼加密算法保存在:/etc/login.defs
/etc/login.defs儲存的是建立用戶時用戶的必要信息。
Linux組的配置文件:
/etc/group:組及其屬性信息
[root@localhost ~]# getent group zang
zang:x:500:
群組名稱:群組名稱(zang)
群組密碼: x (存放在/etc/gshadow)
組管理員列表:組管理員的列表,更改組密碼和成員
以當前組為附加組的用戶列表:(分隔符為逗號)
/etc/gshadow:組密碼及其相關屬性
群組名稱:
加密的密碼:
管理員:可以對組成員進行調整。
群組成員
注意:
系統用戶的家目錄和郵箱不會自動創建。
用戶添加新的組成員,用戶必須重新登陸之后才能獲取組成員關系信息。
如果組沒有組密碼其他用戶無法加入該群組。
newgrp:臨時切換主組
如果創建一個文件,想要這個文件有其他組的權限,可以臨時切換主組,之后再創建文件
[zanghl@localhost ~]$ ll total 0 -rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:56 f1 -rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:58 f2 -rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:59 f3 [zanghl@localhost ~]$ newgrp zang Password: [zanghl@localhost ~]$ touch f5 [zanghl@localhost ~]$ ll total 0 -rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:56 f1 -rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:58 f2 -rw-rw-r-- 1 zanghl zanghl 0 Jul 26 00:59 f3 -rw-r--r-- 1 zanghl zang 0 Jul 26 01:00 f5
用戶和組管理命令:
useradd:添加用戶或更改用戶默認信息
-u UID: [UID_MIN, UID_MAX]定義在/etc/login.defs
示例:
[root@localhost ~]# useradd -u 10000 zz [root@localhost ~]# getent passwd zz zz:x:10000:10000::/home/zz:/bin/bash
-o 配合-u 選項,不檢查UID的唯一性
[root@localhost ~]# useradd -ou 10000 zz1 [root@localhost ~]# cat /etc/passwd ... zz:x:10000:10000::/home/zz:/bin/bash zz1:x:10000:10001::/home/zz1:/bin/bash
之前創建了一個指定UID為10000的用戶zz,用 -ou選項在此創建一個zz1用戶也指定
用戶的UID為10000。
-g GID:指明用戶所屬基本組,可為組名,也可以GID
[root@localhost ~]# useradd -g 501 zz2 [root@localhost ~]# cat /etc/passwd ... zanghl:x:501:501::/home/zanghl:/bin/bash zz:x:10000:10000::/home/zz:/bin/bash zz1:x:10000:10001::/home/zz1:/bin/bash zz2:x:10001:501::/home/zz2:/bin/bash
-c "COMMENT":用戶的注釋信息
[root@localhost skel]# useradd -c "dsadsada" zz67 [root@localhost skel]# getent passwd zz67 zz67:x:10003:10003:dsadsada:/home/zz67:/bin/bash
-d HOME_DIR: 以指定的路徑(不存在)為家目錄
[root@localhost ~]# useradd -d /test zz3 [root@localhost ~]# getent passwd zz3 zz3:x:10002:10002::/test:/bin/bash
默認家目錄的基本文件/etc/skel/
指定路徑為家目錄創建用戶后,默認從/etc/skel/ 中復制文件到指定的家目錄中。
-s SHELL: 指明用戶的默認shell程序 可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:為用戶指明附加組,組必須事先存在
-N 不創建私用組做主組,使用users組做主組
-r: 創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
默認值設定:/etc/default/useradd文件中
顯示或更改默認設置: useradd -D
[root@localhost ~]# useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
[root@localhost ~]# useradd -D -s SHELL
刪除用戶
userdel [OPTION]… login
-r: 刪除用戶家目錄;
查看用戶相關的ID信息
id [OPTION]… [USER]
-u: UID 顯示用戶的UID。
-g: GID 顯示用戶的GID。
-G: Groups 顯示用戶所有的組的GID。
-n: Name 與-ugG一起使用,顯示名稱。
[root@localhost test]# id -u zz1 10000 [root@localhost test]# id -g zz1 10001 [root@localhost test]# id -G zz1 10001 10000 [root@localhost test]# id -nu zz1 zz
設置密碼
passwd [OPTIONS] UserName: 修改指定用戶的密碼,僅 root用戶權限
passwd: 修改自己的密碼;
常用選項:
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限;
–stdin:從標準輸入接收用戶密碼;
echo "PASSWORD" | passwd –stdin USERNAME
用戶屬性修改
usermod [OPTION] login
-u UID: 新UID
-g GID: 新基本組
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加組,原來的附加 組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append;
-s SHELL:新的默認SHELL;
-c 'COMMENT':新的注釋信息;
-d HOME: 新家目錄不會自動創建,原家目錄中的文件不會同時移 動至新的家目錄;若要創建新家目錄并移動原家數據,同時使用-m選項
-l login_name: 新的名字;
-L: lock指定用戶,在/etc/shadow 密碼欄的增加 !
-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-e YYYY-MM-DD: 指明用戶賬號過期日期;
-f INACTIVE: 設定非活動期限;
修改用戶密碼策略
chage [OPTION]… LOGIN
-d LAST_DAY
-E, –expiredate EXPIRE_DATE
-I, –inactive INACTIVE
-m, –mindays MIN_DAYS
-M, –maxdays MAX_DAYS
-W, –warndays WARN_DAYS
–l,顯示密碼策略 ?
下一次登錄強制重設密碼
chage -d 0 tom
設置用戶zzz
[root@localhost ~]# chage zzz Changing the aging information for zzz Enter the new value, or press ENTER for the default Minimum Password Age [0]: Maximum Password Age [99999]: 42 Last Password Change (YYYY-MM-DD) [2016-07-25]: Password Expiration Warning [7]: Password Inactive [-1]: 5 Account Expiration Date (YYYY-MM-DD) [-1]: 2016-12-12
chfn 指定個人信息
[root@localhost test]# chfn zz1 Changing finger information for zz1. Name []: zanghl Office []: 1 Office Phone []: 010111 Home Phone []: 1821211
chsh 指定shell
[root@localhost test]# chsh zz1 Changing shell for zz1. New shell [/bin/bash]: /bin/csh Shell changed. [root@localhost test]# getent passwd zz1 zz1:x:10000:10001:zanghl,1,010111,1821211:/home/zz1:/bin/csh
finger
[root@localhost test]# finger zz1 Login: zz1 Name: zanghl Directory: /home/zz1 Shell: /bin/bash Office: 1, 010111 Home Phone: 182-1211 Never logged in. No mail. No Plan.
切換用戶或以其他用戶身份執行命令
su
su [options…] [-] [user [args…]]
切換用戶的方式: su UserName:非登錄式切換,即不會讀取目標用戶的 配置文件,不改變當前工作目錄
su – UserName:登錄式切換,會讀取目標用戶的配置 文件,切換至家目錄,完全切換
root su至其他用戶無須密碼;非root用戶切換時需要密碼
換個身份執行命令: su [-] UserName -c 'COMMAND'
選項:-l –login:
su -l UserName 相當于 su – UserName
不完全切換保留之前用戶的工作環境
[zzz@localhost ~]$ su root -c 'cat /etc/issue' Password: CentOS release 6.8 (Final) Kernel \r on an \m Mage Education Learning Services
設置密碼
passwd [OPTIONS] UserName: 修改指定用戶的密碼,僅 root用戶權限
passwd: 修改自己的密碼;
常用選項:
-l:鎖定指定用戶
-u:解鎖指定用戶
-e:強制用戶下次登錄修改密碼
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天開始警告
-i inactivedays:非活動期限;
–stdin:從標準輸入接收用戶密碼;
echo "PASSWORD" | passwd –stdin USERNAME
創建組
groupadd [OPTION]… group_name
-g GID: 指明GID號;[GID_MIN, GID_MAX]
[root@localhost ~]# getent group free free:x:2016:
-r: 創建系統組;
CentOS 6: ID<500 CentOS 7: ID<1000
修改和刪除組
組屬性修改:groupmod groupmod [OPTION]… group
-n group_name: 新名字
-g GID: 新的GID
[root@localhost ~]# groupmod -g 2017 -n freed free [root@localhost ~]# getent group freed freed:x:2017:
組刪除:
groupdel
groupdel GROUP
更改組密碼
組密碼:gpasswd
gpasswd [OPTION] GROUP
-a user: 將user添加至指定組中;(下面有舉例)
-d user: 從指定組中移除用戶user
[root@localhost ~]# id user2 uid=503(user2) gid=504(user2) groups=504(user2),1(bin) [root@localhost ~]# gpasswd -d user2 bin Removing user user2 from group bin [root@localhost ~]# id user2 uid=503(user2) gid=504(user2) groups=504(user2)
-A user1,user2,…: 設置有管理權限的用戶列表 (添加組管理員)
newgrp命令:臨時切換基本組;
如果用戶本不屬于此組,則需要組密碼
[root@localhost ~]# id user2 uid=503(user2) gid=504(user2) groups=504(user2),505(free) [user2@localhost ~]$ ll total 0 -rw-rw-r-- 1 user2 user2 0 Aug 3 21:27 user2file [user2@localhost ~]$ newgrp free user2 [user2@localhost ~]$ touch user2file3 [user2@localhost ~]$ ll total 0 -rw-rw-r-- 1 user2 user2 0 Aug 3 21:27 user2file -rw-r--r-- 1 user2 free 0 Aug 3 21:29 user2file3
更改和查看組成員
groupmems [options] [action]
options:
-g, –group groupname 更改為指定組 (只有root)
Actions:
-a, –add username 指定用戶加入組
-d, –delete username 從組中刪除用戶
[root@localhost ~]# getent group free free:x:505:user2,user1,zzz [root@localhost ~]# groupmems -g free -d zzz [root@localhost ~]# getent group free free:x:505:user2,user1
-p, –purge 從組中清除所有成員
-l, –list 顯示組成員列表
[root@localhost ~]# groupmems -g free -l user2
groups [OPTION].[USERNAME]… 查看用戶所屬組列表
[root@localhost ~]# groups user1 user1 : bin free
添加用戶附加組:
[root@localhost home]# groupmems -g bin -a user1 [root@localhost home]# id user1 uid=502(user1) gid=505(user1) groups=505(user1),1(bin) [root@localhost home]# usermod -aG user2 user1 [root@localhost home]# id user1 uid=502(user1) gid=505(user1) groups=505(user1),1(bin),506(user2) [root@localhost home]# gpasswd -a user1 user3 Adding user user1 to group user3 [root@localhost home]# id user1 uid=502(user1) gid=505(user1) groups=505(user1),1(bin),506(user2),507(user3)
原創文章,作者:zanghonglei,如若轉載,請注明出處:http://www.www58058.com/28385
寫的不錯,如果能將選項縮進看起來會更直觀哦。