《用戶和組的使用和管理》

第一篇博客 紀念一下!!!

上節課主要學的是用戶和組的管理,首先說明一下相關的幾個概念

1.Cisco公司開發的所謂AAA認證體系

主要有一下概念

Authentication:認證,覈實身份是否正確;

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

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

3A認證體系的第一步是覈實用戶的身份,只有在用戶的身份被覈實後,系統纔會對其提供服務,認證完的下一步就是對用戶進行授權,因爲對於一個系統來說,所有的資源和服務有很多,有基礎性的,有專業性的,有關鍵性的,所有對於用戶來說進行授權是必不可少的一個環節,什麼級別的用戶能享有什麼等級的權利,這是我們需要解決的問題,解決完這個問題後,我們還需對用戶使用資源的情況進行監管,以保證用戶不會威脅到資源的安全性,所有的用戶必須在系統的監管下去使用資源,一旦發現用戶不合理的使用資源,系統將對其進行必要的處理,個人認爲這是一套比較完善的體系,基本上可以滿足系統對於用戶的服務,同時安全性也有一定的保證



下面再說一下多用戶,多任務的系統

應用程序就是能夠實現資源使用和完成任務的主體,在我的理解來看多用戶說的是一個系統不可能只是被一個用戶所佔用,其必然是能服務多個用戶,每個用戶根據自己不同的需求,利用系統的某些資源,這些都是不相同的,還有就是多任務,一個用戶想要去利用系統完成某個任務,肯定需要應用程序進程的幫助,然後一個進程是遠遠不夠的,必定是多個進程相互協作的結果,以上是我對多任務、多用戶系統的理解



還有一個就是叫做安全上下文的東西,首先我們來看一下這麼一句話,“進程是以其發起者的身份來運行的:可以理解爲,進程的所有者就是發起者;會將發起者的信息標記在進程上”也就是說每一個進程都有其所有者,進程的在系統中的運行是以發起者的身份來運行的,你比方說如果我們的身份是root,想要用touch去建立一個文件,touch就相當於一個進程,我們以root的身份去利用這個進程去創建一個文件,那麼問題來了,爲什麼我們這麼強調一個進程的發起者身份,因爲當進程試圖去訪問資源的時候,安全上下文會去比對進程的所有者和資源的有者的關係

首先查看進程的所有者是不是資源的所有者,如果是,就按照屬主的權限使用資源,如果不是則判斷進程的所有者是否屬於資源所屬組,如果是,按照屬組的權限使用資源;如果不是,則直接使用資源的其他人訪問權限來使用資源。這就保證了資源的安全性,不是你這個用戶所擁有權限的資源,你就無法去訪問,也就不存在去破壞其他用戶的資源,這點是很有必要的



再來看一個概念

用戶賬戶:就是計算機操作者在操作系統中的身份映射,在滿足了認證條件之後的身份映射

因爲我們肉體的人是無法去和計算機去完成交互的,我們得以一個計算機能認識的身份去和計算機進行交互,用戶賬戶就是我們在計算機中的那個身份



用戶主要有以下幾個分類

超級用戶(管理員用戶):root

普通用戶:

    系統用戶:爲了保證安全,必須讓那些運行在後臺的進程或者服務類的進程以非管理員的身份運行,這類用戶不需要登錄到系統

    登錄用戶:能夠正常使用整個系統資源的用戶

  

 在我的理解看來,系統用戶是一個系統運行所必不可少的一些進程,只要這個系統想運作,就必須去運行這些進程,然而這些進程並不一定需要登錄到系統中去,說實話我還是不明白登錄到系統和不登錄到系統的區別,這個還得請教一下老師,這個先說到這。




 下面說一下系統是怎麼區分這些用戶的,這就必須說到標識這一概念


 用戶的標識:

用戶的登錄名稱:爲操作者準備的簡單易記的字符標識;

用戶的ID(UID):爲計算機系統準備的數字標識;16bit-->32bit

超級用戶:0

系統用戶:centos5、6:1~499

          centos7:1~999

登錄用戶:

centos5、6:500~60000

Centos7:1000~60000

60000以上的標識符爲用戶自定義的標識;


