用戶和組的管理

       用戶與組的管理,主要包括三方面:用戶賬戶,組賬戶,權限分配。

       我們先從用戶賬戶開始來講。不論你用Windows還是Linux都需要用到用戶賬戶,爲什麼需要用到用戶賬戶呢?主要的方面爲了保護自己賬戶的安全,咱們舉個例子,如果你的計算機沒有設置賬號,任何人都能夠登陸你的計算機,要是有人登錄上去了,你的計算機可能中***或者是你的一些信息遭到別人的監控。所以在用戶登陸的時候,需要得到認證才能夠登陸,比如現在常用的賬號密碼登陸。最早的時候是由Cisco開發並且建立了AAA認證體系:

Authentication:認證,覈實使用者身份;

Authorization:授權,對已經覈實身份的使用者進行資源分配;

Accounting:審計,監管資源被使用的情況;

這種認證體系如今主要是針對像Linux還有Windows這樣多任務,多用戶的操作系統設計的。(Windows算是仿多用戶系統,你不能夠在Windows中同時登陸多個用戶)當然了。在Linux或者Windows系統中,用戶是需要通過運行相關的程序才能夠實現資源使用和完成相關任務的。


       在Linux系統中,如果你通過某進程訪問了當前用戶的一個文件,你可以訪問;如果你切換爲另一個用戶,你再通過相同的進程訪問之前訪問的文件時,你可能是訪問不了的。原因是在這個文件上設置了一套安全上下文策略。也就是進程當進程試圖訪問資源的時候,安全上下文會比對進程的所有者和資源的所有者之間的關係:

首先,查看進程的所有者是否和資源的所有者爲同一用戶,如果是,就按照所有者擁有的權限來使用資源;

如果不是,則判斷進程的所有者是否屬於該資源所屬組的成員;如果是,按照所屬組的權限來使用資源;

如果不是,就按照最爲普通的其他用戶的權限來使用資源;

因此通過上面所說,我們可以給用戶賬戶一個簡單的定義:實現操作者和計算機交互式操作的基礎,是操作者的身份在滿足了驗證條件之後的計算機系統中的映射。無論是在什麼系統中,用戶賬戶是有分類的:

超級用戶(管理員):root(Windows中是Administrator)

普通用戶:

系統用戶(非登錄用戶):

    爲了保證安全,往往會讓某些進程或服務必須以非管理員的用戶身份運行;這類非管理員用戶,稱爲系統用戶;此類用戶一般不允許登錄到系統的;

登錄用戶

    能夠通過登錄行爲驗證用戶身份進而獲得資源訪問權限並可以對資源進行操作的用戶,可以稱爲登錄用戶;


        那麼,用戶賬戶有這麼多分類,在計算機系統中是如何被分辨的呢?或者說它們是如何被標識的呢?在Linux系統中,它主要是通過用戶登錄名稱(爲操作者提供的簡單易記的字符串標識)以及用戶的數字ID(UID)(爲計算機操作系統提供的標準的數字標識符號,範圍0~2^32-1)。例如:

超級用戶:

用戶名:root

UID:0

普通用戶:

系統用戶:

UID範圍:

CentOS 6-:1~499

CentOS 7+:1~999

登錄用戶

UID範圍:

CentOS 6-:500+

CentOS 7+:1000+

注意:60000+的UID通常需要用戶自定義標識;

在系統中用戶賬戶分類這麼多,那系統是如何識別出你登錄的是這個賬戶呢?所以這裏就需要進行名稱解析:用戶名<-->UID。也就是將用戶名解析成系統能夠識別的UID形式。主要是通過兩個庫來完成的:

用戶名解析庫:/etc/passwd

操作系統中的認證組件通過解析庫實現認證機制,即驗證登錄用戶是否爲已經存在的用戶;

用戶的認證庫:/etc/shadow

通過此前的解析庫認定用戶是存在的,再經過認證庫的認證,來證明登錄用戶就是其聲明的用戶;

這些是用戶名的解析、認證,其中默認的認證機制是密碼機制;說道密碼,我們不得不再囉嗦一下它的複雜性要求了:

1.儘量避免使用有規律的或者來源於字典中的字符串作爲密碼;

2.密碼要足夠長,一般不得少於6個字符;

3.密碼要足夠複雜,其中應該至少包括大寫字母,小寫字母,數字及其他符號中的三類;

4.不定期更換,每隔一段時間進行密碼更換;

密碼的複雜性對於保護用戶的信息安全是很必要的,所以當你建立了一個賬戶時,還是儘量達到這些要求。


        另一方面,在Linux中,密碼是要經過單項加密算法處理保存到認證庫中的。其中加密密碼的算法主要有兩種:MD(消息摘要算法)、SHA(安全的哈希算法)。其中主要用到的有MD5(Message Digest Version第5版)、sha1(160加密輸出)、sha224、sha256、sha384、sha512(默認的加密算法)。當然了,密碼不可能這麼簡單的就存儲到認證庫中,因爲它太容易被破解了,因此還需要salt(通過隨機算法計算得到的隨機數),那麼salt是怎麼生成的呢?

