一、token
1. 定義
令牌,當(dāng)用戶通過用戶名和密碼通過系統(tǒng)用戶數(shù)據(jù)庫,成功登錄系統(tǒng)后,系統(tǒng)會頒發(fā)一個令牌給用戶。用戶訪問資源時需要提交令牌,資源再根據(jù)令牌權(quán)限(UID、GID、groups)判斷用戶是否有權(quán)限訪問。
如果用戶已經(jīng)登錄系統(tǒng),此時更新令牌,需要重新登錄才能獲取最新的令牌。
二、UID
1. 管理員
root:0。
2. 普通用戶
1~65535
(1) 系統(tǒng)用戶
CentOS6:1~499;
CentOS7:1~999。
(2) 登錄用戶
CentOS6:500+;
CentOS7:1000+。
3. 實戰(zhàn)功能
(1) UID賦值
正常情況下,系統(tǒng)會掃描先存在的UID,并按照現(xiàn)有的UID最大值遞增,前提是該UID在范圍內(nèi)。
三、GID
1. 定義
簡化授權(quán)操作;
Linux允許用戶和組同名,且在默認(rèn)情況下,創(chuàng)建用戶時,系統(tǒng)會自動創(chuàng)建一個同名的組(私有組),并把用戶加入到私有組中。
2. 管理員組
root:0。
3. 普通組
(1) 系統(tǒng)組
CentOS6:1~499;
CentOS7:1~999。
(1) 普通組
CentOS6:500+;
CentOS7:1000+。
四、安全上下文
1. 定義
進程所能訪問資源的權(quán)限取決于進程的運行者的身份、運行者所屬的組和SELinux等……
五、組的類別
1. 定義
組和用戶是多對多的關(guān)系,一個組可以包含多個用戶,一個用戶也可以加入多個組。
如果一個用戶加入多個組,那么他的權(quán)限是多個組所累加的。
2. 主要組
用戶必須屬于一個且只有一個主組;
組名同用戶名,且僅包含一個用戶,私有組。
3. 附加組
一個用戶可以屬于零個或多個輔助組。
六、用戶和組的配置文件
1. 與用戶相關(guān)
(1) /etc/passwd
存放用戶及其屬性信息。
一般不建議直接修改該文件內(nèi)的內(nèi)容,使用參數(shù)相應(yīng)的命令進行修改。
系統(tǒng)中可以有多個管理員,系統(tǒng)會根據(jù)/etc/passwd的用戶列表順序來顯示用戶名(即排序較后的管理員登錄后所顯示的用戶信息還是排序最前的管理員)。
如果/etc/passwd里沒有用戶的UID為0(即管理員),則所有用戶都無法登錄系統(tǒng),且系統(tǒng)重啟后將死機無法啟動。
如果/etc/passwd有用戶的家目錄不存在,則該用戶登錄后會在根目錄。
參數(shù)
account
用戶名
password
密碼(新系統(tǒng)已用x代替)
UID
用戶ID
GID
主組ID
GECOS
描述信息
directory
用戶家目錄
shell
使用的shell類型
查看用戶描述信息
安裝
rpm -ivh /misc/cd/Packages/finger-0.17-40.el6.x86_64.rpm
(2) /etc/shadow
存放用戶密碼及其相關(guān)屬性。
屬性
login name
用戶名
encrypted password
加密過的口令:
CentOS5:$1(md5,已被破解);
CentOS6:$6(sha512);
CentOS7:$6(sha512)。如果用戶沒有設(shè)置密碼,該域會以兩個!填充,代表鎖定,無法登錄系統(tǒng)。如果把兩個!刪除,該用戶就能免認(rèn)證登錄。
date of last password change
最近修改密碼的時間(距離1970年1月1日);
如果值為0,對應(yīng)用戶在下次登錄時要修改密碼。
minimum password age
最短密碼有效期,默認(rèn)為0,即隨時可以修改。
maximum password age
最長密碼有效期,默認(rèn)為99999。
password warning period
密碼警告期,默認(rèn)提前7天通知準(zhǔn)備過期。
password inactivity period
密碼寬限期。
account expiration date
賬號有效期。
reserved field
保留字段,為未來的使用保留下來的。
(3) /etc/login.defs
用戶相關(guān)設(shè)置
(4) /etc/default/useradd
新用戶默認(rèn)設(shè)置。
(5) /etc/skel
新建用戶家目錄模板目錄。
2. 與組相關(guān)
(1) /etc/group
組機器屬性信息。
屬性
用戶組名;
組口令:建議不設(shè)置,否則用戶知道密碼后隨意加入組中;
組ID:如果創(chuàng)建用戶時不設(shè)置組ID,那么該用戶默認(rèn)加入到組ID為100的users組;
組成員(附加組)。
(2) /etc/gshadow
組密碼及其相關(guān)屬性。
屬性
用戶組名;
組口令:建議不設(shè)置,否則用戶知道密碼后隨意加入組中;
組成員關(guān)系:組長,可以設(shè)置多個;
組成員(附加組)。
3. 實戰(zhàn)功能
(1) /etc/passwd顯示或不顯示密碼
pwunconv
執(zhí)行pwunconv命令后可以使/etc/passwd顯示加密后的用戶密碼。
pwconv
執(zhí)行pwunconv命令后可以使/etc/passwd不顯示加密后的用戶密碼。
(2) 指定其他用戶為管理員
在/etc/passwd中把指定用戶的UID值修改為0。
(3) 修復(fù)由于/etc/passwd里沒有用戶的UID為0導(dǎo)致系統(tǒng)重啟后將死機無法啟動
重啟系統(tǒng)后,進入系統(tǒng)選擇界面,按按鍵e,跳轉(zhuǎn)界面后,在最后一行末尾追加init=/bin/bash。進入系統(tǒng)后,執(zhí)行mount -o rw.remount /命令以可讀寫的方式加載根分區(qū),重新編輯/etc/passwd內(nèi)容,重啟系統(tǒng)后解決問題。
(4) 禁止用戶登錄系統(tǒng)
/usr/sbin/nologin
使用chsh -s /usr/sbin/nologin命令把用戶的shell類型修改成/usr/sbin/nologin,同時修改/etc/passwd內(nèi)的用戶shell類型,該用戶將無法登錄系統(tǒng),su命令也無法切換。
/usr/sbin/nologin一般為系統(tǒng)用戶(程序、進程使用的賬號)的shell類型。
(5) 新建用戶替換舊用戶,權(quán)限不變
/etc/passwd
/etc/shadow
修改/etc/passwd和/etc/shadow,把舊用戶名改成新用戶名,ID不變,權(quán)限不變。
(6) 修改用戶主組
如果用戶不在組中,使用newgrp命令需要輸入正確組口令才能修改用戶主組;
如果用戶已經(jīng)在組中(附加組),使用newgrp命令不需要輸入正確組口令就能修改用戶主組。
七、用戶家目錄
1. 定義
在新建用戶時,系統(tǒng)會自動從/etc/skel/目錄復(fù)制出相關(guān)配置文件到用戶家目錄。
2. 實戰(zhàn)功能
(1) 修改用戶家目錄
方法1:
mkdir -m 777 USERNAME_DIRECTORY
chmod 777 USERNAME_DIRECTORY
cp -r /etc/skel/.[^.] USERNAME_DIRECTORY*
先賦予用戶家目錄的權(quán)限,然后把/etc/skel/里的隱藏文件都復(fù)制到用戶新的家目錄。
方法2
cp -r /etc/skel USERNAME_DIRECTORY
chown -R USERNAME:GROUP USERNAME_DIRECTORY
chmod 777 USERNAME_DIRECTORY
先把/etc/skel/整個目錄復(fù)制,然后賦予目錄所有者和所有組及目錄權(quán)限。
八、創(chuàng)建用戶
1. 實戰(zhàn)功能
(1) 集群環(huán)境中確保相同用戶UID相同
useradd -u
創(chuàng)建用戶時使用useradd -u命令手工指定用戶UID,確保多臺服務(wù)器用戶UID相同。
(2) 在同一系統(tǒng)下UID相同
useradd -uo
使用useradd -uo命令可以創(chuàng)建用戶并手工指定用戶UID時不檢查UID的唯一性,系統(tǒng)會判斷系統(tǒng)UID的兩個用戶為同一個用戶,以先創(chuàng)建為優(yōu)。
(3) 指定用戶家目錄
useradd -d
在實際工作中,創(chuàng)建給服務(wù)使用的賬號可以手工指定服務(wù)的目錄為賬號家目錄,服務(wù)的賬號直接就對該目錄具有完全的權(quán)限,不需要后續(xù)再修改。
(4) 應(yīng)用程序賬號指定為系統(tǒng)用戶,指定shell類型為/sbin/nologin,并創(chuàng)建家目錄
useradd -s /sbin/nologin -r -m USERNAME
在實際工作中,給應(yīng)用程序使用的賬號的shell類型一般為/sbin/nologin,且該賬號是給服務(wù)進程使用,所以賬號類型為系統(tǒng)賬號。
使用useradd -r命令創(chuàng)建系統(tǒng)用戶時,系統(tǒng)默認(rèn)不會創(chuàng)建用戶家目錄,可以需要跟上-m選項,給系統(tǒng)用戶創(chuàng)建指定家目錄。
(5) 批量創(chuàng)建用戶并設(shè)置密碼
newusers
chpasswd
useradd命令只能一次創(chuàng)建一個用戶,可以先編寫好用戶列表,用戶列表格式與/etc/passwd格式一致,然后使用newusers命令批量創(chuàng)建用戶。
執(zhí)行chpasswd命令,按照USERNAME:PASSWORD格式批量創(chuàng)建用戶;也可以先編寫用戶密碼列表文件,內(nèi)容格式為USERNAME:PASSWORD,然后使用cat PASSWORD.TXT chpasswd批量創(chuàng)建用戶密碼。
九、用戶屬性修改
1. 實戰(zhàn)功能
(1) 刪除用戶所有附加組
usermod -G ""
usermod -G USERNAME
執(zhí)行usermod -G ""命令,由于引號內(nèi)為空,所以會把用戶的附加組覆蓋為空;usermod -G USERNAME命令,默認(rèn)用戶的附加組為用戶同名的組,把用戶同名的組覆蓋用戶附加組。
十、切換用戶
1. 實戰(zhàn)功能
(1) 什么時候用完全切換,什么時候用不完全切換
如果切換的用戶也要訪問前以用戶當(dāng)前目錄,則使用不完全切換。
完全切換等價于重新登錄,工作環(huán)境都會切換;
不完全切換只是切換身份,環(huán)境信息并未切換。
十一、用戶組操作
1. 實戰(zhàn)功能
(1) 用戶組無法被刪除
要刪除用戶組,前提是該用戶組非任何用戶的主組。
十二、刪除用戶
1. 實戰(zhàn)功能
(1) 用戶無法被刪除
如果用戶正在執(zhí)行程序,則該用戶無法被正常刪除。需要先把用戶退出系統(tǒng)再進行刪除操作;或者執(zhí)行userdel -f命令強制刪除。
十三、文件權(quán)限
1. 實戰(zhàn)功能
(1) 修改文件所有者和所有組
如果文件的所有者是普通用戶,不能修改文件所有者屬性,管理員用戶可以修改;
如果文件的所有者(普通用戶)在指定組中,可以把文件的所有組權(quán)限改成指定組,否則不能修改,管理員沒有限制。
(2) 指定文件只能追加、清空內(nèi)容,不能查看內(nèi)容
chmod =w
一旦對文件執(zhí)行了chmod =w命令,用戶只能對該為文件追加、清空內(nèi)容,無法使用文本編輯工具追加,更無法查看內(nèi)容。
(3) 刪除文件
刪除文件的權(quán)限由文件所在目錄決定,因為刪除文件相當(dāng)于把修改目錄里的文件列表。目錄是特殊文件,目錄存儲的內(nèi)容就是文件列表。如果要刪除目錄內(nèi)的文件,就要對目錄有寫權(quán)限,才有能力修改目錄內(nèi)的文件列表。
(4) 目錄權(quán)限
如果用戶沒有目錄的讀權(quán)限,能進入目錄,無法查看目錄下的文件列表,但能查看、修改、創(chuàng)建目錄下的文件(前提是有文件的權(quán)限)的內(nèi)容;
如果用戶沒有目錄的執(zhí)行權(quán)限,無法進入目錄,無法查看目錄下的文件詳細屬性,也無法查看目錄下的文件內(nèi)容;
如果用戶有目錄的寫權(quán)限,但沒有執(zhí)行權(quán)限,也不能刪除、創(chuàng)建目錄下的文件。讀權(quán)限和執(zhí)行權(quán)限是目錄比較基礎(chǔ)的權(quán)限,要么全給,要么都不給。
(5) 用戶獲取文件權(quán)限順序
如果用戶為文件所有者,將只看所有者權(quán)限;否則繼續(xù)判斷用戶是否屬于文件所有組,如果屬于文件所有組,將只看所有組權(quán)限;如果用戶并非文件所有者或所有組,則只看其他的權(quán)限。權(quán)限不會累加。
(6) 遞歸賦予文件執(zhí)行權(quán)限
chmod -R +X
chmod -R +x
如果執(zhí)行chmod -R +x命令將對目錄下所有文件(目錄、文件)都賦予執(zhí)行權(quán)限;如果執(zhí)行chmod -R +X命令將只對目錄和已經(jīng)有執(zhí)行權(quán)限的文件賦予執(zhí)行權(quán)限,而其他文件一律不賦予執(zhí)行權(quán)限。
(7) 執(zhí)行程序
如果要執(zhí)行程序,前提是程序所在的目錄要有執(zhí)行權(quán)限。
(8) 遞歸賦予權(quán)限
chmod -R /*
遞歸賦予權(quán)限非常危險,危險程度不差于rm -rf /*,一旦執(zhí)行無法恢復(fù)。
2. 權(quán)限
管理員不受讀寫權(quán)限限制,但受執(zhí)行權(quán)限限制。
權(quán)限是否生效要看文件系統(tǒng)的格式,因為權(quán)限、所有者、所有組這些元數(shù)據(jù)并不是由操作系統(tǒng)所決定,而是由文件系統(tǒng)決定的,因為數(shù)據(jù)是存放在文件中,文件由文件系統(tǒng)進行管理。傳統(tǒng)Linux文件系統(tǒng)支持這些屬性的修改,如:ext系列和xfs。
(1) r(4)
read,讀權(quán)限。
一些特殊文件(包括二進制文件),沒必然要設(shè)置讀權(quán)限;一般是對文本文件設(shè)置讀權(quán)限。
(2) w(2)
write,寫權(quán)限。
一些特殊文件(包括二進制文件),沒必然要設(shè)置寫權(quán)限;一般是對文本文件設(shè)置寫權(quán)限。
(3) x(1)
excute,執(zhí)行權(quán)限。
一般不對文本文件設(shè)置執(zhí)行權(quán)限。
3. 對象
1. u
owner,所有者。
2. g
group,所有組。
3. o
other,其他。
4. 文件默認(rèn)權(quán)限計算
(1) 文件
默認(rèn)權(quán)限 = 666 - umask:對結(jié)果進行觀察,如果結(jié)果有奇數(shù)就再加1,偶數(shù)則不變。
(2) 目錄
默認(rèn)權(quán)限 = 777 - umask。
5. 特殊權(quán)限
(1) SUID
定義:
數(shù)字法以4表示,占據(jù)所有者的執(zhí)行權(quán)限位。
繼承二進制程序所有者的權(quán)限;
作用在二進制程序的所有者的執(zhí)行位上。當(dāng)二進制程序指定了SUID權(quán)限后,用戶運行該程序時,就會繼承二進制程序所有者的權(quán)限,臨時提升權(quán)限。只適合應(yīng)用在二進制可執(zhí)行的程序上。
如果程序的所有者有執(zhí)行權(quán)限,為s,如果程序的所有者沒有執(zhí)行權(quán)限,就為S。
(2) SGID
定義:
數(shù)字法以2表示,占據(jù)所有組的執(zhí)行權(quán)限位。
繼承二進制程序所有組的權(quán)限;
作用在二進制程序的所有組的執(zhí)行位上。當(dāng)二進制程序指定了SGID權(quán)限后,用戶運行該程序時,就會繼承二進制程序所有組的權(quán)限,臨時提升權(quán)限。通常用于創(chuàng)建一個協(xié)作目錄;
一旦某目錄被設(shè)定了SGID,則對此目錄有寫權(quán)限的用戶在此目錄中創(chuàng)建的文件所屬的組為此目錄的屬組;如果程序的所有組有執(zhí)行權(quán)限,為s,如果程序的所有組沒有執(zhí)行權(quán)限,就為S。
(3) Stickly
定義:
粘滯位,數(shù)字法以1表示,占據(jù)其他的執(zhí)行權(quán)限位。
作用在目錄;
在目錄設(shè)置Sticky位,只有文件的所有者或管理員可以刪除該文件,其他用戶(擁有寫權(quán)限)只能修改該文件的內(nèi)容。如果目錄的其他用戶有執(zhí)行權(quán)限,為t,如果程序的所有者沒有執(zhí)行權(quán)限,就為T。
(4) 實戰(zhàn)功能
目錄下的文件繼承目錄的所有組
chmod g+s
chmod 2???
如果給目錄賦予SGID權(quán)限,目錄下新建的文件將繼承目錄的所有組。
使文件不能被刪除、改名和更改
chattr +i
執(zhí)行chattr +/-i命令后,即使使用管理員用戶也無法對文件進行刪除、改名和更改操作。
鎖定文件讀時間
chattr +A
由于有些文件每讀一次更新讀時間意義不大,執(zhí)行chattr +A命令可以鎖定文件atime,無法修改文件讀時間。
6. 訪問控制列表
(1) 定義
ACL,實現(xiàn)靈活的權(quán)限管理。
以+表示。
除了文件的所有者、所屬組和其他人,可以對更多的用戶設(shè)置權(quán)限。
一旦啟用ACL,傳統(tǒng)的組權(quán)限會變成特殊的權(quán)限(mask)。
(2) 生效順序
所有者、自定義用戶、自定義組、其他人;
如果用戶所屬的多個組都被定義了ACL,則該用戶的權(quán)限疊加。
(3) mask
定義:
只影響除所有者和other的之外的人和組的最大權(quán)限。
需要與用戶、組的權(quán)限進行邏輯與運算后,才能變成有限的權(quán)限。
(4) 啟動ACL功能
tune2fs -o acl /dev/分區(qū)
mount -o acl /dev/分區(qū) /目錄
CentOS7默認(rèn)創(chuàng)建的xfs和ext4文件系統(tǒng)具有ACL功能;
CentOS7之前版本,默認(rèn)手工創(chuàng)建的ext4文件系統(tǒng)無ACL功能,需手動增加。在CentOS6上,安裝操作系統(tǒng)時創(chuàng)建并掛載目錄的分區(qū)支持ACL功能,采用ext系列的文件系統(tǒng);而后續(xù)再創(chuàng)建的分區(qū)默認(rèn)不支持ACL功能,需要手工添加ACL功能。
(5) 備份、恢復(fù)文件ACL步驟
cp -a命令、cp -p命令和mv命令都支持ACL。
getfacl -R FILE > ACL.txt
備份文件ACL
setfacl -R -b FILE
清空文件ACL
setfacl -R --set-file=ACL.txt FILE
恢復(fù)文件ACL
setfacl --restore=ACL.txt FILE
恢復(fù)文件ACL
getfacl -R FILE
查看文件ACL