丢失 root 的默认 shell

今天犯了一个愚蠢的错误,修改 /etc/passwd 文件把 root 的默认 csh shell(/bin/csh)改成 bash shell(/bin/bash),退出后 root 就 su 不进去了,提示找不到 /bin/bash。

% su root
Password:
su: /bin/bash: No such file or directory

看了提示信息才回过神来,刚在 FreeBSD上 装的 bash shell 的路径是 /usr/local/bin/bash,不是 /bin/bash,我想当然的以为 FreeBSD 会把 bash 装到 /bin/bash。

在 Linux 下遇到这种问题可以这样解决,su 时指定一个 shell 登陆:

$ su --shell=/bin/sh -

或者

$ su -s /bin/sh

在 FreeBSD,Solaris,AIX,以及达到 C2 安全标准的 Unix 上面遇到这种问题就只能重装系统了,让 VPS 管理员重新 load 一个操作系统。或者如果管理员能 physical access 你的服务器的话,应该可以用 cdrom 启动你的系统后恢复,不过太麻烦了,还要给管理员 root 密码,没有重要数据丢失的话不如重新 load 一下。看看FreeBSD 对安全性的要求:

The security model of (Free)BSD says that you should not be able to become root without physical access or wheel membership, even if you know the root password – i.e. if a solution is found, it’s either a bug or the result of (intentionally or not) previously having overridden the security model (e.g. by installing sudo with certain config, or marking a bunch of pseudo-ttys as “secure”).

还有一个要提醒自己的就是少开几个 terminal,习惯了开一堆 terminal 对应不同的服务器,有时候几个 terminal 对应一台机器,然后不停的切换,弄得都不知道哪个 terminal 对应哪个服务器了,就像今天那样以为 FreeBSD 是 Linux 了,想当然的把 Linux 的路径加到了 FreeBSD 里。还好数据都有备份,损失一点时间,重新 load 一个系统后就可以把数据传上去了。虽然被 FreeBSD 小小的折磨了一下,不过还是要赞一下它的安全性。

评论 (2 Comments)

  1. FreeBSD 文件系统,不能将系统挂载到寄主机器呀? .. 是否需要安装对文件系统的支持呢?

  2. FreeBSD 文件系统是 UFS 啊,你需要在 Linux 内核配置的时候加上 UFS 支持。

发表评论