天天看點

第6章 Linux系統使用者與使用者組管理(下)

提醒:本文為合集文章,後續會持續更新!

關注我,每日提升!

5.3 使用者密碼管理

密碼對于一個使用者來說是非常關鍵的,而密碼管理也是系統管理者的一項非常重要的任務。

5.3.1 指令passwd

賬戶建立後,預設是沒有設定密碼的,隻有設定好密碼後,才可以登入系統。為了安全,在為使用者建立密碼時,請盡量設定複雜一些。阿銘建議你按照如下規則設定密碼:

  • 長度大于10個字元;
  • 密碼中包含大小寫字母、數字以及特殊字元*、&、%等;
  • 不規則性(不要出現happy、love、linux、7758520、111111等單詞或者數字);
  • 密碼中不要帶有自己的名字、電話、生日以及公司名字等。

為使用者設定密碼時,可以使用指令passwd,其格式為passwd [username]。該指令後面若不加使用者名字,則是為自己設定密碼,示例指令如下:

# passwd
更改使用者root的密碼 。
新的密碼:
重新輸入新的密碼:
passwd:所有的身份驗證令牌已經成功更新。           

如果你登入的是root賬戶,後面可以跟普通賬戶的名字,意思是修改指定賬戶的密碼,示例指令如下:

# passwd user11
更改使用者 user11 的密碼 。
新的密碼:
重新輸入新的密碼:
passwd:所有的身份驗證令牌已經成功更新。           

需要注意的是,隻有root才可以修改其他賬戶的密碼,普通賬戶隻能修改自己的密碼。

5.3.2 指令mkpasswd

指令mkpasswd用于生成密碼。我們安裝的Linux預設是沒有這個指令的,需要安裝一個expect軟體包,安裝指令如下:

# yum install -y expect
# mkpasswd
vYIg|y43q           

有時,我們需要生成指定長度的密碼,用mkpasswd指令也可以滿足。比如,生成12位長度的密碼,示例指令如下:

# mkpasswd -l 12
4Kj3a$Voygxc           

當然,我們還可以指定密碼中有幾個特殊字元或幾個數字,示例指令如下:

# mkpasswd -l 12 -s 0 -d 3
e29kxw4aDZrt           

上例中,-s指定特殊字元的個數,-d指定數字的個數。用這個随機字元串作為密碼再好不過了,隻不過它不友善記憶。大家是否還記得第1章阿銘介紹的KeePass工具?大家把密碼記錄在這裡,還是很友善的。

5.4 使用者身份切換

Linux系統中,有些事情隻有root使用者才能做,普通使用者是不能做的,這時就需要臨時切換到root身份了。下面阿銘帶你做一個小試驗,建立test賬戶,并修改其密碼,這樣我們就可以使用test賬戶登入Linux了。具體操作方法如下:

# useradd test
# passwd test
更改使用者 test 的密碼 。
新的密碼:
重新輸入新的密碼:
passwd:所有的身份驗證令牌已經成功更新。           

然後用test賬戶登入Linux,示例指令如下:

login as: test
[email protected]'s password:
$ whoami
test           

登入後,使用whoami指令檢視,發現目前使用者是test。普通使用者和root使用者的shell提示符号有些差別,root賬戶是#,普通使用者是$。

5.4.1 指令su

指令su的格式為su [-] username,後面可以跟-,也可以不跟。普通使用者的su指令不加username時,就是切換到root使用者。當然,root使用者同樣可以使用su指令切換到普通使用者。該指令加上-後,會初始化目前使用者的各種環境變量(關于環境變量這部分内容,阿銘放在第11章中講解)。下面阿銘做個簡單的試驗來說明加與不加-的差別,示例指令如下:

$ su -
密碼:
# pwd
/root
如果不加-切換到root賬戶時,目前目錄沒有變化;而加上-切換到root賬戶時,目前目錄為root賬戶的家目錄。這跟直接登入root賬戶是一樣的。當由root切換到普通使用者時,是不需要輸入密碼的。在root下切換到普通使用者示例指令如下:
# su - test
上一次登入:四 1月  2 07:01:09 EST 2020從 192.168.72.1pts/2 上
$ whoami
test           

5.4.2 指令sudo

