【问题标题】:Find and remove over SSH?通过 SSH 查找和删除?
【发布时间】:2012-03-07 23:43:54
【问题描述】:

我的网络服务器被黑了(尽管安全团队告诉我没有受到任何损害)并且无数文件有一行额外的 PHP 代码生成指向某个越南网站的链接。

鉴于我的服务器上有数以万计的文件,有没有一种方法可以让我使用 SSH 并从找到的每个文件中删除该行代码?

请在您的回答中具体说明,我只为一些非常基本的任务使用过几次 SSH,并且不想最终删除我的一堆文件!

【问题讨论】:

    标签: security ssh removeall


    【解决方案1】:

    是的,几行 shell 脚本就可以了。不过,我犹豫着把它给你,好像出了什么问题,我会因为弄乱你的网络服务器而受到指责。也就是说,解决方案可能很简单:

    for i in `find /where/ever -name '*.php'`; do
        mv $i $i.bak
        grep -v "http://vietnamese.web.site" $i.bak >> $i
    done
    

    这会找到/where/ever 下的所有*php 文件,并删除其中包含http://vietnamese.web.site 的所有行。它为每个文件创建一个*.bak 副本。在你运行这个并且一切看起来都很好之后,你可以删除备份

    find . -name '*.php.bak' -exec rm \{\} \;
    

    您的下一个任务是寻找新的提供商,因为他们不仅被黑了,而且显然没有备份。祝你好运。

    【讨论】:

    • Ernest,有 php 和 HTML 文件受到影响,如果我只使用 * 会检查每个文件吗?当然,实际代码是一段 PHP,因此在解析之前它不是实际链接。我可以用 代替 URL 吗?我会问我的主人他们是否可以为我做这件事,以确保它做得正确。如果没有,我会试一试,我不会尝试手动操作。
    • 所有这些命令都非常灵活。如果您希望find 查找所有*.htm 以及所有*.php 文件,那么您可以使用find /where/ever -name '*.php' -or -name '*.htm' 之类的谓词。 URL 只是一个示例,请使用您能想到的任何唯一字符串来标识您需要删除的行。
    【解决方案2】:

    首先创建一个匹配错误代码(并且仅匹配错误代码)的正则表达式,然后运行

    find /path/to/webroot -name \*.php -exec echo sed -i -e 's/your-regex-here//' {} \;
    

    如果一切正常,请删除echo

    【讨论】:

      【解决方案3】:

      我按照以下方式进行。例如。删除匹配特定名称或扩展名的文件。

      rm -rf * cron.php。 *

      rm -rf * match_string *

      其中 match_string 将是任何字符串。确保 * 和字符串名称之间没有空格。

      【讨论】:

        【解决方案4】:
        rm -f cron.php.*
        

        删除此文件夹中名为 cron.php.[whereveryouwant]

        的所有文件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          • 2015-10-18
          • 2014-11-16
          • 1970-01-01
          相关资源
          最近更新 更多