/dev/random:

僅僅從熵池中返回隨機數;如果熵池中隨機數耗盡,進程會被阻塞;

/dev/urandom:

首先試圖從熵池中返回隨機數,如果熵池中隨機數耗盡,則利用僞隨機數生成器生成僞隨機數;


所以經過上面的一系列操作,密碼在認證庫中的最終形態是:算法+salt+加密字符串;

算法:$1~$6

salt:$隨機字符串

加密字符串:$單向加密的結果 算法:$1~$6


        用戶賬戶的一些內容就如上面所說,我們再來說一說組賬戶。組賬戶的內容和用戶賬戶的內容是類似的,所以我們就來簡單的說一下。我們先來給組賬戶一個定義:將具有某些相同或相似屬性的用戶聯繫在一起以便可以集中授權的容器。

組賬戶分類:

超級用戶組

普通用戶組

系統用戶組

登錄用戶組

組賬戶的標識方法:

組賬戶名稱:

組賬戶ID(GID):

超級用戶組:0

系統用戶組:

CentOS 6-:1~499

CentOS 7+:1~999

         登錄用戶組:

CentOS 6-:500+

CentOS 7+:1000+

組名解析:

解析庫:/etc/group

認證庫:/etc/gshadow

組也需要使用密碼加密保護,與上面用戶賬戶所說的加密操作類似。


從上面所說,我們能夠看出來,用戶賬戶和組賬戶它們的內容是類似的,那麼它們之間有什麼關係呢?

在Linux中,每個用戶必須至少屬於一個組;

用戶賬戶的GID標識被稱爲用戶的主要組(基本組),Primary Group;每個用戶必須要有主要組,而且只能有一個;

在主要組的基礎之上,用戶可以與其他的組賬戶存在邏輯關係,此類組稱爲用戶的附加組(附屬組,額外組),Addtion Group;對於用戶來說,此類組可以沒有,也可以有多個;



接下來我們來說一說與用戶和組相關的命令:

1.groupadd

groupadd - 創建一個新組

格式:groupadd [Options...] group

常用選項:

-g GID:指定要創建的組的GID;

-r:將組創建爲系統組,此時應該保證GID在系統組範圍內;

[root@localhost qhdlink]# groupadd -g 808 -r mydisk
  [root@localhost qhdlink]# tail -1 /etc/group
  mydisk:x:808:


2.groupdel

groupdel - 刪除一個組

格式:groupdel [Options...] group


注意:如果某個組是某個用戶的主要組,則該組不能刪除;

[root@localhost ~]# groupadd qqq
[root@localhost ~]# tail -1 /etc/group
qqq:x:5002:
[root@localhost ~]# groupdel qqq
[root@localhost ~]# tail -1 /etc/group
mydisk:x:808:



3.groupmod

groupmod - modify a group definition on the system

格式: groupmod [Options...] group

常用選項:

-g GID:修改指定組的GID;

-n GROUP_NAME:修改指定組的組帳戶名稱;


[root@localhost ~]# tail -1 /etc/group
qqq:x:5002:
[root@localhost ~]# groupmod -g 800 -n aaa qqq
[root@localhost ~]# tail -1 /etc/group
aaa:x:800:


4.useradd

useradd - 創建一個新用戶或更新默認新用戶信息

格式:useradd [選項] username

useradd -D [選項]

常用選項:


-c, --commentCOMMENT:爲用戶添加註釋信息;

-d, --homeHOME_DIR:爲用戶指定家目錄的路徑;此目錄不能事先存在;

-e, --expiredateEXPIRE_DATE:用戶密碼的過期的絕對時間;如:2018/01/01

-f, --inactiveINACTIVE:爲用戶指定密碼使用達到最大時間之後的寬限期;

-g, --gidGROUP:爲用戶指明GID;如果不寫此選項,系統會創建一個與用戶名相同的組並且將之設置爲誒此用戶的主要組;

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:爲用戶添加附加組;

-m, --create-home:必須爲用戶創建家目錄;

-M:不爲用戶創建家目錄;在創建系統用戶時常用此選項;

-r, --system:創建系統用戶;

-s, --shellSHELL:爲用戶指定默認的shell;

-u, --uidUID:爲用戶指定UID;



[root@localhost ~]# useradd test -c "This is a file" -d /home -e 2018/01/01 -f 5 -g 800 -G centos -r -s /bin/csh -u 800
[root@localhost ~]# id test
uid=800(test) gid=800(aaa) 組=800(aaa),1001(centos)
[root@localhost ~]# tail -1 /etc/passwd
test:x:800:800:This is a file:/home:/bin/csh



5.userdel

userdel - 刪除用戶賬戶和相關文件

格式:userdel [選項] username

常用選項:

-r, --remove:刪除用戶的同時刪除用戶的家目錄及用戶郵箱文件;

[root@localhost ~]# userdel sss
[root@localhost ~]# id sss
id: sss: no such user

6.usermod

usermod - 修改一個用戶賬戶