用su可以切換使用者身份,而且每個普通使用者都能切換到root身份。如果某個使用者不小心洩漏了root的密碼,那豈不是系統非常不安全?沒錯,為了改進這個問題,Linux系統工程師設計了sudo這個指令。使用sudo指令執行一個隻有root才能執行的指令是可以辦到的,但是需要輸入密碼。這個密碼并不是root的密碼,而是使用者自己的密碼。預設情況下,隻有root使用者能使用sudo指令,普通使用者想要使用sudo,是需要root預先設定的。我們可以使用visudo指令編輯相關的配置檔案/etc/sudoers。如果沒有visudo這個指令,請使用指令yum install -y sudo安裝。

預設root支援sudo,是因為這個檔案中有一行root ALL=(ALL) ALL。在該行下面加入test ALL=(ALL) ALL,就可以讓test使用者擁有sudo的特權。從左到右,第一段test這裡為一個使用者,指定讓哪個使用者有sudo特權;第二段ALL=(ALL)比較難了解,左邊的ALL指的是所有的主機,右邊的ALL指的是擷取哪個使用者的身份,第二段幾乎都不用配置;第三段設定可以使用sudo的指令有哪些。

使用visudo指令編輯/etc/sudoers配置檔案(必須要使用root使用者),它的使用方法和前面阿銘介紹的vi指令一樣,即輸入i進入編輯模式,編輯完成後,按Esc鍵,再輸入:wq完成儲存。具體操作方法如下所示:

## Allow root to run any commands anywhere
root ALL=(ALL)       ALL
test ALL=(ALL)       ALL           

此時可以驗證一下test賬戶的權限了,方法如下(如下操作是在root賬号下進行的):

# su test
$ ls //目前目錄是在/root下
ls: 無法打開目錄'.': 權限不夠
$ sudo ls
我們信任您已經從系統管理者那裡了解了日常注意事項。
總結起來無外乎這三點:
 #1) 尊重别人的隐私。
 #2) 輸入前要先考慮(後果和風險)。
 #3) 權力越大,責任越大。
[sudo] test 的密碼:
123 456  anaconda-ks.cfg           

由于切換到test賬戶後目前目錄還是/root,test賬戶沒有任何權限,是以使用指令ls檢視時,提示權限不夠。然而使用指令sudo ls輸入test賬戶自身的密碼後,就有權限了。初次使用sudo指令時,會出現上面的一大段提示,當再次使用sudo指令時則不再提示。

如果每增加一個使用者就設定一行,這樣太麻煩了,是以可以這樣設定:把# %wheel ALL=(ALL) ALL前面的#去掉,讓這一行生效。它的意思是,wheel這個組的所有使用者都擁有了sudo的權利。接下來,隻要把需要設定sudo權限的所有使用者加入到wheel這個組中即可。如下所示:

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL           

配置檔案/etc/sudoers包含了許多配置項,可以使用指令man sudoers來獲得幫助資訊。下面阿銘介紹一個很實用的案例,我們的需求是把Linux伺服器設定成這個樣子:隻允許使用普通賬戶登入,而普通賬戶登入後,可以不輸入密碼就能用sudo切換到root賬戶。阿銘的配置方法是,輸入如下指令:

# visudo           

然後在檔案的最後加入如下3行:

User_Alias USER_SU = test, test1, aming
Cmnd_Alias SU = /usr/bin/su
USER_SU ALL=(ALL) NOPASSWD: SU           

第一行設定了一個user别名,其實這個USER_SU相當于是test、test1和aming三個賬戶;第二行設定了一個指令别名,SU相當于/usr/bin/su;第三行我們剛剛介紹過。儲存配置檔案後,使用test、test1、aming這3個賬戶登入Linux。執行指令sudo su -切換到root賬戶,擷取root賬戶的所有權利,如下所示:

# su - test
$ sudo su -
# whoami
root           

不允許root直接登入,這個問題如何解決呢?其實方法很簡單,即設定一個複雜得連自己都記不住的密碼。不過這樣也會有一個問題,就是普通使用者可以使用su指令切換到root,然後他再修改簡單的密碼就能直接登入root了。其實阿銘還有一個更好的辦法。

5.4.3 不允許root遠端登入Linux

/etc/ssh/sshd_config為sshd服務的配置檔案,預設允許root賬戶通過ssh遠端登入Linux。要想不允許root使用者遠端登入Linux,具體操作方法為:修改配置檔案/etc/ssh/sshd_config,在檔案中查找PermitRootLogin yes并修改為PermitRootLogin no。儲存配置檔案後,需要重新開機sshd服務,如下所示:

# systemctl restart sshd.service           

需要注意的是,阿銘提供的這個方法隻适用于通過ssh遠端登入Linux的情況。

繼續閱讀