昨天客户一个正在使用的Linux服务器ssh, telnet等服务突然无法连接, 但是可以ping通. 从控制台登录后, 发现除init进程外, 其他只有getty和gdm进程在运行, xinetd, sshd, 等所有服务进程都消失了. 并且init进程是随机器启动的, 而getty和gdm进程都是故障发生后, 刚刚启动的. 从root执行命令的记录中, 也看不到任何有破坏性命令的痕迹.
简直太干净了!!!
最终, 一位操作员承认他试图弹出光盘时使用了fuser命令, 但是却没有指定正确的挂载点, fuser试图杀死所有使用根目录下文件的进程, 最终除init进程外, 所有的进程都被杀死, 由于gdm和getty写在inittab中, 并且指定的action为respawn, 这些进程被杀死后立即重新启动. 而其他进程则没有这样的幸运.
fuser是一个相当强大的命令, 可以在不加确认的情况下, 杀死使用某些文件或文件系统的进程, 非常有用. 但是这一命令太过强大, 以至于稍有不慎重就可以危及系统安全. 所以在使用之前, 要特别慎重.
和fuser一样可能危害系统的命令还有rm, 相信有不少系统管理员错误的使用rm命令, 导致数据丢失的经历.
对于fuser和rm 等命令, 在实际执行之前, 最好能够看看, 要杀死的是什么进程, 要删除的是什么文件. 然后再执行实际操作, 以尽量减少误操作, 而如果在脚本中使用这些命令, 则一定要考虑清除可能出现的各种情况. 须知: 一失足顿成千古恨!