2010年3月1日

[Linux/Unix] 養成好習慣,使用 passwd 指令要註明欲變更的帳號

今天維護廠商要以 root 帳號登入某台 linux 主機的時候發現無法登入,密碼不知道被誰改掉,查了老半天之後發現兇手就是我 Orz(不過廠商還不知道這件事情=.=) 在將 root 密碼還原以後,從 /var/log/secure 裡面就可以看到 pam_unix 模組所寫的 log 了。


根據 log 可以看出,造成這次意外的原因在於上週剛好進行設備交接,因此在該主機上建立了我的帳號,但我在沒注意到目前使用者身份是 root 的情況下使用 passwd 指令變更密碼,才會造成這樣的結果。因此,養成好習慣,在變更系統狀態前先確認目前的使用者身份是誰,思考一下會不會造成副作用,是很重要的!

先來看一下 passwd 指令的說明:
passwd_1

重點在於 [username] 這個參數,此參數若忽略,表示要變更的是「目前下達 passwd 指令的使用者」的密碼;若加上 [username] 參數,則可變更指定使用者的密碼 (當然前提是執行指令的 user 要有足夠的權限)。由於大部分時候都是用自己的帳號在系統中操作,因此下 passwd 指令也只會影響自己的密碼,因此都養成習慣忽略掉 [username] 參數,這時候如果不小心用「su」或「su -」指令切換為 root 身份,就有可能不小心變更到 root 的密碼 。

雖然下達 passwd 指令後螢幕上會印出一行:Changing password for user [username],但是有時候就是沒注意到,當成功變更密碼後,螢幕上印出的是:passwd: all authentication tokens updated successfully.,看到 successfully 這個字眼以後就覺得很放心,不會想太多了 =.=
所以,在變更 root 密碼的過程中,螢幕上會看到以下資料:

passwd_2

結論:養成習慣加上 [username] 參數是最好的作法,這樣在下指令的時候就會很清楚要變更的密碼是屬於哪個使用者的,例如確實要變更 root 密碼時:
passwd_3

都已經打了「passwd root」了,總該有自覺現在是要變更 root 的密碼了吧!
補充1:雖然上面有出現「BAD PASSWORD: it is based on a dictionary word」的警告訊息,但系統還是讓我成功變更密碼了,為什麼呢?那是因為目前我的執行身份是 root,而 root 的權限是最大的,可以忽略在 pam_unix 模組中所設定的任何限制!

之所以要補充這一點,是因為前陣子我在練習實作帳號管理的功能時,一開始都用 root 帳號登入 (這也是因為當時沒有限制 root 不能以 SSH 連線登入,but … 這個改天再講好了),導致我設定的「密碼必須大於 6 個字元」等等限制看似完全無效,因為 root 是可以為所欲為的!害我一直覺得很奇怪,不是有「BAS PASSWORD:」的 warning 嗎,為甚麼系統還是可以讓我變更密碼 Orz 這又說明了「隨時隨地都要注意到目前是以甚麼身份下達指令」的重要性,否則可是會平白無故的浪費很多寶貴時間的阿!

補充2:若某帳號有 sudo 權限,則 sudo passwd 命令修改的會是 root 的密碼,如下圖:
passwd_4

而透過 sudo 下的指令在 /var/log/secure 中會留下紀錄:
passwd_5

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D