我们都知道老版本的Solaris系统都将/sbin/sh设定为缺省的root shell。在Solaris 8和Solaris 9中,你确实应当这样做,因为所有的动态链接库都在/usr/lib目录中,而/usr/lib可以在一个单独的/usr文件系统中。这一文件系统在维护启动阶段可能是访问不了的,因此修改root shell被认为是很不好。
为了保证超级用户总是能够登入系统,我们将/sbin/sh指定给root,这是一个静态链接的二进制文件,所以它不需要任何外部的库就能正常运行。
bash-2.03$ file /sbin/sh
/sbin/sh: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped
bash-2.03$ ldd /sbin/sh
ldd: /sbin/sh: file is not a dynamic executable or shared object
但是Solaris 10在这方面有了很大的改进,主要有两点:
(1)现在所有的标准库都位于/lib目录下,因此在维护启动阶段你总是可以访问到这些库。这样,现在我们的/sbin/sh就可以是一个使用动态库的常规的可执行文件了。
bash-3.00$ file /sbin/sh
/sbin/sh: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
bash-3.00$ ldd /sbin/sh
(2)Solaris 10对于非可执行的root shell有一个内建的保护机制,因此如果你将root shell修改成另外一种shell,并且由于某种原因,该shell不能正常启动,那么你就会自动的到一个标准的/sbin/sh。同样,这种保护机制也适用于sudo命令。
这一改进确保了你可以将自己的root shell设定成任何你喜欢的东西。