今天我们的一台生产机器(亚马逊EC2)出现故障,我无法启动实例,因为我无法进入SSH,连接被拒绝,我不知道该怎么办,有一段时间我能够带来实例 – (好短而甜).
我以某种方式弄清楚问题的根本原因是/ dev / urandom文件缺失,因此,SSH无法启动.我必须在重新启动时创建此文件,并通过在现有的启动(init)脚本中添加几行代码来创建它,并且可以启动并运行服务器,这意味着我可以通过SSH进入该框.
我需要以下专家建议,请不要犹豫,给我更多信息:
>我应该留下我在其中一个init-script文件中编写的那些代码行吗?
>什么可能是丢失/ dev / urandom文件的原因?
>我该怎样做以避免将来出现这种情况?
谢谢.
更新:
对于那些想知道我写的内容的人:
#!/bin/bash cd /dev ; /sbin/MAKEDEV urandom ; /etc/init.d/ssh start
解决方法
我建议保留代码.我知道甚至建议它听起来很愚蠢,但是你的/ dev / urandom完全消失的事实绝对是奇怪的,它可能会再次发生.修改代码以发出日志消息,如果将来需要重新创建设备文件,则不能忽略这些消息.
您的/ dev / urandom被删除没有充分的理由.可以期望的绝对最好的是诸如木偶或厨师被配置为从tarball编写文件目录的工具,并且首先完全清除目录作为扩展tarball的一部分. (我会认为这样的用法严重错误配置了该工具.)但是以root身份运行的任何进程都有删除文件的权限,所以它几乎可以是任何东西.
您可以在/ dev /目录中配置auditd以监视文件创建,删除和重命名.将规则放入/etc/audit/audit.rules以配置持久监视:
-w /dev/ -p wa
有关配置审计监视列表的完整详细信息,请参阅auditctl(8);它非常易于配置,您可能需要将配置调整到您的系统,因此“标准”事件不会使您的审计日志混乱.
另一种选择是使用chattr(1)程序在文件上设置immutable属性.任何可能删除文件的程序或工具都可能无法在删除文件之前删除不可变属性.