有些同學可能會問,爲什麼一個用戶需要登錄名稱和ID兩個標識,在我看來,用戶的登錄名是方便我們計算機使用者去使用的,因爲在計算機代表一個用戶的一串二進制數,不方便人去記憶,也不好理解,同樣的計算機也不好理解人的語言,所以便設置了兩個標識,這樣既方便計算機去識別,也方便用戶去記憶,默認的root用戶的標識符是0,linux中提供了上線爲60000的用戶標識符,這個可以滿足大部分計算機使用者的需求了


當我們建立了一個用戶賬戶之後,需要解決的就是如何去驗證這個賬戶了,這就是名稱解析

名稱解析:

名字 <--> ID

解析庫:/etc/passwd

系統利用解析庫完成認證機制:驗證登錄用戶是否是你聲稱的那個人

認證庫:

用戶的認證信息庫:/etc/shadow

組的認證信息庫:/etc/group


先來說解析庫,解析庫就是linux系統目錄下的一個文件,裏面存儲的是用戶的認證信息,但這樣感覺和接下來要講的用戶的認證信息庫就有點沒有區別了,這個問題暫時無法解決。


先說組的認證信息庫吧,其實我還是不是很理解組存在的意義,可能是爲了方便管理,這個問題也亟待解決,先把這個概念記住,在/etc/group下可以看到組的認證信息


下面再說一下密碼認證機制:

設置密碼的一般性策略:

1.儘量使用隨機字串作爲密碼

2.密碼的長度一般不要少於8個字符

3.密碼中至少包括大寫字母、小寫字母、數字和標點符號四類字符中的三類

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


這個感覺沒啥可講的,大家都能理解。


因爲密碼信息是保存在計算機中的,所以爲了防止其他用戶去竊取這些密碼信息,保存到認證庫中得密碼信息是經過加密保存的,其中主要是Hash單項加密算法


Hash單項加密算法:抽取原始數據的特徵信息,數據指紋

單項加密算法的特徵:

1.只要數據相同,其加密結果就必然相同;

2.無論數據多大,其加密結果定長輸出;

3.雪崩效應;

4.不可逆;


前兩條應該不難理解,主要說一下雪崩效應和不可逆特性

雪崩效應說的是密碼當中某些小的不同在經過加密後會使得兩者加密之後的結果完全不一樣,這在唯一程度上加強了密碼的安全性,可逆性就是說的是,經過加密後的密碼不會被還原回來,我就納了悶了,既然不可逆,計算機是怎麼匹配的,很神奇。


下面再介紹幾種常用的加密算法

1.md5:message digest,消息摘要,128bit定長輸出;

2.sha1:Secure Hash Algorithm,安全的hash算法,160bit定長輸出;

3.sha224

4.sha256

5.sha384

6.sha512


前面對應的編號就是在linux系統中其對應的編號


爲了解決兩個用戶密碼相同該如何識別的問題,linux開發者想到了隨機數的概念,就是在加密後的結果中插入任意的隨機數,隨機數的獲取主要有以下兩種方法


/dev/random:僅僅是從熵池中返回隨機數,如果熵池隨機數耗盡,則進程被阻塞

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


熵池的概念自己總結的不好所有百度了一下,大概的意思就是把系統環境的噪聲數據放到特定的文件中形成熵池


還有一種就是僞隨機數,僞隨機數其實是計算機自己根據某種算法生成的隨機數,在統計樣本足夠大的情況下,還是有規律可言的,所以叫做僞隨機數



最終驗證字符串:算法+salt+密碼

在認證庫中存放的信息:$6$salt$crytped_passwd

這樣一個密碼的加密後的就形成了,可難爲了Linux開發者了。。。



接下來說說用戶組的概念:

用戶組:將具有某些相同或相似屬性的用戶聯繫在一起以便集中授權的容器

貌似關於組的疑問解決了呢。。。方便集中授權,簡單粗暴,跟用戶的分類一樣,組的分類也分爲以下幾類


管理員組:

普通用戶組:

   系統組:

   登陸組:

 這些相關的內容大家可以參照用戶的相關概念加以理解


說完了組的概念,同樣的系統是怎麼識別組的組的呢,跟用戶一樣,用戶組的標識方法也分爲組名和組ID


組名:方便操作者使用的;

組的ID(GID):爲系統提供組標識;

管理員組:0

系統組:

Centos5、6:1-499

Centos7:1-999

登陸組:

Centos5、6:500-60000

Centos7:1000-60000

解析庫:/etc/group


組也需要認證,組也有認證庫:/etc/gpasswd


組也需要密碼保護:


