更多细节

更多细节

我们的问题在于,我们失去了对 VPS 的 SSH 访问权限,并且我们的日志文件都混在一起了。通过托管服务提供商的 Web 控制台进行硬重启似乎可以解决问题,但问题再次出现。


更多细节

这似乎是随机发生的,大约每两周一次。我们通常首先注意到的症状是我们无法通过 ssh 登录;奇怪的是,服务器仍然提示我们输入密码,但从不让我们登录。Apache 继续运行,但其他系统服务也停止运行。

在发生“错误事件”时,我们在所有日志文件中都收到大量看似随机的垃圾信息(/var/log 中的所有内容以及 Apache 的虚拟主机日志和其他内容)。垃圾信息包含大量空字节、一些看似 unicode 二进制的内容、大块随机 ASCII、其他日志文件的部分内容以及 css/javascript(请参阅下面的示例)。它似乎正在将缓冲区缓存写入当前打开的文件中,但我不知道为什么甚至如何会发生这种情况。Fedora 使用 syslogd 进行日志记录,但我无法在其中发现任何明显的问题。

我们的服务器是运行 Fedora 12 的 VPS。它的主要任务是运行 Apache、Postfix 和 ssh。Apache 所服务的网站使用 PHP/MySQL(上次发生这种情况时,我安装了 Suhosin 补丁,以防这是一次奇怪的缓冲区溢出攻击或类似情况)。

我们对 ssh/htpasswd 用户设置了安全密码,并且日志(无论如何我们都可以读取的部分)并未表明我们的服务器已“从内部”受到攻击。


Borked 日志文件示例

以下是我们 cron 日志的一个片段。这个日志包含一堆空字节和其他二进制数据,但如上所述,其他一些文件包含 ASCII 和/或其他文件的块:

Sep 23 03:05:01 HostName CROND[3208]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:05:01 HostName CROND[3209]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:10:01 HostName CROND[3792]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)
Sep 23 03:10:01 HostName CROND[3795]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:10:01 HostName CROND[3793]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:15:01 HostName CROND[4414]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:15:01 HostName CROND[4415]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:20:01 HostName CROND[5000]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)
Sep 23 03:20:01 HostName CROND[5001]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:20:01 HostName CROND[5003]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:25:01 HostName CROND[5590]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:25:01 HostName CROND[5591]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:30:01 HostName CROND[6175]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:30:01 HostName CROND[6174]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)
Sep 23 03:30:01 HostName CROND[6176]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:35:01 HostName CROND[6763]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:35:01 HostName CROND[6764]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
Sep 23 03:40:01 HostName CROND[7347]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1)
Sep 23 03:40:01 HostName CROND[7349]: (munin) CMD (test -x /usr/bin/munin-cron && /usr/bin/munin-cron)
Sep 23 03:40:01 HostName CROND[7350]: (user1) CMD (/path/to/development.domain.com/public/protected/yiic serverState)
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^$


����.]������^[�Z��� ��H*[ݬ^T�՜^F�Ük֜�՜0�|��Ԝ0��5�֜+�^\J̜aMݺu3^]�'M��I�&�[�n^Vdz�&""^RȳZ�uݳݳʳ��۳g:h��;�5^U;k�j�C��Rj�C ^Zv��Ρġ^\֡T]]���2^@@aa!���Q^^nq�]v֛7oƚ5k`4^Z1^?�|^D^E^E!22^R���P�TX�n��aޚwbgM$
^KQ�����l4U�;���e��v�� 7u֯7oޯDVV^V j5������^O�Vk���5^Q^QI%���ͱ�α�ƍ^[�� ^O

答案1

其中有很多未知因素,但我认为是文件系统故障。

正在运行的守护进程可能在 RAM 中缓存了足够的内容来接受连接,但无法完成完整的身份验证。

混合文件是文件系统(或其恢复)出现问题的强烈迹象。这可能是由软件(实验性内核/文件系统/...)或硬件引起的。我倾向于选择后者。对磁盘运行适当的文件系统检查和硬件测试(坏块,同时,如果可以,运行 memtest86)。

此外,您必须考虑到这种文件共享可能不仅限于日志文件。它也可能存在于代码或数据库中。我建议您验证数据是否在任何地方都有效...

答案2

说到文件系统异常,您的症状似乎正是内存不足的症状。SSH 会提示您,因为它已经在运行,但查找内存来生成新进程的速度很慢。系统服务会因为被 OOM-killer 杀死而消失。日志中是否有对此的引用?

您是否有关于内存使用情况或系统负载的指标,最好是记录在有问题的机器外部?

远程日志记录也非常有用——这样你就可以查看是否有任何重要线索被文件损坏覆盖。Fedora 使用rsyslogd,而 rsyslog 网站有安全设置的说明

相关内容