格式:usermod [選項] username

常用選項:

-a,

與-G使用,不會讓新添加的組把之前的組覆蓋掉。

-c, --commentCOMMENT:修改用戶的註釋信息;

-d, --homeHOME_DIR:修改用戶的家目錄;

-e, --expiredateEXPIRE_DATE:修改用戶密碼過期的絕對日期;

-f, --inactiveINACTIVE:修改用戶密碼過期之後的寬限期;

-g, --gidGROUP:修改用戶的主要組(GID);

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用戶的附加組爲此列表中的組,如果同時使用了-a選項,則保留原有的附加組,將此列表中的組追加至用戶的附加組列表;

-l, --loginNEW_LOGIN:修改用戶的登錄名;

-s, --shellSHELL:修改用戶的登錄shell;

-u, --uidUID:修改用戶的UID;

-L, --lock:鎖定用戶;

-U, --unlock:解鎖被usermod -L鎖定的用戶;



[root@localhost ~]# id test
uid=800(test) gid=800(aaa) 組=800(aaa),1001(centos)
[root@localhost ~]# tail -1 /etc/passwd
test:x:800:800:This is a file:/home:/bin/csh
[root@localhost ~]# usermod -aG root test -c "aaaa" -g 808 -s /bin/bash -u 799
[root@localhost ~]# id test
uid=799(test) gid=808(mydisk) 組=808(mydisk),0(root),1001(centos)
[root@localhost ~]# tail -2 /etc/passwd | head -1
test:x:799:808:aaaa:/home:/bin/bash



7.passwd

passwd - update user's authentication tokens

格式:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

常用選項:

-l, --lock:鎖定用戶;

-u, --unlock:解鎖用戶;

--stdin:通過標準輸入接受密碼,可以用於管道;

-d, --delete:刪除用戶的密碼,也可以用於解除用戶鎖定;

-e, --expire:直接設置用戶密碼過期;

-n, --minimum DAYS:用戶密碼的最短使用時長;默認值爲0;

-x, --maximum DAYS:用戶密碼的最長使用時長;默認值爲99999;

-w, --warning DAYS:用戶密碼過期之前多少天開始發送警告信息;

-i, --inactive DAYS:用戶密碼過期之後的寬限期;

-S, --status:查看用戶密碼的狀態信息;

[root@localhost ~]# echo 123456 | passwd --stdin test
更改用戶 test 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd -i 5 test
調整用戶密碼老化數據test。
passwd: 操作成功
[root@localhost ~]# passwd -e  test
正在終止用戶 test 的密碼。
passwd: 操作成功
[root@localhost ~]# passwd -n 6000 test
調整用戶密碼老化數據test。
passwd: 操作成功
[root@localhost ~]# passwd -w 7  test
調整用戶密碼老化數據test。
passwd: 操作成功
[root@localhost ~]# passwd -S test
test PS 1970-01-01 6000 7000 7 5 (密碼已設置,使用 SHA512 算法。)[root@localhost ~]




8.chage

chage - 更改用戶密碼過期信息

格式:chage [選項] username

常用選項:

-d, --lastdayLAST_DAY

指定密碼最後修改日期

-E, --expiredateEXPIRE_DATE

密碼到期的日期,過了這天,此賬號將不可用。0表示馬上過期,-1表示永不過期。

-I, --inactiveINACTIVE

密碼過期後,鎖定賬號的天數

-l, --list

列出用戶以及密碼的有效期

-m, --mindaysMIN_DAYS

密碼可以更改的最小天數。爲零代表任何時候都可以更改密碼。

-M, --maxdaysMAX_DAYS

密碼保持有效的最大天數。

-W, --warndaysWARN_DAYS

密碼過期前,提前收到警告信息的天數。

[root@localhost ~]# chage -M 60 -m 7 -W 7 aaa
You have new mail in /var/spool/mail/root
[root@localhost ~]# chage -l aaa
Last password change : Mar 26, 2015
Password expires : May 25, 2015
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 60
Number of days of warning before password expires : 7


9.chsh

chsh - change your login shell == usermod -s 

格式:chsh [-s shell] [-l] [-u] [-v] [username]

[root@localhost ~]# chsh -l 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh


10.finger

finger — user information lookup program

格式:finger [-lmsp] [user ...] [user@host ...]



11.id

id - print real and effective user and group IDs

格式:id [OPTION]... [USER]

常用選項:

-u:顯示用戶的有效UID;

-g:顯示用戶的有效GID;

-n:顯示名稱;


[root@localhost ~]# id test
uid=799(test) gid=808(mydisk) 組=808(mydisk),0(root),1001(centos)


12.su

su - run a command with substitute user and group ID

格式:su [options...] [-] [user [args...]]

常用選項:

-, -l, --login:以後面的用戶身份登錄到系統;

-c "COMMAND":以前面指定的用戶身份運行COMMAND;不進行身份登錄切換;


[root@localhost ~]# su - qhdlink
上一次登錄:三 11月  1 17:03:58 CST 2017pts/0 上
[qhdlink@localhost ~]$


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章