如果組沒有設置密碼保護的話,則不能隨時加入

這項概念與用戶的概念差不多,大家結合着上面自行理解。


下面分別以用戶爲核心和根據所容納的用戶來對組進行一下簡單的分類


以用戶爲核心來對組進行分類:

用戶的主組(基本組):Primary Group,對於用戶來講,這樣的組必須要有,且只能有一個。

用戶的附加組(附屬組,額外組):Addtion Group,這樣的組對於用戶來說,可以沒有,也可以有多個。

打擊可以這麼理解,對於一個用戶來說,他具有的特性肯定不止一個,而且肯定有主要特性和次要特性,就像哲學中所說的主要矛盾和次要矛盾,對於歸納了用戶主要特性的組就稱之爲這個用戶的主組,歸納了用戶次要的特性的組就叫附加組。


根據組所容納的用戶來分

私有組:組名與用戶登陸名相同,並且組中只有此用戶

公共組:組中可以包含其他多個不同用戶


注意:默認情況下,用戶的主要組都是其私有組

其實我很不理解爲什麼要有私有組這個東西,既然你組存在的意義是方便集中授權,你私有組只有一個組,怎麼就方便了,這個問題暫時放下。


說完了用戶和組的概念,接下來就該說說用戶合租的管理了,涉及命令的內容比較多,可能比較枯燥了。。。


組管理相關的命令:

1.groupadd

2.groupdel

3.groupmod



用戶管理相關的命令:

useradd、userdel、usermod

認證管理相關的命令:

passwd、gpasswd、chage

其他的相關管理命令:

chsh、finger、su、id


組管理命令:

1.groupadd:

groupadd:新建組賬戶,添加組

groupadd [選項] group

-g gid:在創建組賬戶的時候,指定組賬戶的GID,如果不使用該選項指定,那麼系統會選擇在組解析文件中出現的不大於60000的最大GID加1;

注意:如果系統中最大的GID已經是60000了,則系統跳過60000尋找第二個最大的ID加1

-r:創建系統組,意思就是創建一個GID在1-999(1-499)之間的組

關於groupadd命令大家掌握這麼多就差不多了


2.groupmod:

修改組的相關屬性信息

groupmod [選項] GROUP

-g gid:修改組賬戶的ID

-n NEW_GROUPNAME:修改組名


3.groupdel:

刪除組賬戶

groupdel [選項] GROUP

注意:如果某個組是某個用戶的主要組或私有組,則該組無法被刪除(爲啥無法被刪除?)




用戶管理命令:

useradd:添加用戶賬戶

useradd [選項] 登錄

選項:

-c,--comment’COMMENT’:在創建用戶時,爲用戶添加註釋信息,一般爲全名

-d, --homeHOME_DIR:在創建用戶的時候爲用戶指定家目錄的絕對路徑,被指定的目錄應該是事先不存在的目錄

-g, --gidGROUPNAME:在創建用戶時爲用戶指定主組

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:在創建用戶時,爲用戶添加附加組

-k, --skelSKEL_DIR

-m, --create-home:在創建用戶時強制性的爲用戶創建家目錄

-M:在創建用戶時,不會創建用戶的家目錄,即使在/etc/login.defs中的CREATE_HOME的值爲YES也不創建

-r, --system:創建系統賬戶

-u, --uidUID:在創建用戶的時候爲用戶指定UID,這個UID可以超出60000的限制

-s, --shell/PATH/TO/SHELL:在創建用戶的時候,爲用戶指定默認shell

-D, --defaults:顯示或修改用戶默認屬性值

    -s, --shell/PATH/TO/SHELL:修改/etc/default/useradd 文件中shell的默認值


Usermod:修改用戶賬戶信息

選項:

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

-g, --gidGROUP:修改用戶的主要組

-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用戶的附加組爲列表中的組

-a, --append:與-G選項用時使用,給用戶添加新的附加組

-d, --home/PATH/TO/HOME_DIR:修改用戶的家目錄

-m, --move-home:與-d選項同時使用,將舊的家目錄中的數據移動至新家之中

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

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

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

-L, --lock:鎖定用戶的密碼

-U, --unlock:解鎖用戶密碼


userdel:刪除用戶賬戶

userdel [選項] 登錄名

選項:

-r, --remove:刪除用戶的同時,清除用戶的家目錄


補充:也不知道老師啥時候講的

解析庫的內容格式

/etc/passwd:

