5.3 用戶(hù)密碼管理
密碼對(duì)于一個(gè)用戶(hù)來(lái)說(shuō)是非常關(guān)鍵的,而密碼管理也是系統(tǒng)管理員的一項(xiàng)非常重要的任務(wù)。
5.3.1 命令passwd
賬戶(hù)創(chuàng)建后,默認(rèn)是沒(méi)有設(shè)置密碼的,只有設(shè)置好密碼后,才可以登錄系統(tǒng)。為了安全,在為用戶(hù)創(chuàng)建密碼時(shí),請(qǐng)盡量設(shè)置復(fù)雜一些。阿銘建議你按照如下規(guī)則設(shè)置密碼:
長(zhǎng)度大于10個(gè)字符;
密碼中包含大小寫(xiě)字母、數(shù)字以及特殊字符*、&、%等;
不規(guī)則性(不要出現(xiàn)happy、love、linux、7758520、111111等單詞或者數(shù)字);
密碼中不要帶有自己的名字、電話(huà)、生日以及公司名字等。
為用戶(hù)設(shè)置密碼時(shí),可以使用命令passwd,其格式為passwd [username]。該命令后面若不加用戶(hù)名字,則是為自己設(shè)定密碼,示例命令如下:
?
# passwd 更改用戶(hù)root的密碼 。 新的密碼: 重新輸入新的密碼: passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
?
如果你登錄的是root賬戶(hù),后面可以跟普通賬戶(hù)的名字,意思是修改指定賬戶(hù)的密碼,示例命令如下:
?
# passwd user11 更改用戶(hù) user11 的密碼 。 新的密碼: 重新輸入新的密碼: passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
?
需要注意的是,只有root才可以修改其他賬戶(hù)的密碼,普通賬戶(hù)只能修改自己的密碼。
5.3.2 命令mkpasswd
命令mkpasswd用于生成密碼。我們安裝的Linux默認(rèn)是沒(méi)有這個(gè)命令的,需要安裝一個(gè)expect軟件包,安裝命令如下:
?
# yum install -y expect # mkpasswd vYIg|y43q
?
有時(shí),我們需要生成指定長(zhǎng)度的密碼,用mkpasswd命令也可以滿(mǎn)足。比如,生成12位長(zhǎng)度的密碼,示例命令如下:
?
# mkpasswd -l 12 4Kj3a$Voygxc
?
當(dāng)然,我們還可以指定密碼中有幾個(gè)特殊字符或幾個(gè)數(shù)字,示例命令如下:
?
# mkpasswd -l 12 -s 0 -d 3 e29kxw4aDZrt
?
上例中,-s指定特殊字符的個(gè)數(shù),-d指定數(shù)字的個(gè)數(shù)。用這個(gè)隨機(jī)字符串作為密碼再好不過(guò)了,只不過(guò)它不方便記憶。大家是否還記得第1章阿銘介紹的KeePass工具?大家把密碼記錄在這里,還是很方便的。
5.4 用戶(hù)身份切換
Linux系統(tǒng)中,有些事情只有root用戶(hù)才能做,普通用戶(hù)是不能做的,這時(shí)就需要臨時(shí)切換到root身份了。下面阿銘帶你做一個(gè)小試驗(yàn),創(chuàng)建test賬戶(hù),并修改其密碼,這樣我們就可以使用test賬戶(hù)登錄Linux了。具體操作方法如下:
?
# useradd test # passwd test 更改用戶(hù) test 的密碼 。 新的密碼: 重新輸入新的密碼: passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。
?
然后用test賬戶(hù)登錄Linux,示例命令如下:
?
login as: test test@192.168.188.128's password: $ whoami test
?
登錄后,使用whoami命令查看,發(fā)現(xiàn)當(dāng)前用戶(hù)是test。普通用戶(hù)和root用戶(hù)的shell提示符號(hào)有些區(qū)別,root賬戶(hù)是#,普通用戶(hù)是$。
5.4.1 命令su
命令su的格式為su [-] username,后面可以跟-,也可以不跟。普通用戶(hù)的su命令不加username時(shí),就是切換到root用戶(hù)。當(dāng)然,root用戶(hù)同樣可以使用su命令切換到普通用戶(hù)。該命令加上-后,會(huì)初始化當(dāng)前用戶(hù)的各種環(huán)境變量(關(guān)于環(huán)境變量這部分內(nèi)容,阿銘放在第11章中講解)。下面阿銘做個(gè)簡(jiǎn)單的試驗(yàn)來(lái)說(shuō)明加與不加-的區(qū)別,示例命令如下:
?
$ su - 密碼: # pwd /root 如果不加-切換到root賬戶(hù)時(shí),當(dāng)前目錄沒(méi)有變化;而加上-切換到root賬戶(hù)時(shí),當(dāng)前目錄為root賬戶(hù)的家目錄。這跟直接登錄root賬戶(hù)是一樣的。當(dāng)由root切換到普通用戶(hù)時(shí),是不需要輸入密碼的。在root下切換到普通用戶(hù)示例命令如下: # su - test 上一次登錄:四 1月 2 0709 EST 2020從 192.168.72.1pts/2 上 $ whoami test
?
5.4.2 命令sudo
用su可以切換用戶(hù)身份,而且每個(gè)普通用戶(hù)都能切換到root身份。如果某個(gè)用戶(hù)不小心泄漏了root的密碼,那豈不是系統(tǒng)非常不安全?沒(méi)錯(cuò),為了改進(jìn)這個(gè)問(wèn)題,Linux系統(tǒng)工程師設(shè)計(jì)了sudo這個(gè)命令。使用sudo命令執(zhí)行一個(gè)只有root才能執(zhí)行的命令是可以辦到的,但是需要輸入密碼。這個(gè)密碼并不是root的密碼,而是用戶(hù)自己的密碼。默認(rèn)情況下,只有root用戶(hù)能使用sudo命令,普通用戶(hù)想要使用sudo,是需要root預(yù)先設(shè)定的。我們可以使用visudo命令編輯相關(guān)的配置文件/etc/sudoers。如果沒(méi)有visudo這個(gè)命令,請(qǐng)使用命令yum install -y sudo安裝。
默認(rèn)root支持sudo,是因?yàn)檫@個(gè)文件中有一行root ALL=(ALL) ALL。在該行下面加入test ALL=(ALL) ALL,就可以讓test用戶(hù)擁有sudo的特權(quán)。從左到右,第一段test這里為一個(gè)用戶(hù),指定讓哪個(gè)用戶(hù)有sudo特權(quán);第二段ALL=(ALL)比較難理解,左邊的ALL指的是所有的主機(jī),右邊的ALL指的是獲取哪個(gè)用戶(hù)的身份,第二段幾乎都不用配置;第三段設(shè)定可以使用sudo的命令有哪些。
使用visudo命令編輯/etc/sudoers配置文件(必須要使用root用戶(hù)),它的使用方法和前面阿銘介紹的vi命令一樣,即輸入i進(jìn)入編輯模式,編輯完成后,按Esc鍵,再輸入:wq完成保存。具體操作方法如下所示:
?
## Allow root to run any commands anywhere root ALL=(ALL) ALL test ALL=(ALL) ALL
?
此時(shí)可以驗(yàn)證一下test賬戶(hù)的權(quán)限了,方法如下(如下操作是在root賬號(hào)下進(jìn)行的):
?
# su test $ ls //當(dāng)前目錄是在/root下 ls: 無(wú)法打開(kāi)目錄'.': 權(quán)限不夠 $ sudo ls 我們信任您已經(jīng)從系統(tǒng)管理員那里了解了日常注意事項(xiàng)。 總結(jié)起來(lái)無(wú)外乎這三點(diǎn): #1) 尊重別人的隱私。 #2) 輸入前要先考慮(后果和風(fēng)險(xiǎn))。 #3) 權(quán)力越大,責(zé)任越大。 [sudo] test 的密碼: 123 456 anaconda-ks.cfg
?
由于切換到test賬戶(hù)后當(dāng)前目錄還是/root,test賬戶(hù)沒(méi)有任何權(quán)限,所以使用命令ls查看時(shí),提示權(quán)限不夠。然而使用命令sudo ls輸入test賬戶(hù)自身的密碼后,就有權(quán)限了。初次使用sudo命令時(shí),會(huì)出現(xiàn)上面的一大段提示,當(dāng)再次使用sudo命令時(shí)則不再提示。
如果每增加一個(gè)用戶(hù)就設(shè)置一行,這樣太麻煩了,所以可以這樣設(shè)置:把# %wheel ALL=(ALL) ALL前面的#去掉,讓這一行生效。它的意思是,wheel這個(gè)組的所有用戶(hù)都擁有了sudo的權(quán)利。接下來(lái),只要把需要設(shè)置sudo權(quán)限的所有用戶(hù)加入到wheel這個(gè)組中即可。如下所示:
?
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
?
配置文件/etc/sudoers包含了許多配置項(xiàng),可以使用命令mansudoers來(lái)獲得幫助信息。下面阿銘介紹一個(gè)很實(shí)用的案例,我們的需求是把Linux服務(wù)器設(shè)置成這個(gè)樣子:只允許使用普通賬戶(hù)登錄,而普通賬戶(hù)登錄后,可以不輸入密碼就能用sudo切換到root賬戶(hù)。阿銘的配置方法是,輸入如下命令:
?
# visudo
?
然后在文件的最后加入如下3行:
?
User_Alias USER_SU = test, test1, aming Cmnd_Alias SU = /usr/bin/su USER_SU ALL=(ALL) NOPASSWD: SU
?
第一行設(shè)定了一個(gè)user別名,其實(shí)這個(gè)USER_SU相當(dāng)于是test、test1和aming三個(gè)賬戶(hù);第二行設(shè)定了一個(gè)命令別名,SU相當(dāng)于/usr/bin/su;第三行我們剛剛介紹過(guò)。保存配置文件后,使用test、test1、aming這3個(gè)賬戶(hù)登錄Linux。執(zhí)行命令sudosu -切換到root賬戶(hù),獲取root賬戶(hù)的所有權(quán)利,如下所示:
?
# su - test $ sudo su - # whoami root
?
不允許root直接登錄,這個(gè)問(wèn)題如何解決呢?其實(shí)方法很簡(jiǎn)單,即設(shè)置一個(gè)復(fù)雜得連自己都記不住的密碼。不過(guò)這樣也會(huì)有一個(gè)問(wèn)題,就是普通用戶(hù)可以使用su命令切換到root,然后他再修改簡(jiǎn)單的密碼就能直接登錄root了。其實(shí)阿銘還有一個(gè)更好的辦法。
5.4.3 不允許root遠(yuǎn)程登錄Linux
/etc/ssh/sshd_config為sshd服務(wù)的配置文件,默認(rèn)允許root賬戶(hù)通過(guò)ssh遠(yuǎn)程登錄Linux。要想不允許root用戶(hù)遠(yuǎn)程登錄Linux,具體操作方法為:修改配置文件/etc/ssh/sshd_config,在文件中查找PermitRootLoginyes并修改為PermitRootLogin no。保存配置文件后,需要重啟sshd服務(wù),如下所示:
?
# systemctl restart sshd.service
?
需要注意的是,阿銘提供的這個(gè)方法只適用于通過(guò)ssh遠(yuǎn)程登錄Linux的情況。
審核編輯:湯梓紅
?
評(píng)論
查看更多