目錄:linux
一、/etc/passwd 用戶文件shell
二、shadow 用戶密碼文件
bash
三、/etc/group 羣組文件服務器
四、/etc/gshadow 羣組密碼文件網絡
五、用戶命令工具
羣組相關命令:測試
rhcsa7 第5題ui
六、主機的細部權限規劃:ACL 的使用編碼
跟使用者帳號有關的有兩個很是重要的文件,一個是管理使用者 UID/GID重要參數的 /etc/passwd ,一個則是專門管理密碼相關數據的 /etc/shadow。加密
跟使用者羣組有關的兩個文件:/etc/group 與 /etc/gshadow。
每一行都表明一個帳號,有幾行就表明有幾個帳號在你的系統中! 不過須要特別留意的是,裏頭不少帳號原本就是系統正常運做所必需要的,咱們能夠簡稱他爲系統帳號,例如 bin, daemon, adm, nobody 等等,這些帳號請不要隨意的殺掉他呢!
每行有7列,每列對應的說明:
1. 帳號名稱:
就是帳號啦!用來提供給對數字不太敏感的人類使用來登入系統的!須要用來對應 UID 喔。例如 root 的UID 對應就是 0 (第三字段);
2. 密碼:
早期 Unix 系統的密碼就是放在這字段上!可是由於這個文件的特性是全部的程序都可以讀取,這樣一來很容易形成密碼數據被竊取, 所以後來就將這個字段的密碼數據給他改放到 /etc/shadow 中了。因此這裏你會看到一個『 x 』,呵呵!
3. UID:
這個就是使用者標識符囉!一般 Linux 對於 UID 有幾個限制須要說給您瞭解一下:
id 範圍 | 該 ID 使用者特性 |
0 (系統管理員) |
當 UID 是 0 時,表明這個帳號是『系統管理員』! 因此當你要讓其餘的帳號名稱 也具備 root 的權限時,將該帳號的 UID 改成 0 便可。 這也就是說,一部系統上 面的系統管理員不見得只有 root 喔! 不過,很不建議有多個帳號的 UID 是 0 啦~容易讓系統管理員混亂! |
1~999 (系統帳號) |
保留給系統使用的 ID,其實除了 0 以外,其餘的 UID 權限與特性並無不同。 根據系統帳號的由來,一般這類帳號又約略被區分爲兩種: |
1000~60000 (可登入帳號) |
給 一 般 使 用 者 用 的。 事實 上 , 目 前 的 linux 核心 (3.10.x 版 ) 已 經 可 以支 持 到 4294967295 (2^32-1) 這麼大的 UID 號碼喔! |
上面這樣說明能夠了解了嗎?是的, UID 爲 0 的時候,就是 root 呦!因此請特別留意一下你的/etc/passwd 文件!
4. GID:
這個與 /etc/group 有關!其實 /etc/group 的觀念與 /etc/passwd 差很少,只是他是用來規範組名與 GID 的對應而已!GID爲初始羣組 (initial group) 』!也就是說,當用戶一登入系統,馬上就擁有這個羣組的相關權限的意思。一般有效羣組的做用是在新建文件。由於是初始羣組, 使用者一登入就會主動取得,不須要在 /etc/group 的第四個字段寫入該帳號的!
5. 用戶信息說明欄:
這個字段基本上並無什麼重要用途,只是用來解釋這個帳號的意義而已!不過,若是您提供使用 finger 的功能時, 這個字段能夠提供不少的訊息呢!本章後面的 chfn 指令會來解釋這裏的說明。
6. 家目錄:
這是用戶的家目錄,以上面爲例, root 的家目錄在 /root ,因此當 root 登入以後,就會馬上跑到 /root 目錄裏頭啦!呵呵! 若是你有個帳號的使用空間特別的大,你想要將該帳號的家目錄移動到其餘的硬盤去該怎麼做? 沒有錯!能夠在這個字段進行修改呦!默認的用戶家目錄在 /home/yourIDname
7. Shell:
咱們在第十章 BASH 提到不少次,當用戶登入系統後就會取得一個 Shell 來與系統的核心溝通以進行用戶的操做任務。那爲什麼預設 shell 會使用 bash 呢?就是在這個字段指定的囉! 這裏比較須要注意的是,有一個 shell 能夠用來替代成讓帳號沒法取得 shell 環境的登入動做!那就是 /sbin/nologin 這個東西!這也能夠用來製做純 pop 郵件帳號者的數據呢!
一樣以『:』做爲分隔符,共9個字段:
1. 帳號名稱:
因爲密碼也須要與帳號對應啊~所以,這個文件的第一欄就是帳號,必需要與 /etc/passwd 相同才行!
2. 密碼:
這個字段內的數據纔是真正的密碼,並且是通過編碼的密碼 (加密) 啦! 你只會看到有一些特殊符號的字母就是了!須要特別留意的是,雖然這些加密過的密碼很難被解出來, 可是『很難』不等於『不會』,因此,這個文件的預設權限是『-rw-------』或者是『----------』,亦即只有 root 才能夠讀寫就是了!你得隨時注意,不要不當心更動了這個文件的權限呢!
另外,因爲各類密碼編碼的技術不同,所以不一樣的編碼系統會形成這個字段的長度不相同。 舉例來講,舊式的 DES, MD5 編碼系統產生的密碼長度就與目前慣用的 SHA 不一樣(注 2)!SHA 的密碼長度明顯的比較長些。由固定的編碼系統產生的密碼長度必須一致,所以『當你讓這個字段的長度改變後,該密碼就會失效(算不出來)』。 不少軟件透過這個功能,在此字段前加上 ! 或 * 改變密碼字段長度,就會讓密碼『暫時失效』了。
3. 最近更動密碼的日期:
這個字段記錄了『更動密碼那一天』的日期,不過,很奇怪呀!在個人例子中怎麼會是 16559 呢?呵呵,這個是由於計算 Linux 日期的時間是以 1970 年 1 月 1 日做爲 1 而累加的日期,1971 年 1 月 1 日則爲 366 啦! 得注意一下這個資料呦!上述的 16559 指的就是 2015-05-04 那一天啦!瞭解乎? 而想要了解該日期可使用本章後面 chage 指令的幫忙!至於想要知道某個日期的累積日數, 可以使用以下的程序計算:
[root@study ~]# echo $(($(date --date="2015/05/04" +%s)/86400+1))
16559
上述指令中,2015/05/04 爲你想要計算的日期,86400 爲每一天的秒數, %s 爲 1970/01/01 以來的累積總秒數。 因爲 bash 僅支持整數,所以最終須要加上 1 補齊 1970/01/01 當天。
4. 密碼不可被更動的天數:(與第 3 字段相比)
第四個字段記錄了:這個帳號的密碼在最近一次被更改後須要通過幾天才能夠再被變動!若是是 0 的話,表示密碼隨時能夠更動的意思。這的限制是爲了怕密碼被某些人一改再改而設計的!若是設定爲 20 天的話,那麼當你設定了密碼以後, 20 天以內都沒法改變這個密碼呦!
5. 密碼須要從新變動的天數:(與第 3 字段相比)
常常變動密碼是個好習慣!爲了強制要求用戶變動密碼,這個字段能夠指定在最近一次更改密碼後, 在多少天數內須要再次的變動密碼才行。你必需要在這個天數內從新設定你的密碼,不然這個帳號的密碼將會『變爲過時特性』。 而若是像上面的 99999 (計算爲 273 年) 的話,那就表示,呵呵,密碼的變動沒有強制性之意。
6. 密碼須要變動期限前的警告天數:(與第 5 字段相比)
當帳號的密碼有效期限快要到的時候 (第 5 字段),系統會依據這個字段的設定,發出『警告』言論給這個帳號,提醒他『再過 n 天你的密碼就要過時了,請儘快從新設定你的密碼呦!』,如上面的例子,則是密碼到期以前的 7 天以內,系統會警告該用戶。
7. 密碼過時後的帳號寬限時間(密碼失效日):(與第 5 字段相比)
密碼有效日期爲『更新日期(第 3 字段)』+『從新變動日期(第 5 字段)』,過了該期限後用戶依舊沒有更新密碼,那該密碼就算過時了。 雖然密碼過時可是該帳號仍是能夠用來進行其餘工做的,包括登入系統取得bash 。不過若是密碼過時了, 那當你登入系統時,系統會強制要求你必需要從新設定密碼才能登入繼續使用喔,這就是密碼過時特性。
那這個字段的功能是什麼呢?是在密碼過時幾天後,若是使用者仍是沒有登入更改密碼,那麼這個帳號的密碼將會『失效』, 亦即該帳號再也沒法使用該密碼登入了。要注意密碼過時與密碼失效並不相同。
8. 帳號失效日期:
這個日期跟第三個字段同樣,都是使用 1970 年以來的總日數設定。這個字段表示: 這個帳號在此字段規定的日期以後,將沒法再使用。 就是所謂的『帳號失效』,此時不論你的密碼是否有過時,這個『帳號』都不能再被使用! 這個字段會被使用一般應該是在『收費服務』的系統中,你能夠規定一個日期讓該帳號不能再使用啦!
9. 保留:
最後一個字段是保留的,看之後有沒有新功能加入。
查詢shadow使用哪一種加密的機制 :authconfig --test | grep hashing
1. 組名:
就是組名啦!一樣用來給人類使用的,基本上須要與第三字段的 GID 對應。
2. 羣組密碼:
一般不須要設定,這個設定一般是給『羣組管理員』使用的,目前不多有這個機會設定羣組管理員啦! 一樣的,密碼已經移動到 /etc/gshadow 去,所以這個字段只會存在一個『x』而已;
3. GID:
就是羣組的 ID 啊。咱們 /etc/passwd 第四個字段使用的 GID 對應的羣組名,就是由這裏對應出來的!
4. 此羣組支持的帳號名稱:
咱們知道一個帳號能夠加入多個羣組,那某個帳號想要加入此羣組時,將該帳號填入這個字段便可。 舉例來講,若是我想要讓 dmtsai 與 alex 也加入 root 這個羣組,那麼在第一行的最後面加上『dmtsai,alex』,注意不要有空格, 使成爲『 root:x:0:dmtsai,alex 』就能夠囉~
[dmtsai@study ~]$ groups #有效與支持羣組的觀察
[dmtsai@study ~]$ newgrp 有效羣組 #有效羣組的切換。想要切換的羣組必須是你已經有支持的羣組。
[dmtsai@study ~]$ exit # 注意!記得離開 newgrp 的環境喔!
newgrp 的運做示意圖
1. 組名
2. 密碼欄,一樣的,開頭爲 ! 表示無合法密碼,因此無羣組管理員
3. 羣組管理員的帳號 (相關信息在 gpasswd 中介紹)
4. 有加入該羣組支持的所屬帳號 (與 /etc/group 內容相同!)
以系統管理員的角度來講,這個 gshadow 最大的功能就是創建羣組管理員。當有使用者想要加入某些羣組時, root 或許會沒有空管理。此時若是可以創建羣組管理員的話,那麼該羣組管理員就可以將那個帳號加入本身管理的羣組中! 能夠免去 root 的忙碌啦!不過,因爲目前有相似 sudo 之類的工具, 因此這個羣組管理員的功能已經不多使用了。
5.一、useradd 命令新建用戶
語法:
選項與參數:
系統已經幫咱們規定好很是多的默認值:
使用 useradd 創建使用者帳號時,會更改的文件:
使用 useradd 創建使用者帳號時,至少會參考:
[root@study ~]# useradd -D #顯示useradd 命令的基本帳號設定的默認值,數據在/etc/default/useradd文件中。
GROUP=100 <==預設的羣組
HOME=/home <==默認的家目錄所在目錄
INACTIVE=-1 <==密碼失效日,在 shadow 內的第 7 欄
EXPIRE= <==帳號失效日,在 shadow 內的第 8 欄
SHELL=/bin/bash <==預設的 shell
SKEL=/etc/skel <==用戶家目錄的內容數據參考目錄
CREATE_MAIL_SPOOL=yes <==是否主動幫使用者創建郵件信箱(mailbox)
[root@study ~]# cat /etc/login.defs #useradd 命令的UID、GID、密碼參數的默認值
MAIL_DIR /var/spool/mail <==用戶默認郵件信箱放置目錄
PASS_MAX_DAYS 99999 <==/etc/shadow 內的第 5 欄,多久需變動密碼日數
PASS_MIN_DAYS 0 <==/etc/shadow 內的第 4 欄,多久不可從新設定密碼日數
PASS_MIN_LEN 5 <==密碼最短的字符長度,已被 pam 模塊取代,失去效用!
PASS_WARN_AGE 7 <==/etc/shadow 內的第 6 欄,過時前會警告的日數
UID_MIN 1000 <==使用者最小的 UID,意即小於 1000 的 UID 爲系統保留
UID_MAX 60000 <==使用者可以用的最大 UID
SYS_UID_MIN 201 <==保留給用戶自行設定的系統帳號最小值 UID
SYS_UID_MAX 999 <==保留給用戶自行設定的系統帳號最大值 UID
GID_MIN 1000 <==使用者自定義組的最小 GID,小於 1000 爲系統保留
GID_MAX 60000 <==使用者自定義組的最大 GID
SYS_GID_MIN 201 <==保留給用戶自行設定的系統帳號最小值 GID
SYS_GID_MAX 999 <==保留給用戶自行設定的系統帳號最大值 GID
CREATE_HOME yes <==在不加 -M 及 -m 時,是否主動創建用戶家目錄?
UMASK 077 <==用戶家目錄創建的 umask ,所以權限會是 700
USERGROUPS_ENAB yes <==使用 userdel 刪除時,是否會刪除初始羣組
ENCRYPT_METHOD SHA512 <==密碼加密的機制使用的是 sha512 這一個機制!
使用 useradd 創建了帳號以後,在默認的狀況下,該帳號是暫時被封鎖的(該帳號是沒法登入),瞧一瞧 /etc/shadow 內的第二個字段就曉得囉~ 下一步得用:
5.二、passwd 命令設定新密碼
語法:
選項與參數:
新的 distributions 是使用較嚴格的 PAM 模塊來管理密碼,這個管理的機制寫在 /etc/pam.d/passwd 當中。而該文件與密碼有關的測試模塊就是使用:pam_cracklib.so,這個模塊會檢驗密碼相關的信息, 而且取代 /etc/login.defs 內的 PASS_MIN_LEN的設定啦!
理論上,密碼最好符合以下要求:
實例:
[root@study ~]# echo "abc543CC" | passwd --stdin vbird2
5.三、chage 更詳細的密碼參數的顯示與設定
語法:
選項與參數:
實例:
[root@study ~]# chage -d 0 agetest #讓『使用者在第一次登入時, 強制她們必定要更改密碼後纔可以使用系統資源
5.四、usermod 帳號相關數據的微調
語法:
選項與參數:
仔細的比對,會發現 usermod 的選項與 useradd 很是相似。-L 與 -U 這兩個選項也與另外一個命令 passwd 的 -l, -u 相同。
5.五、userdel 刪除用戶的相關數據
用戶的數據有:
語法:
選項與參數:
若是該帳號只是『暫時不啓用』的話,那麼將/etc/shadow 裏頭帳號失效日期 (第八字段) 設定爲 0 就可讓該帳號沒法使用,可是全部跟該帳號相關的數據都會留下來! 使用 userdel 的時機一般是『你真的肯定不要讓該用戶在主機上面使用任何數據了!』
另外,其實用戶若是在系統上面操做過一陣子了,那麼該用戶其實在系統內可能會含有其餘文件的。舉例來講,他的郵件信箱 (mailbox) 或者是例行性工做排程 (crontab, 十五章) 之類的文件。 因此,若是想要完整的將某個帳號完整的移除,最好能夠在下達 userdel -r username 以前, 先以『 find /-user username 』查出整個系統內屬於 username 的文件,而後再加以刪除吧!
5.六、id 查詢某人或本身的相關 UID/GID 等等的信息
語法:
範例:查閱 root 本身的相關 ID 信息!
[root@study ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
5.七、finger 顯示用戶相關的信息
這個指令有點危險,因此新的版本中已經默認不安裝這個軟件。
語法:
選項與參數:
命令結果,其實他列出來的幾乎都是 /etc/passwd 文件裏面的東西。列出的信息說明以下:
5.八、chfn 更改本身賬號的相關信息
change finger 的意思。改到/etc/passwd的第五個字段。finger命令能夠顯示出來。這個指令說實在的,除非是你的主機有不少的用戶,不然倒真是用不着這個程序!這就有點像是 bbs裏頭更改你『我的屬性』的那一個資料啦。
語法:
選項與參數:
範例一:vbird1 本身更改一下本身的相關信息!
[vbird1@study ~]$ chfn
Changing finger information for vbird1.
Name []: VBird Tsai test<==輸入你想要呈現的全名
Office []: DIC in KSU<==辦公室號碼
Office Phone []: 06-2727175#356<==辦公室電話
Home Phone []: 06-1234567<==家裏電話號碼
Password:<==確認身份,因此輸入本身的密碼
Finger information changed.
5.九、chsh 修改/etc/passwd文件的第7段Shell
change shell的縮寫。
語法:
選項與參數:
[vbird1@study ~]$ chsh -l
/bin/sh
/bin/bash <==通常默認選項
/sbin/nologin <==所謂:合法不可登入的 Shell 就是這玩意!
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh <==這就是 C shell 啦!
[vbird1@study ~]$ ll $(which chsh)
-rws--x--x. 1 root root 23856 Mar 6 13:59 /bin/chsh
chfn 與 chsh ,都是可以讓通常用戶修改 /etc/passwd 這個系統文件的。這兩個文件的權限是什麼? 必定是 SUID 的功能。
5.十、groupadd 新增羣組
爲了讓使用者的 UID/GID 成對,她們建議新建的與使用者私有羣組無關的其餘羣組時,使用小於 1000 如下的 GID 爲宜。
語法:
選項與參數:
5.十一、groupmod 進行 group 相關參數的修改
選項與參數:
5.十二、groupdel 刪除羣組
語法:
存在用戶的羣組不容許刪除。刪除有用戶的羣組的兩個辦法:
5.1三、gpasswd 羣組管理員功能
# 關於系統管理員(root)作的動做:
選項與參數:
# 關於羣組管理員(Group administrator)作的動做:
選項與參數:
除了本機的帳號以外,咱們可能還會使用到其餘外部的身份驗證服務器所提供的驗證身份的功能!若是你的 Linux 主機要使用到上面提到的這些外部身份驗證系統時,可能就得要額外的設定一些數據了
語法:
rhcsa7 第5題:
請按照如下要求建立用戶、用戶組:
答:
groupadd -g 40000 adminuser
useradd -G adminuser natasha
useradd -G adminuser harry
useradd -s /usr/sbin/nologin sarah
echo redhat | passwd --stdin natasha
echo redhat | passwd --stdin harry
echo redhat | passwd --stdin sarah
usermod -s /sbin/nologin saraha #賬號saraha設置錯誤,此時修改
ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統的 owner,group,others 的read,write,execute 權限以外的細部權限設定。ACL 能夠針對單一使用者,單一文件或目錄來進行r,w,x 的權限規範,對於須要特殊權限的使用情況很是有幫助。
ACL 主要能夠針對如下3方面來控制權限:
使用者 (user):能夠針對使用者來設定權限;
羣組 (group):針對羣組爲對象來設定其權限;
默認屬性 (mask):還能夠針對在該目錄下在創建新文件/目錄時,規範新數據的默認權限。
目前 ACL 幾乎已經預設加入在全部常見的 Linux 文件系統的掛載參數中(ext2/ext3/ext4/xfs 等等)!
6.一、dmesg | grep -i acl #檢查一下核心掛載時顯示的信息
6.二、setfacl #設定某個目錄/文件的 ACL 規範
語法:
選項與參數:
6.三、getfacl #取得某個文件/目錄的 ACL 設定項目
語法:
選項與參數:
getfacl 的選項與 setfacl 相同
# 1. 針對特定使用者的方式:
# 設定規範:『 u:[使用者帳號列表]:[rwx] 』,例如針對 vbird1 的權限規範 rx :
[root@study ~]# touch acl_test1
[root@study ~]# ll acl_test1
-rw-r--r--. 1 root root 0 Jul 21 17:33 acl_test1
[root@study ~]# setfacl -m u:vbird1:rx acl_test1
[root@study ~]# ll acl_test1
-rw-r-xr--+ 1 root root 0 Jul 21 17:33 acl_test1
# 權限部分多了個 + ,且與本來的權限 (644) 看起來差別很大!但要如何查閱呢?
[root@study ~]# setfacl -m u::rwx acl_test1
[root@study ~]# ll acl_test1
-rwxr-xr--+ 1 root root 0 Jul 21 17:33 acl_test1
# 設定值中的 u 後面無使用者列表,表明設定該文件擁有者,因此上面顯示 root 的權限成爲 rwx 了!
# 2. 針對特定羣組的方式:
# 設定規範:『 g:[羣組列表]:[rwx] 』,例如針對 mygroup1 的權限規範 rx :
[root@study ~]# setfacl -m g:mygroup1:rx acl_test1
[root@study ~]# getfacl acl_test1
# 3. 針對有效權限 mask 的設定方式:
# 設定規範:『 m:[rwx] 』,例如針對剛剛的文件規範爲僅有 r :
[root@study ~]# setfacl -m m:r acl_test1
[root@study ~]# getfacl acl_test1
# 4. 針對預設權限的設定方式:
# 設定規範:『 d:[ug]:使用者列表:[rwx] 』
[root@study ~]# setfacl -m d:u:myuser1:rx /srv/projecta
[root@study ~]# getfacl /srv/projecta
rhcsa7 d6:
複製文件/etc/fstab到/var/tmp目錄下,並按照如下要求配置/var/tmp/fstab文件的權限:
答:
sudo cp /etc/fstab /var/tmp/
ll /var/tmp/fstab
sudo setfacl -m u:natasha:rw /var/tmp/fstab
sudo setfacl -m u:harry:--- /var/tmp/fstab
getfacl /var/tmp/fstab