name:password:UID:GID:GECOS:directory:shell

name:登錄名

password:密碼字段,現在在使用了shadow的機制中,通常使用x作爲佔位符

UID:用戶的ID

GID:此用戶主要組的ID

GECOS:comment,表示註釋類的信息,現在一般都會用來存放用戶的說明信息或全名

Directory:用戶的家目錄的絕對路徑

Shell:用戶的默認登陸shell的絕對路徑


/etc/group:

group_name:password:GID:user_list

group_name:組名

password:組密碼佔位符,默認爲空

GID:組的ID

user_list:以該組爲附加組的用戶的列表


/etc/shadow:

login name:encrypted password:date of password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

login name:用戶的登錄名

encrypted password:加密了的密碼

格式:$算法$salt$真正意義的加密密碼

如果該位置爲!:則表明用戶的密碼被禁用

如果該位置爲*:則表明該用戶爲系統用戶,不能登錄

如果該字段爲空:則表明該用戶無需輸入密碼即可登錄系統,不推薦使用

Date of password change:

相對時間概念,相對於1970年1月1日到最後一次修改密碼的那天的天數

Minimum password age:

在多長時間之內無法修改密碼,默認值爲0,意即:隨時可以修改密碼,如果是非0的其他數字,意思是在這麼長的天數裏不能改密碼

Maximum password age:

在多長時間之後密碼過期,默認值爲99999

Password warning period:

密碼過期之前的友善提醒天數,默認值爲7天

Password inactivity period:

密碼過期過後的寬限期,默認爲-1,意思是永久寬限期

Account expiration date:

一個用戶賬戶密碼過期的日期,這是一個絕對的過期期限xxxx/xx/xx

Reserved field:

保留字段,以備以後使用


/etc/gpasswd:

Group name:encrypted password:administrators:members



接下來是與用戶認證相關的一些命令:

Passwd:設置和查看用戶的密碼信息

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

1.如果省略用戶名,意味着更改當前登錄用戶的密碼

2.如果指定用戶名,就更改指定用戶的密碼,只能root使用


選項的使用:

-l, --lock:鎖定密碼

-u, --unlock:解鎖密碼

相比較usermod的-L、-U而言,其優先級更高

如果使用usermod -L鎖定的用戶密碼,可以使用passwd -u解鎖,但是使用passwd-l鎖定的用戶密碼,不可以使用usermod -U解鎖

-d, --delete:刪除用戶密碼:將/etc/shadow文件中第二字段清空

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

--stdin:藉助於管道將輸入數據流當做標準輸入信息來送給passwd命令

Echo “password” | passwd --stdin USERNAME


組認證相關命令:

gpasswd:

gpasswd [選項] group

選項:

-a, --adduser:向名爲 group 的組中添加用戶 user

-d, --deleteuser:從名爲 group 的組中移除用戶 user


其他命令:

su:Switch user 切換用戶身份

 Su USERNAME:部分切換,半切換,切換用戶的時候,不會重新讀取用戶的配置文件,因此,用戶並沒有登錄行爲,所以工作環境不初始化

 Su - USERNAME:登錄式切換或完全切換,在切換用戶的時候,重新讀取目標用戶的配置文件,並且初始化工作環境,相當於Su -l USERNAME

-c COMMAND:並不會切換用戶身份,而是以目標用戶的身份執行某命令

使用su命令的時候,從root切換到普通用戶時,無需密碼,但普通用戶進行切換時,必須給出目標用戶的密碼:

進行用戶切換之後,不要連續切換,而是用exit命令返回之前的用戶


Newgrp GROUPNAME:臨時更改當前登錄用戶的主要組,使用exit命令返回之前的狀態


id:顯示真實的和有效的用戶和組的ID

真實的ID:在/etc/passwd定義的用戶的ID和GID

有效的ID:在當前生效的用戶的ID和GID

id [OPTION]... [USER]

-u, --user:只顯示用戶有效的ID

-g, --group:只顯示用戶有效的GID

-G, --groups:顯示用戶所有有效的GID

-n, --name:以名稱來代替ID進行顯示


此次博客的內容差不多到這就結束了,沒想到可以寫這麼多,本以爲最多一個小時就可以寫完,沒想到用了兩個多小時,不過自己梳理了一遍確實通透了一些,雖然是迫於老師的壓力寫的吧,不過好像有點上癮呢。。。下星期再見吧!!!!


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