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