Mac OS X:單一使用者模式(Single User Mode)的操作和安全性漏洞
Update:
2009-02-17: 在“1:檢查修複磁碟”後面添加了:磁碟檢查正常和錯誤的判斷,以及如果碰到錯誤的應對方法。
簡介:
本文力圖簡單明了地敘述單一使用者模式的進入和使用,有關基本的操作命令和用途,和常用的應用工具。並且簡單敘述NetInfo和dslocl的多使用者管理架構,同時涉及OS X 10.4 Tiger系統和10.5 Leopard系統之間在多使用者模式裡系統管理使用者的不同,在單一使用者模式下如何管理多使用者模式使用者的帳號,兩個root帳號的不同,兼顧了10.4和10.5系統服務的管理差異。最後,我們探討一下有關Mac系統軟硬體的安全問題。
本文主要是針對進階使用者或者系統管理員或者安全專員,在企業環境中部署和設計適合特殊環境時,考慮的一個方面作一個參考。
為什麼要進入單一使用者模式?
單一使用者模式就是Single User Mode, 在好多文章中把它縮寫為SUM. 這是很多*nix系統都支援的一種系統啟動模式,主要是便於管理員的系統維護.
使用SUM的情況並不多,有的時候系統問題的解決或者是系統維護需要進入單一使用者模式,比如:
. 修複系統磁碟錯誤,如果在Disk Utility裡面的Repair Disk不能修複錯誤,試一試單一使用者模式,可能是個好主意。
. 如果你忘記了administrator的密碼, 手邊沒有啟動盤, 那麼可以變更root使用者密碼,試試單一使用者模式.
. 可能的使用者資料庫的損壞造成的系統問題.
. 如果你是一個administrator, 那麼你應該使用SUM來設定/管理甚至禁止普通使用者進入SUM,用以提高系統的安全性.
如何進入單一使用者模式
簡單來說就是當啟動電腦,聽到一聲開機聲的時候迅速同時按住兩個鍵Command+s, 直到看到字元顯示鬆開,一般情況下就可以進入單一使用者模式了。
如果你的電腦設定了Firmware密碼, 那麼請先開啟它,詳情請參考Apple的官方文檔:Setting up firmware password protection in Mac OS X(Article: HT1352)(http://support.apple.com/kb/HT1352)。
如果你嘗試多次仍然不能成功,那麼一是有可能你的硬體不支援或者需要升級Firmware, 或者可能是系統管理員設定不準許使用者進入,詳見後面有關安全的話題。
操作步驟:
進入單一使用者模式後如何操作呢?因為它不是人們熟悉的圖形介面的GUI, 而是文本介面的shell環境了(CLI). 下面說說常用的命令和步驟。
1. 檢查磁碟:運行下面的命令然後斷行符號,
/sbin/fsck -fy
其實, 每次開機系統都會快速運行這個檢查磁碟的命令來確定磁碟系統的完整性.
如果fsck沒有檢查到磁碟錯誤,它將在最後顯示The volume (name_of_volume) appears to be OK。否則如果修複了錯誤或者有警告,都會顯示:FILE SYSTEM WAS MODIFIED,這個時候,你一定要重複上面命令,直到顯示OK為止。如果多次嘗試後依然有問題,那麼你的硬碟硬體有可能有問題,需要注意或換一個新硬碟。
這個官方文章列出fsck檢查錯誤資訊的解釋: Mac OS X: fsck reports benign errors when journaling is turned on http://support.apple.com/kb/TS2028?viewlocale=en_US. 注意:只有在支援journaling的卷(volume)上才支援,這也是為什麼在安裝系統的時候,要選擇journaled的。
2. 安裝磁碟卷:只有安裝了磁碟卷,後面的命令才能做:
mount -uw /
3. 變更root密碼:
chroot /
passwd
3. 退出/重啟動:
reboot
或者
exit
上面變更了root使用者的密碼,在進入下一步之前,讓我們來先看看OS X的多使用者模式裡使用者管理的架構。註:在網路環境裡, Mac系統使用LDAP來系統管理使用者.
在OS X 10.4 Tiger 系統裡,多使用者的使用者管理是依靠NetInfo來管理的,NetInfo是一個特殊的資料庫, 它的資料庫存放在/private/var/db/netinfo/local.nidb/裡面, 只有root使用者可以存取,使用者一般通過NetInfo manager工具和命令列niutil或者編程介面來對其操作。當然了, NetInfo還管理好多系統的資源,比如印表機,網路資源,協議等等. 關於詳細的NetInfo的介紹可以參考WikiPedia的文獻NetInfo:http://en.wikipedia.org/wiki/NetInfo
因為自從Leopard 10.5系統的發布,OS X系統管理使用者的機制有了一個大的變化,變成了基於XML的檔案管理方式(註:到目前位置沒有找到關於賬戶密碼檔案存放的位置,如果這個檔案被找到,那麼破解賬戶密碼也就更容易了),它是Open Directory的一個Directory Service服務,而且提供了一套不同於以前的管理命令集,比如dscl。系統管理使用者的XML存放在/private/var/db/dslocal/裡面。
細心的使用者會發現,即使我們原來在GUI環境裡修改了root使用者的密碼,但是在進入單一使用者模式後,實際上系統是在root使用者裡操作,而上面變更root密碼的時候,並沒有要求輸入原密碼。這是因為,單一使用者模式下,因為沒有啟動相應服務,所以root使用原來的*nix系統檔案方式(/etc/passwd或者/etc/shadow檔案儲存)的使用者管理,兩者管理的系統不一樣。
在GUI裡面我們使用NetInfo/Directory Utility啟用的root使用者,都是OS X的多使用者管理服務裡面的root,在Termianl裡面輸入su root的時候,系統要求的密碼就是這個OS X的root的密碼,如果這個root沒有被啟用,那麼這個su root命令也無法成功.
而在正常的Terminal裡面也可以用passwd命令來修改*nix的root的檔案密碼, 而一般不帶選項的時候預設的是原生OS X使用者服務,看看命令:
sudo passwd -i file root
系統會直接要求你輸入一次新的root密碼,並確認一次。
大家對比一下普通情況下修改密碼的命令:
sudo passwd root
即便我們在這裡設定了*nix的root檔案密碼,進入單一使用者模式的時候,機器也不會詢問你輸入root的密碼,這個問題在後面的安全裡面再說。
4. 變更其它使用者密碼
要對使用者資料庫操作,首先要啟動系統服務,這在10.4和10.5也有些變動,10.5對系統服務的啟動有了較大的修改,把所有的系統服務的管理交給了launchd, launchd在/System/Library/LauncDaemons/ 和 /System/Library/launchAgents/尋找所有的系統服務的.plist定義檔案,而在10.4中,系統的啟動管理比較分散,所以在下面和後面可以看到它們的不同造成一些系統管理的不同。
好了,下面分別針對不同的系統進行描述,後面有的地方也要分別闡述:
首先要啟動系統的相應服務:
對於10.4 Tiger系統:
sh /etc/rc.local
對於10.5 Leopard系統:
launchctl /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist
launchctl /System/Library/LaunchDaemons/com.apple.DirectoryServicesLocal.plist
通過下面的命令來變更多使用者模式裡的root使用者的密碼, 把其中的rootpassword變成你自己的root密碼:
dscl . -passwd /Users/"root" "rootpassword"
基於CLI的互動方式變更root使用者密碼:
對於10.5 Leopard系統:
% dscl
Entering interactive mode... (type "help" for commands)
> -passwd Local/Default/Users/root MY_PASSWORD
(Ctrl-D)
5. 添加使用者
然後對使用者操作.
我們可以通過建立一個管理使用者的方式,來達到登入多使用者方式:
dscl . -create /Users/"myadmin"
dscl . -create /Users/"myadmin" UserShell /bin/bash
dscl . -create /Users/"myadmin" RealName "myAdministrator"
dscl . -create /Users/"myadmin" UniqueID "id"
dscl . -create /Users/"myadmin" PrimaryGroupID "20"
dscl . -create /Users/"myadmin" NFSHomeDirectory /Users/myadmin
dscl . -passwd /Users/"myadmin" "password"
dscl . -append /Groups/admin GroupMembership myadmin
要保證上面的命令成功,首先使用者要唯一,使用者的ID要唯一, 使用下面的命令來獲得使用者的列表
dscl . -list /Users
要得到一個唯一的使用者ID, 可以使用dscl . -list /users uid來列出所有使用者的ID,也可以使用下面的命令來自動得到一個閒置最大的ID:
echo $[$(dscl . -list /Users uid | awk '{print $2}' | sort -n | tail -n1)+1]
6. 刪除使用者資料庫
有可能因為硬碟的問題,造成使用者資料庫的損壞,這時,我們就要刪除多使用者模式使用者資料庫來讓OS X系統來重建一個預設的初始的資料庫,並初始化系統。
同樣地對於兩個版本的系統操作是不同的,而且在10.5中還要刪除一個確認安裝成功完成的標記檔案.
對於10.4 Tiger系統:
rm -Rf /var/db/netinfo
對於10.5 Leopard系統:
rm -Rf /var/db/dslocal
rm /var/db/.AppleSetupDone
7. 運行Applejack工具:
Applejack是一個開源軟體,它可以在terminal裡面通過菜單選擇方式對OS X系統進行一些管理,請詳見AppleJack的官方網站的說明:http://applejack.sourceforge.net
安全的考慮:
通過前面的講述,大家可以看到,如果一個系統沒有很好的安全措施部署,那麼安全隱患是明顯存在的。無論是你Mac電腦被外人接觸,或者你的膝上型電腦丟失,別人都可以比較容易地入侵你的電腦,獲得管理員權限之後,就可以控制你的電腦,任意存取你的日常未經加密的資料,也可能輕易植入木馬等駭客程式等。
在這樣一個不安全的電腦上工作,令人不由得對安全性漏洞產生恐懼。當然了絕對安全的系統不現實,但是儘可能的安全,或者說達到一定程度的安全還是可以的。幸好,基本上目前流行的Mac系統都有硬體和軟體安全方面的考慮。
1. 硬體措施:
現在每個Mac系統,包括台式機和筆記本,都可以設定韌體密碼(Firmware Password), 對於你的硬體是否支援和如何設定,請看Apple的官方文檔: Setting up firmware password protection in Mac OS X(http://support.apple.com/kb/HT1352).
一般情況下,這個密碼是沒有設定的,而且一旦設定的密碼丟失,按照蘋果的官方說法是,沒有人可以破解的,但是其實並不是這樣的,比如你可以通過改變硬體環境(比如記憶體)並重設NVRAM/PRAM(參見Apple的官方文檔Resetting your Mac's PRAM and NVRAM: http://support.apple.com/kb/HT1379).
本來對硬體的安全措施充滿希望的人,看完了上面的敘述,恐怕要失望了,破解起來依然是這樣的簡易。
既然硬體上無法阻止他人進入單一使用者模式,那麼軟體應該可以吧?沒錯,目前來說有比較好的辦法,下面來看看軟體的措施。
2. 軟體措施:
首先,讓我們找到root使用者的home目錄, 那就是/var/root/目錄,我們先在這裡建立一個叫做.profile的檔案.
touch /var/root//profile
然後,根據不同的OS X版本,編輯.profile檔案如下:
對於10.4:
if [ "$VerboseFlag" = "-v" ];
then
/sbin/reboot;
#/usr/bin/lock -p -t 86343727;
fi
對於10.5:
if [ "$TERM" = "vt100" ];
then
/sbin/reboot;
#/usr/bin/lock -p -t 86343727;
fi
上面判斷系統是否在單一使用者模式,如果是, 它將自動重啟動,從而阻止了使用者使用單一使用者模式,如果你希望正常使用者可以是用單一使用者模式,那麼把reboot那一行,換成下面注釋了的那行,這樣系統會詢問使用者root密碼。
後記:
安全問題一直是一個縈繞在IT人心頭的一個問號,如何提供一個足夠安全的系統,總是一個問題。我們這裡只是從Mac OS X的單一使用者模式來敘述了一些關於Mac系統的安全問題的一個方面。當然,對於Mac系統還有好多其它方面的安全問題需要關注,就我目前的理解和掌握的知識來說,Mac系統的FileVault是一個可能也是唯一的比較理想的使用者資料安全措施。
References:
1. Password-Protecting Single-User Mode in Tiger:http://www.macgeekery.com/gspot/2006-02/password-protecting_single-user_mode_in_tiger
2. Forum->Disable Single User mode: http://forums.macosxhints.com/archive/index.php/t-84049.html
3. 10.5: How to reset Leopard back to the Setup Assistant: http://www.macosxhints.com/article.php?story=2007110800450816
4. How can I run radmind in Single User mode?: http://www.macos.utah.edu/documentation/system_deployment/radmind/faqs/single_user_mode.html
5. Mac OS X Single User Mode Password Reset: http://www.jessecole.org/2008/06/25/mac-os-x-single-user-mode-password-reset/
6. 修改root密碼的幾種方法: http://bbs.kenapple.com/thread-1607-1-2.html
7. Setting up firmware password protection in Mac OS X: http://support.apple.com/kb/HT1352
8. Mac OS X: Changing or resetting an account password: http://support.apple.com/kb/HT1274
9. Mac OS X: How to back up and restore your files: http://support.apple.com/kb/HT1553
10. Locing SUM: http://tech.tedthepenguin.com/mac-specific/booting-modes/single-user-mode/locking-sum.html
11. Mac OS X 10.5: Hacking Root: http://sprocket.io/blog/2007/12/mac-os-x-105-hacking-root/
12. Mac OS X 10.5.6 Update - Caution!: http://www.themactech.com/?p=227
13. Resetting your Mac's PRAM and NVRAM: http://support.apple.com/kb/HT1379
14. AppleJack: http://applejack.sourceforge.net/
15: Single-User Mode Commands: http://www.westwind.com/reference/OS-X/commandline/single-user.html
Mac OS X: How to start up in single-user or verbose mode
Resolve startup issues and perform disk maintenance with Disk Utility and fsck