原文地址:http://www.linuxeden.com/html/softuse/20100413/102546.html
儘管我從來不會忘記自己的密碼,但是我還是會仔細研究一下這個專題,以防將來有一天突然看到我的母親在閱讀我的 ICQ
聊天記錄時,可能會派上用場。
如果是普通使用者(非 root 使用者)忘記密碼,這個不是什麼大問題,因為 root 可以修改任何人的密碼。舉個例子(要求 root 使用者)
passwd barbara
按斷行符號鍵後,將提示輸入使用者 barbara 的新密碼(root
使用者不需要知道舊的密碼)。如果一個普通使用者想要修改自己的密碼,該使用者會被要求輸入舊的密碼(這是一個安全特性,以避免當你離開你的坐位有人試圖修改你
的密碼)。
如果是超級使用者,問題會複雜些,那麼有如下兩種解決方案:
第一種辦法
最容易解決“忘記密碼問題”的方法是將 Linux 重新啟動到單一使用者模式,可以在“lilo”的命令提示字元下輸入:
linux single
這種辦法將使你變成 root 超級使用者而不需要輸入任何密碼。現在作為 root 使用者,你可以使用以下命令重新設定密碼(不需要輸入舊的密碼)
passwd
你可能覺得這實在是太不安全了!那是因為,如果有人可以物理上“訪問”你的電腦硬體,沒有電腦系統是安全的。但是,我並不喜歡在我的電腦上有
這個“linux
single”的漏洞存在,所以我在檔案/etc/lilo.conf裡(在“image=”段落的尾部)加上以下內容就可以把這個漏洞拔除:
password=”my_password”
restricted
這個設定使得 Linux 啟動時,在 lilo 的命令提示字元下,當使用者輸入 linux
帶任何參數時必須輸入正確的密碼。如果使用者不是使用命令列的啟動模式而使用正常的啟動模式,沒有密碼也能夠啟動系統。為了讓修改生效,必須重新運行
lilo 命令。因為我設定的密碼在 lilo.conf 檔案裡沒有加密,我還必須把檔案 /etc/lilo.conf 改成只有 root
使用者可以讀寫:
chmod 600 /etc/lilo.conf
另一個解決“超級使用者密碼丟失”的辦法是使用 Linux 啟動盤或者安裝CD來啟動你的電腦。然後找到你電腦硬碟上的 root 分區,使用
mount 命令掛載該分區,接著修改檔案 /etc/shadow。因為當我從磁碟片啟動 Linux 時,我可以不需要輸入任何密碼就成為 root
使用者。在密碼檔案裡,把 root 使用者的加密密碼刪除,所以 root 的密碼將是空的。
使用者帳號的資訊儲存在以下純文字檔案裡:
/etc/passwd
/etc/shadow
檔案 /etc/passwd
包含了我電腦上的所有使用者,並且很容易閱讀。檔案每行包含一個帳號資訊,總共包含六個“:”間隔符號(這意味著七個欄位)。舉例如下:
/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
ftp:x:14:50:FTP
User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
1 |
root |
登入使用者名稱 |
2 |
x |
字元x |
3 |
0 |
使用者標識 |
4 |
0 |
該使用者的優先使用者組標識 |
5 |
root |
注釋(比如使用者的全名) |
6 |
/root |
使用者的主目錄(HOME DIRECTORY) |
7 |
/bin/bash |
使用者的shell的名字 |
真正最重要的使用者資訊其實儲存在檔案 /etc/shadow 檔案裡。這個檔案相對安全因為只有 root
使用者才能閱讀。在這個檔案裡,每行包含九個欄位:
1 |
登入使用者名稱 |
2 |
加密後的密碼 |
3 |
從1970年1月1日到上一次修改密碼的天數 |
4 |
距離下一次修改密碼的天數 |
5 |
密碼定期作修改的天數 |
6 |
密碼即將到期時提前通知使用者的天數 |
7 |
密碼到期到使用者被取消的天數 |
8 |
密碼被取消時距離1970年1月1日的天數 |
9 |
預留欄位 |
一些舊的 Unix 版本不包含/etc/shadow檔案,而是把密碼存放在 /etc/passwd
每行中的第二個欄位。這個欄位在新的系統中只顯示一個“x”字元。
舉個例子,我的 /etc/shadow 檔案中的 root 使用者看起來是這樣的:
root:$1$BuPbmLAz$1G7.evIChyqaEI0TlZp0F.:11071:0:99999:7:-1:-1:134540356
當密碼被消除後,看起來是這樣的:
root::11071:0:99999:7:-1:-1:134540356
現在,root 使用者就沒有密碼了,所以我就可以重新啟動電腦,在 login
登入提示下,輸入“root”,對於密碼提示只需要按斷行符號鍵就可了(沒有密碼)。登入成功後,可以立刻使用以下命令修改 root 密碼:
passwd
有個例外,儘管在 /etc/shadow 刪除了密碼,對於 Debian
的發行版本並不允許你按“無密碼”狀態登入,在這種情況下,你需要做的是用其他使用者(密碼已經)的加密後的密碼取代 root
的密碼,然後使用該密碼重新登入。
想給遠端使用者設定使用者帳號,用電子郵件發送加密密碼也是一個安全的辦法,“我正在幫你在我的電腦上設定 ftp
帳號,請把你的加密密碼用電子郵件發送給我”。等你收到加密密碼後,把它插入到 /etc/shadow
檔案裡。這樣,使用者就可以登入了,因為只有她知道她的密碼,其他人不知道。
為了讓我的電腦沒有“磁碟片訪問”功能有點難度,我喜歡在沒有軟碟機的情況下運行電腦。不幸的是,Linux 光碟片現在是可以自啟動的。我在
BIOS 裡設定啟動裝置的順序以保證系統從硬碟啟動而不是軟碟機或者光碟機,然後給 BIOS 設定加上密碼保護,這樣就沒有其他人能夠修改 BIOS
設定。但是,我還是很擔心 BIOS 的密碼很容易被破解,或者有人開啟電腦蓋把 BIOS 的電池放電來重新設定
BIOS。還可能有人把我的硬碟拿走然後在別的電腦上閱讀。所以,我正在考慮在我的電腦上安裝一個現在已經有效
Linux“加密檔案系統”,但是以其考慮這麼多麻煩問題,我覺得還是乾脆把電腦鎖在屋裡才是一個真正的好辦法。這些聽起來頭很大吧?事實大概也是這樣
的――這裡我只是把一些電腦的安全問題稍微羅列了一下,即使在 Linux 下,如果駭客有潛在可能可以直接接觸你的電腦硬體,Linux
也是不安全的。