可視化網(wǎng)站建設(shè)軟件百度競(jìng)價(jià)品牌廣告
Linux 帳號(hào)管理與 ACL 權(quán)限設(shè)置
- 1.UID與GID
- 2.`/etc/passwd`
- 3.`/etc/shadow`
- 4.`/etc/group`
- 5.`/etc/gshadow`
- 6.有效群組和初始群組
- 7.賬號(hào)管理
- 7.1 增加、修改、刪除賬戶
- 7.2 增加、修改、刪除群組
- 7.3 實(shí)例
- 8.ACL使用
- 8.1 ACL定義
- 8.2 查詢與設(shè)置ACL
- 9.用戶切換
- 9.1 su
- 9.2 .sudo
- 10. 使用者的特殊 shell 與 PAM 模塊
- 10.1 特殊 shell——`sbin/nologin`
- 10.2 PAM 模塊
- 11. Linux 主機(jī)上的使用者訊息傳遞
- 11.1 查詢系統(tǒng)在線的使用者——`w、who、last、lastlog`
- 11.2 使用者對(duì)談——` write、mesg、wall`
1.UID與GID
UID(User Identifier) 是用戶的唯一標(biāo)識(shí)符,用于識(shí)別系統(tǒng)中的每個(gè)用戶。在用戶管理文件(如 /etc/passwd)中,每個(gè)用戶都有一個(gè) UID。系統(tǒng)使用 UID 而非用戶名來管理文件權(quán)限和其他安全屬性。
GID(Group Identifier)是用戶組的唯一標(biāo)識(shí)符,用于標(biāo)識(shí)用戶所屬的組。在用戶組管理文件(如 /etc/group)中,每個(gè)用戶組都有一個(gè)唯一的 GID。GID 與用戶組相關(guān)聯(lián),幫助系統(tǒng)管理用戶組權(quán)限和文件訪問控制。
與UID、GID相關(guān)的文件有/etc/passwd
、/etc/shadow
、 /etc/group
、/etc/gshadow
。
2./etc/passwd
[root@CentOS7 ~]# head -n 4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
passwd文件有七個(gè)字段:
①帳號(hào)名稱
就是帳號(hào)啦! 用來提供給對(duì)數(shù)字不太敏感的人類使用來登陸系統(tǒng)的! 需要用來對(duì)應(yīng) UID 喔。 例如 root 的 UID 對(duì)應(yīng)就是 0 ( 第三字段) 。
②密碼
早期 Unix 系統(tǒng)的密碼就是放在這字段上! 但是因?yàn)檫@個(gè)文件的特性是所有的程序都能夠讀取, 這樣一來很容易造成密碼數(shù)據(jù)被竊取, 因此后來就將這個(gè)字段的密碼數(shù)據(jù)給他改放到 /etc/shadow 中了。 所以這里你會(huì)看到一個(gè)“ x ”, 呵呵!
③UID
④GID
這個(gè)與 /etc/group 有關(guān)! 其實(shí) /etc/group 的觀念與 /etc/passwd 差不多, 只是他是用來規(guī)范群組名稱與 GID 的對(duì)應(yīng)而已
⑤使用者信息說明欄
這個(gè)字段基本上并沒有什么重要用途, 只是用來解釋這個(gè)帳號(hào)的意義而已! 不過, 如果您提供使用 finger 的功能時(shí), 這個(gè)字段可以提供很多的訊息呢! 本章后面的 chfn 指令會(huì)來解釋這里的說明。
⑥主文件夾
這是使用者的主文件夾, 以上面為例, root 的主文件夾在 /root , 所以當(dāng)root 登陸之后, 就會(huì)立刻跑到 /root 目錄里頭啦
⑦Shell
當(dāng)使用者登陸系統(tǒng)后就會(huì)取得一個(gè) Shell 來與系統(tǒng)的核心溝通以進(jìn)行使用者的操作任務(wù)。 那為何默認(rèn) shell 會(huì)使用 bash 呢? 就是在這個(gè)字段指定的啰.
3./etc/shadow
很多程序的運(yùn)行都與權(quán)限有關(guān), 而權(quán)限與 UID/GID 有關(guān)! 因此各程序當(dāng)然需要讀取/etc/passwd 來了解不同帳號(hào)的權(quán)限。 因此 /etc/passwd 的權(quán)限需設(shè)置為 -rw-r–r–(others可讀) 這樣的情況, 雖然早期的密碼也有加密過, 但卻放置到 /etc/passwd 的第二個(gè)字段上! 這樣一來很容易被有心人士所竊取。所以后來發(fā)展出將密碼移動(dòng)到 /etc/shadow 這個(gè)文件分隔開來的技術(shù), 而且還加入很多的密碼限制參數(shù)在 /etc/shadow 里頭呢。
[root@CentOS7 ~]# head -n 4 /etc/shadow
root:$6$rRQaeWbVRNxqa094$KC7q4h6A591WK.MCYnpwo1J.qjR6hjA0n/B09g1UnjpPNFvIk6R.xiTkQVknGqFYzMCmyktNbwig6tg3NRbrE1::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
shadow文件有九個(gè)字段:
①帳號(hào)名稱
與 /etc/passwd對(duì)應(yīng)
②密碼
這個(gè)字段內(nèi)的數(shù)據(jù)才是真正的密碼, 而且是經(jīng)過編碼的密碼 ( 加密)
③最近更動(dòng)密碼的日期
這個(gè)字段記錄了“更動(dòng)密碼那一天”的日期, 不過, 很奇怪呀! 在我的例子中怎么會(huì)是 18353 呢? 呵呵, 這個(gè)是因?yàn)橛?jì)算 Linux 日期的時(shí)間是以 1970 年 1月 1 日作為 1 而累加的日期, 1971 年 1 月 1 日則為 366 啦! 得注意一下這個(gè)數(shù)據(jù)呦!上述的 18353 指的就是 2015-05-04 那一天啦(18353/366=50.1448年,1970+50=2020)
④密碼不可被更動(dòng)的天數(shù)
如果是 0 的話, 表示密碼隨時(shí)可以更動(dòng)的意思。 這的限制是為了怕密碼被某些人一改再改而設(shè)計(jì)的! 如果設(shè)置為 20 天的話, 那么當(dāng)你設(shè)置了密碼之后, 20 天之內(nèi)都無法改變這個(gè)密碼呦
⑤密碼需要重新變更的天數(shù)
99999 ( 計(jì)算為 273 年)
⑥密碼需要變更期限前的警告天數(shù)
如上面的例子, 則是密碼到期之前的 7 天之內(nèi), 系統(tǒng)會(huì)警告該用戶
⑦密碼過期后的帳號(hào)寬限時(shí)間
⑧帳號(hào)失效日期
⑨保留
看以后有沒有新功能加入
對(duì)于密碼忘記了:
①一般用戶的密碼忘記了: 這個(gè)最容易解決, 請(qǐng)系統(tǒng)管理員幫忙, 他會(huì)重新設(shè)置好你的密碼而不需要知道你的舊密碼! 利用 root 的身份使用 passwd 指令來處理即可。
②root 密碼忘記了: 這就麻煩了! 因?yàn)槟銦o法使用 root 的身份登陸了嘛! 但我們知道 root的密碼在 /etc/shadow 當(dāng)中, 因此你可以使用各種可行的方法開機(jī)進(jìn)入 Linux 再去修改。例如重新開機(jī)進(jìn)入單人維護(hù)模式后, 系統(tǒng)會(huì)主動(dòng)的給予 root 權(quán)限的 bash接口, 此時(shí)再以 passwd 修改密碼即可
4./etc/group
這個(gè)文件就是在記錄 GID 與群組名稱的對(duì)應(yīng)了.
[root@CentOS7 ~]# head -n 4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
①群組名稱
需要與第三字段的 GID 對(duì)應(yīng)
②群組密碼
通常不需要設(shè)置, 這個(gè)設(shè)置通常是給“群組管理員”使用的, 目前很少有這個(gè)機(jī)會(huì)設(shè)置群組管理員啦。同樣的, 密碼已經(jīng)移動(dòng)到 /etc/gshadow 去, 因此這個(gè)字段只會(huì)存在一個(gè)“x”而已;
③GID
④此群組支持的帳號(hào)名稱
我們知道一個(gè)帳號(hào)可以加入多個(gè)群組, 那某個(gè)帳號(hào)想要加入此群組時(shí), 將該帳號(hào)填入這個(gè)字段即可。 舉例來說, 如果我想要讓 dmtsai 與 alex 也加入root 這個(gè)群組, 那么在第一行的最后面加上“dmtsai,alex”, 注意不要有空格, 使成為“root?0:dmtsai,alex ”就可以啰。新版的 Linux 中, 初始群組的用戶群已經(jīng)不會(huì)加入在第四個(gè)字段。
5./etc/gshadow
[root@CentOS7 ~]# head -n 4 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
這個(gè)文件幾乎與/etc/group一樣。以系統(tǒng)管理員的角度來說, 這個(gè) gshadow 最大的功能就是創(chuàng)建群組管理員啦! 那么什么是群組管理員呢? 由于系統(tǒng)上面的帳號(hào)可能會(huì)很多, 但是我們 root 可能平時(shí)太忙碌, 所以當(dāng)有使用者想要加入某些群組時(shí), root 或許會(huì)沒有空管理。 此時(shí)如果能夠創(chuàng)建群組管理員的話, 那么該群組管理員就能夠?qū)⒛莻€(gè)帳號(hào)加入自己管理的群組中! 可以免去 root 的忙碌啦! 不過,由于目前有類似 sudo 之類的工具, 所以這個(gè)群組管理員的功能已經(jīng)很少使用了。
6.有效群組和初始群組
在 Linux 中,每個(gè)用戶都有一個(gè)初始群組(Primary Group)和一個(gè)或多個(gè)有效群組(Secondary Groups),用于決定用戶的權(quán)限和文件訪問控制。
①初始群組
是指用戶的默認(rèn)組,通常在用戶創(chuàng)建文件或目錄時(shí),這些文件或目錄默認(rèn)屬于初始群組。每個(gè)用戶都只能有一個(gè)初始群組,該群組在 /etc/passwd 文件中定義,也就是 /etc/passwd中記錄的GID。
②有效群組(也稱附屬群組或輔助群組)
是用戶所屬的其他群組,可以賦予用戶更多權(quán)限。一個(gè)用戶可以屬于多個(gè)有效群組,允許用戶訪問這些組所擁有的文件和資源。有效群組信息存儲(chǔ)在 /etc/group 文件中。
查詢一個(gè)用戶的初始群組和有效群組:
[root@CentOS7 ~]# groups
root
[root@CentOS7 ~]# su fle
[fle@CentOS7 root]$ groups
fle wheel
[fle@CentOS7 root]$
可以使用groups
命令來查看一個(gè)用戶的群組信息,第一個(gè)出現(xiàn)的就是其初始群組。
可以使用newgrp
來切換有效群組:
[fle@CentOS7 ~]$ touch /tmp/file
[fle@CentOS7 ~]$ ll /tmp/file
-rw-rw-r-- 1 fle fle 0 11月 15 14:32 /tmp/file
[fle@CentOS7 ~]$ newgrp wheel
[fle@CentOS7 ~]$ touch /tmp/file2
[fle@CentOS7 ~]$ ll /tmp/file2
-rw-r--r-- 1 fle wheel 0 11月 15 14:33 /tmp/file2
[fle@CentOS7 ~]$ ll /tmp/file
-rw-rw-r-- 1 fle fle 0 11月 15 14:32 /tmp/file
[fle@CentOS7 ~]$ newgrp root
密碼:
newgrp: failed to crypt password with previous salt: 無效的參數(shù)
從上面可以看到,切換fle用戶的有效群組后,其創(chuàng)建的文件的group變?yōu)榱藈heel。但要注意的是,切換的群組必須為原本已有的群組,比如fle只有fle和wheel兩個(gè)群組,就不能切換為root群組。
Tips:newgrp切換成功后,是會(huì)變換到一個(gè)新的shell環(huán)境的
7.賬號(hào)管理
7.1 增加、修改、刪除賬戶
對(duì)應(yīng)的命令分別是useradd、usermod、userdel
,此外,一般增加賬戶輸入密碼時(shí)使用passwd
.
下面使用root身份在CentOS7上新建一個(gè)Flx用戶:
[root@CentOS7 ~]# grep 'flx' /etc/passwd
[root@CentOS7 ~]# grep 'fle' /etc/passwd
fle:x:1000:1000:fle:/home/fle:/bin/bash
[root@CentOS7 ~]# useradd flx
[root@CentOS7 ~]# grep 'flx' /etc/passwd
flx:x:1005:1005::/home/flx:/bin/bash
[root@CentOS7 ~]# grep 'flx' /etc/shadow
flx:!!:20042:0:99999:7:::
[root@CentOS7 ~]# grep 'flx' /etc/group
flx:x:1005:
上面創(chuàng)建了一個(gè)用戶,可以看到useradd是有固定的初始設(shè)置的,具體如下:
[root@CentOS7 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
除了以root身份進(jìn)行賬戶信息的修改,也可以用usermod
命令進(jìn)行修改:
[root@CentOS7 ~]# usermod -l flz flx
[root@CentOS7 ~]# grep 'flx' /etc/passwd
flz:x:1005:1005::/home/flx:/bin/bash
[root@CentOS7 ~]# su - flz
[flz@CentOS7 ~]$ usermod -l flx flz
usermod: user flz is currently used by process 22520
[flz@CentOS7 ~]$ su - fle
密碼:
上一次登錄:五 11月 15 14:30:18 CST 2024pts/0 上
[fle@CentOS7 ~]$ usermod -l flx flz
usermod: Permission denied.
usermod:無法鎖定 /etc/passwd,請(qǐng)稍后再試。
接下來刪除創(chuàng)建的用戶:
[fle@CentOS7 ~]$ grep 'flz' /etc/passwd
flz:x:1005:1005::/home/flx:/bin/bash
[fle@CentOS7 ~]$ su -
密碼:
上一次登錄:五 11月 15 20:54:53 CST 2024pts/0 上
[root@CentOS7 ~]# userdel -rf flz
[root@CentOS7 ~]# grep 'flz' /etc/passwd
Tips:id 這個(gè)指令則可以查詢某人或自己的相關(guān) UID/GID 等等的信息.
[root@CentOS7 ~]# id fle
uid=1000(fle) gid=1000(fle) 組=1000(fle),10(wheel)
7.2 增加、修改、刪除群組
[root@CentOS7 ~]# grep 'Openwifi_Group' /etc/group
[root@CentOS7 ~]# groupadd Openwifi_Group
[root@CentOS7 ~]# grep 'Openwifi_Group' /etc/group
Openwifi_Group:x:1006:
[root@CentOS7 ~]# groupmod -n OpenLora_Group Openwifi_Group
[root@CentOS7 ~]# grep 'OpenLora_Group' /etc/group
OpenLora_Group:x:1006:
[root@CentOS7 ~]# groupdel -f OpenLora_Group
[root@CentOS7 ~]# grep 'OpenLora_Group' /etc/group
[root@CentOS7 ~]#
7.3 實(shí)例
①
[root@CentOS7 ~]# groupadd mygroup1
[root@CentOS7 ~]# useradd -c "1st user" -G mygroup1 myuser1
[root@CentOS7 ~]# useradd -c "2nd user" -G mygroup1 myuser2
[root@CentOS7 ~]# useradd -c "3rd user" -s /sbin/nologin myuser3
[root@CentOS7 ~]# echo "password" | passwd --stdin myuser1
更改用戶 myuser1 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@CentOS7 ~]# echo "password" | passwd --stdin myuser2
更改用戶 myuser2 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@CentOS7 ~]# echo "password" | passwd --stdin myuser3
更改用戶 myuser3 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@CentOS7 ~]# grep myuser* /etc/passwd /etc/group
/etc/passwd:myuser1:x:1006:1006:1st user:/home/myuser1:/bin/bash
/etc/passwd:myuser2:x:1007:1009:2nd user:/home/myuser2:/bin/bash
/etc/passwd:myuser3:x:1008:1010:3rd user:/home/myuser3:/sbin/nologin
/etc/group:mygroup1:x:1008:myuser1,myuser2
/etc/group:myuser1:x:1006:
/etc/group:myuser2:x:1009:
/etc/group:myuser3:x:1010:
myuser1 與 myuser2 都有支持次要群組, 但該群組不見得會(huì)存在, 因此需要先手動(dòng)創(chuàng)建他! 然后 myuser3 是“不可登陸系統(tǒng)”的帳號(hào), 因此需要使用 /sbin/nologin這個(gè) shell 來給予, 這樣該帳號(hào)就無法登陸啰.
②
我的使用者 pro1, pro2, pro3 是同一個(gè)專案計(jì)劃的開發(fā)人員, 我想要讓這三個(gè)用戶在同一個(gè)目錄下面工作, 但這三個(gè)用戶還是擁有自己的主文件夾與基本的私有群組。 假設(shè)我要讓這個(gè)專案計(jì)劃在 /srv/projecta 目錄下開發(fā)。
[root@CentOS7 ~]# userdel pro1
[root@CentOS7 ~]# userdel pro2
[root@CentOS7 ~]# userdel pro3
[root@CentOS7 ~]# groupdel projecta
[root@CentOS7 ~]# groupadd projecta
[root@CentOS7 ~]# mkdir /srv/projecta && chgrp projecta /srv/projecta
[root@CentOS7 ~]# chmod 2770 /srv/projecta
[root@CentOS7 ~]# useradd -G projecta pro1
[root@CentOS7 ~]# useradd -G projecta pro2
[root@CentOS7 ~]# useradd -G projecta pro3
[root@CentOS7 ~]# passwd pro1
更改用戶 pro1 的密碼 。
新的 密碼:pro1
無效的密碼: 密碼少于 7 個(gè)字符
重新輸入新的 密碼:pro1
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@CentOS7 ~]# passwd pro2
更改用戶 pro2 的密碼 。
新的 密碼:pro2
無效的密碼: 密碼少于 7 個(gè)字符
重新輸入新的 密碼:pro2
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@CentOS7 ~]# passwd pro3
更改用戶 pro3 的密碼 。
新的 密碼:pro3
無效的密碼: 密碼少于 7 個(gè)字符
重新輸入新的 密碼:pro3
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
[root@CentOS7 ~]# su - pro1
最后一次失敗的登錄:六 11月 16 14:41:25 CST 2024pts/0 上
最有一次成功登錄后有 1 次失敗的登錄嘗試。
[pro1@CentOS7 ~]$ pwd
/home/pro1
[pro1@CentOS7 ~]$ touch /srv/projecta/afile_pro1 ~/pfile_pro1
[pro1@CentOS7 ~]$ echo "This is a file created by pro1 in ~/" >> ~/pfile_pro1
[pro1@CentOS7 ~]$ echo "This is a file created by pro1 in /srv/projecta/" >> /srv/projecta/afile_pro1
[pro1@CentOS7 ~]$ su - pro2
密碼:pro2
最后一次失敗的登錄:六 11月 16 15:20:50 CST 2024pts/0 上
最有一次成功登錄后有 3 次失敗的登錄嘗試。
[pro2@CentOS7 ~]$ head -n 1 /home/pro1/pfile_pro1
head: 無法打開"/home/pro1/pfile_pro1" 讀取數(shù)據(jù): 權(quán)限不夠
[pro2@CentOS7 ~]$ head -n 1 /srv/projecta/afile_pro1
This is a file created by pro1 in /srv/projecta/
[pro2@CentOS7 ~]$
chmod 2770 /srv/projecta
就表示為/srv/projecta目錄設(shè)置SGID功能。設(shè)置SGID功能意味著:使用者在此目錄下的有效群組將會(huì)變成該目錄的群組。而前面已經(jīng)設(shè)置了該目錄的群組為projecta,所以projecta群組下的pro1、pro2、pro3就擁有7的權(quán)限了,即可以rwx目錄/srv/projecta下的任何文件(包括子目錄)。
但接下來有個(gè)困擾的問題發(fā)生了! 假如實(shí)例一的 myuser1 是 projecta 這個(gè)專案的助理, 他需要這個(gè)專案的內(nèi)容, 但是他“不可以修改”專案目錄內(nèi)的任何數(shù)據(jù)! 那該如何是好? 你或許可以這樣做:
①將 myuser1 加入 projecta 這個(gè)群組的支持, 但是這樣會(huì)讓 myuser1 具有完整的/srv/projecta 的使用權(quán)限, myuser1 是可以刪除該目錄下的任何數(shù)據(jù)的! 這樣是有問題的;
②將 /srv/projecta 的權(quán)限改為 2775 , 讓 myuser1 可以進(jìn)入查閱數(shù)據(jù)。 但此時(shí)會(huì)發(fā)生所有其他人均可進(jìn)入該目錄查閱的困擾! 這也不是我們要的環(huán)境。
傳統(tǒng)的權(quán)限僅有三種身份 ( owner, group, others) 搭配三種權(quán)限 ( r,w,x) 而已, 并沒有辦法單純的針對(duì)某一個(gè)使用者或某一個(gè)群組來設(shè)置特定的權(quán)限需求。這就需要用到ACL權(quán)限了。
8.ACL使用
8.1 ACL定義
ACL 是 Access Control List 的縮寫, 主要的目的是在提供傳統(tǒng)的 owner,group,others 的read,write,execute 權(quán)限之外的細(xì)部權(quán)限設(shè)置。 ACL 可以針對(duì)單一使用者, 單一文件或目錄來進(jìn)行 r,w,x 的權(quán)限規(guī)范。
處理對(duì)象:
8.2 查詢與設(shè)置ACL
利用“ u:使用者:權(quán)限 ”的方式來設(shè)置的啦! 設(shè)置前請(qǐng)加上 -m這個(gè)選項(xiàng)。 如果一個(gè)文件設(shè)置了 ACL 參數(shù)后, 他的權(quán)限部分就會(huì)多出一個(gè) + 號(hào)了! 但是此時(shí)你看到的權(quán)限與實(shí)際權(quán)限可能就會(huì)有點(diǎn)誤差! 那要如何觀察呢? 就通過 getfacl 吧。
①user的ACL設(shè)置
使Fle可以訪問7.3小節(jié)中實(shí)例2的/srv/projecta,但是不能修改該目錄下的文件:
[fle@CentOS7 ~]$ cd /srv/projecta
-bash: cd: /srv/projecta: 權(quán)限不夠
[fle@CentOS7 ~]$ su -
密碼:
上一次登錄:六 11月 16 18:44:20 CST 2024pts/0 上
[root@CentOS7 ~]# setfacl -m u:fle:rx /srv/projecta
[root@CentOS7 ~]# getfacl /srv/projecta
getfacl: Removing leading '/' from absolute path names
# file: srv/projecta
# owner: root
# group: projecta
# flags: -s-
user::rwx
user:fle:r-x
group::rwx
mask::rwx
other::---[root@CentOS7 ~]# su - fle
上一次登錄:六 11月 16 19:28:18 CST 2024pts/0 上
[fle@CentOS7 ~]$ cd /srv/projecta
[fle@CentOS7 projecta]$
②group的ACL設(shè)置
設(shè)置projecta群組對(duì)fle的設(shè)置的/tmp/fle_dir
目錄有rwx權(quán)限
[fle@CentOS7 ~]$ mkdir /tmp/fle_dir && chmod 770 /tmp/fle_dir
[fle@CentOS7 ~]$ ll -d /tmp/fle_dir
drwxrwx--- 2 fle fle 6 11月 16 19:45 /tmp/fle_dir
[fle@CentOS7 ~]$ su - pro1
密碼:
上一次登錄:六 11月 16 19:43:55 CST 2024pts/0 上
[pro1@CentOS7 ~]$ cd /tmp/fle_dir
-bash: cd: /tmp/fle_dir: 權(quán)限不夠
[pro1@CentOS7 ~]$ su -
密碼:
上一次登錄:六 11月 16 19:40:50 CST 2024pts/0 上
[root@CentOS7 ~]# setfacl -m g:projecta:rwx /tmp/fle_dir
[root@CentOS7 ~]# su - pro1
上一次登錄:六 11月 16 19:46:22 CST 2024pts/0 上
[pro1@CentOS7 ~]$ getfacl /tmp/fle_dir
getfacl: Removing leading '/' from absolute path names
# file: tmp/fle_dir
# owner: fle
# group: fle
user::rwx
group::rwx
group:projecta:rwx
mask::rwx
other::---[pro1@CentOS7 ~]$ cd /tmp/fle_dir
[pro1@CentOS7 fle_dir]$ su - pro2
密碼:
上一次登錄:六 11月 16 15:23:53 CST 2024pts/0 上
[pro2@CentOS7 ~]$ cd /tmp/fle_dir
[pro2@CentOS7 fle_dir]$
9.用戶切換
9.1 su
①su
su
命令并不會(huì)改變PATH等變量:
[fle@CentOS7 ~]$ su
密碼:
[root@CentOS7 fle]# id
uid=0(root) gid=0(root) 組=0(root)
[root@CentOS7 fle]# env | grep 'fle'
USER=fle
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/fle/.local/bin:/home/fle/bin
MAIL=/var/spool/mail/fle
PWD=/home/fle
LOGNAME=fle
XDG_DATA_DIRS=/home/fle/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
從上面可以看到,USER
、PWD
、MAIL
等仍然是fle,并沒有切換為root,因?yàn)?code>su命令是以non-login shell方法來讀取變量的。
②su -
[fle@CentOS7 ~]$ su -
密碼:
上一次登錄:六 11月 16 19:54:41 CST 2024pts/0 上
[root@CentOS7 ~]# id
uid=0(root) gid=0(root) 組=0(root)
[root@CentOS7 ~]# env | grep 'fle'
[root@CentOS7 ~]# env | grep 'root'
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
③su - -c "命令"
加上-c選項(xiàng),可以使得非root用戶用root身份執(zhí)行命令
[fle@CentOS7 ~]$ head -n 2 /etc/shadow
head: 無法打開"/etc/shadow" 讀取數(shù)據(jù): 權(quán)限不夠
[fle@CentOS7 ~]$ su - -c "head -n 2 /etc/shadow"
密碼:
root:$6$rRQaeWbVRNxqa094$KC7q4h6A591WK.MCYnpwo1J.qjR6hjA0n/B09g1UnjpPNFvIk6R.xiTkQVknGqFYzMCmyktNbwig6tg3NRbrE1::0:99999:7:::
bin:*:18353:0:99999:7:::
④su -l
使用-l選項(xiàng)可以從一個(gè)普通用戶切換到另一個(gè)普通用戶
[fle@CentOS7 ~]$ su -l pro1
密碼:
上一次登錄:六 11月 16 19:47:00 CST 2024pts/0 上
[pro1@CentOS7 ~]$ id
uid=1006(pro1) gid=1006(pro1) 組=1006(pro1),1008(projecta)
[pro1@CentOS7 ~]$ echo ${PWD}
/home/pro1
9.2 .sudo
相對(duì)于 su 需要了解新切換的使用者密碼 ( 常常是需要 root 的密碼) , sudo 的執(zhí)行則僅需要自己的密碼即可!由于 sudo 可以讓你以其他用戶的身份執(zhí)行指令 ( 通常是使用 root 的身份來執(zhí)行指令) , 因此并非所有人都能夠執(zhí)行sudo , 而是僅有規(guī)范到 /etc/sudoers 內(nèi)的用戶才能夠執(zhí)行 sudo 這個(gè)指令。
在安裝 CentOS 7 的第三章時(shí), 在設(shè)置一般帳號(hào)的項(xiàng)目中, 有個(gè)“讓這位使用者成為管理員”的選項(xiàng)吧? 如果你有勾選該選項(xiàng)的話, 那除了 root 之外, 該一般用戶確實(shí)是可以使用 sudo 的喔:
[root@CentOS7 ~]# grep 'fle' /etc/sudoers
[root@CentOS7 ~]# su -l fle
上一次登錄:六 11月 16 20:29:20 CST 2024pts/0 上
[fle@CentOS7 ~]$ sudo head -n 1 /etc/shadow
[sudo] fle 的密碼:
root:$6$rRQaeWbVRNxqa094$KC7q4h6A591WK.MCYnpwo1J.qjR6hjA0n/B09g1UnjpPNFvIk6R.xiTkQVknGqFYzMCmyktNbwig6tg3NRbrE1::0:99999:7:::
但是 sudo 默認(rèn)僅有 root 能使用啊! 為什么呢? 因?yàn)?sudo 的執(zhí)行是這樣的流程:
1.當(dāng)使用者執(zhí)行 sudo 時(shí), 系統(tǒng)于 /etc/sudoers 文件中搜尋該使用者是否有執(zhí)行 sudo 的權(quán)限;
2.若使用者具有可執(zhí)行 sudo 的權(quán)限后, 便讓使用者“輸入使用者自己的密碼”來確認(rèn);
3.若密碼輸入成功, 便開始進(jìn)行 sudo 后續(xù)接的指令( 但 root 執(zhí)行 sudo 時(shí), 不需要輸入密碼) ;
4.若欲切換的身份與執(zhí)行者身份相同, 那也不需要輸入密碼。
[fle@CentOS7 ~]$ sudo cd /tmp
[fle@CentOS7 ~]$ cd /tmp
[fle@CentOS7 tmp]$
從上面可以看到,fle用戶使用sudo是無效的。所以要使普通用戶可以使用sudo,就需要在/etc/sudoers中添加。除了 root 之外的其他帳號(hào), 若想要使用 sudo 執(zhí)行屬于 root 的權(quán)限指令, 則 root 需要先使用 visudo 去修改 /etc/sudoers , 讓該帳號(hào)能夠使用全部或部分的root 指令功能。
[pro1@CentOS7 ~]$ sudo head -n 1 /etc/shadow
[sudo] pro1 的密碼:
pro1 不在 sudoers 文件中。此事將被報(bào)告。
[pro1@CentOS7 ~]$ su -
密碼:
上一次登錄:六 11月 16 20:27:58 CST 2024pts/0 上
[root@CentOS7 ~]# visudo
[root@CentOS7 ~]# su - pro1
上一次登錄:六 11月 16 20:30:51 CST 2024pts/0 上
[pro1@CentOS7 ~]$ sudo head -n 1 /etc/shadow
[sudo] pro1 的密碼:
root:$6$rRQaeWbVRNxqa094$KC7q4h6A591WK.MCYnpwo1J.qjR6hjA0n/B09g1UnjpPNFvIk6R.xiTkQVknGqFYzMCmyktNbwig6tg3NRbrE1::0:99999:7:::
[root@CentOS7 ~]# visudo
執(zhí)行后編寫如下:
10. 使用者的特殊 shell 與 PAM 模塊
10.1 特殊 shell——sbin/nologin
系統(tǒng)帳號(hào)(System Account)是指在 Linux 或類 Unix 系統(tǒng)中,用于執(zhí)行系統(tǒng)服務(wù)、管理任務(wù)或運(yùn)行特定服務(wù)(如數(shù)據(jù)庫、Web服務(wù)器等)的特殊用戶帳號(hào)。這些帳號(hào)通常不是為普通用戶登錄系統(tǒng)而設(shè)計(jì)的,而是為系統(tǒng)或服務(wù)的內(nèi)部使用提供功能支持。系統(tǒng)帳號(hào)(System Account)是指在 Linux 或類 Unix 系統(tǒng)中,用于執(zhí)行系統(tǒng)服務(wù)、管理任務(wù)或運(yùn)行特定服務(wù)(如數(shù)據(jù)庫、Web服務(wù)器等)的特殊用戶帳號(hào)。這些帳號(hào)通常不是為普通用戶登錄系統(tǒng)而設(shè)計(jì)的,而是為系統(tǒng)或服務(wù)的內(nèi)部使用提供功能支持。
系統(tǒng)帳號(hào)這玩意兒的 shell 就是使用 /sbin/nologin , 重點(diǎn)在于系統(tǒng)帳號(hào)是不需要登陸的! 所以我們就給他這個(gè)無法登陸的合法 shell。 使用了這個(gè) shell 的用戶即使有了密碼, 你想要登陸時(shí)他也無法登陸, 因?yàn)闀?huì)出現(xiàn)如下的訊息喔:
This account is currently not available.
換個(gè)角度來想, 如果我的 Linux 主機(jī)提供的是郵件服務(wù), 所以說, 在這部 Linux 主機(jī)上面的帳號(hào), 其實(shí)大部分都是用來收受主機(jī)的信件而已, 并不需要登陸主機(jī)的呢! 這個(gè)時(shí)候, 我們就可以考慮讓單純使用 mail 的帳號(hào)以 /sbin/nologin 做為他們的 shell , 這樣, 最起碼當(dāng)我的主機(jī)被嘗試想要登陸系統(tǒng)以取得 shell 環(huán)境時(shí), 可以拒絕該帳號(hào)呢。
10.2 PAM 模塊
在過去, 我們想要對(duì)一個(gè)使用者進(jìn)行認(rèn)證 ( authentication) , 得要要求使用者輸入帳號(hào)密碼, 然后通過自行撰寫的程序來判斷該帳號(hào)密碼是否正確。 也因?yàn)槿绱?#xff0c; 我們常常得使用不同的機(jī)制來判斷帳號(hào)密碼, 所以搞的一部主機(jī)上面擁有多個(gè)各別的認(rèn)證系統(tǒng), 也造成帳號(hào)密碼可能不同步的驗(yàn)證問題! 為了解決這個(gè)問題因此有了 PAM ( Pluggable Authentication
Modules, 嵌入式模塊) 的機(jī)制。
PAM 可以說是一套應(yīng)用程序接口 ( Application Programming Interface, API) , 他提供了一連串的驗(yàn)證機(jī)制, 只要使用者將驗(yàn)證階段的需求告知 PAM 后, PAM 就能夠回報(bào)使用者驗(yàn)證的結(jié)果 ( 成功或失敗) 。 由于 PAM 僅是一套驗(yàn)證的機(jī)制, 又可以提供給其他程序所調(diào)用引用, 因此不論你使用什么程序, 都可以使用 PAM 來進(jìn)行驗(yàn)證。這也就是說, 你可以在寫程序的時(shí)候?qū)?PAM 模塊的功能加入, 就能夠利用 PAM 的驗(yàn)證功能啰。
11. Linux 主機(jī)上的使用者訊息傳遞
11.1 查詢系統(tǒng)在線的使用者——w、who、last、lastlog
[root@CentOS7 ~]# w21:05:58 up 5:56, 2 users, load average: 0.05, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
fle :0 :0 15:10 ?xdm? 9:17 0.17s /usr/libexec/gn
fle pts/0 :0 15:10 6.00s 1.40s 32.66s /usr/libexec/gn
[root@CentOS7 ~]# who
fle :0 2024-11-16 15:10 (:0)
fle pts/0 2024-11-16 15:10 (:0)
last 可以列出從系統(tǒng)創(chuàng)建之后到目前為止的所有登陸者信息;如果您想要知道每個(gè)帳號(hào)的最近登陸的時(shí)間, 則可以使用 lastlog 這個(gè)指令喔。