谁是sftp文件给我? 有什么办法可以找出来吗?

我不得不承担我们用作文件服务器的Ubuntu linux机器的责任。 我几乎没有Linux的经验。 我想要处理的事情之一是一些非常大的文件,有人正在转移到这台服务器,并吃掉任何可用的空间。 我问过,没有人使用这些文件或知道他们来自哪里。 我不想每天都继续login,不断删除这些文件,但是我不知道谁来追踪他们来自哪里。 我所知道的是,文件被推送到我们的服务器,很可能通过SFTP,并且我们不是从某个地方拉文件(我没有find任何这样做的cron工作)。 有没有办法让我找出这些文件来自哪里,也许阻止它们?

一对夫妇的想法:

是否有一个共同的SFTP用户名和密码,每个人都用来连接到服务器,或者每个人都有自己的用户名? 如果每个用户都有自己的用户名,则可以使用ls -l path/to/file来查看文件的所有者。

由于SFTP运行在SSH之上,因此可以在/var/log/auth.log中查看身份validation日志,以查看login的人员和时间。 您可以在大文件中检查创build时间,看看是否可以关联创build/login时间。 auth.log文件具有每次login到机器的IP地址和用户名。 一旦你有IP地址,你可以做一个反向的DNS查找(即使用dig @your_nameserver -x offending_ip +short ,或者做任何其他的networking侦察你可以想到的。

一旦你发现谁使用了所有的空间,这取决于谁在使用你的文件服务器。 如果是公共文件服务器,禁止IP似乎是合理的,但如果有人打算滥用您的服务,他们可以通过另一个IP进行代理,然后重新执行。 如果它是组织的内部文件服务器,那么如果可以find它们,您可能想与罪犯交谈。 编写一套简单的使用文件服务器的规则(即不要上传大文件)可能是值得的,并将其发布到人们可以看到的地方。

一般来说:

  • 文件将始终具有所有权的详细信息,用户名和组,查找这两者可能已经提供了有关实际业务用户,特定业务stream程或负责任的服务器stream程的信息
  • 文件位置/目录path也经常提示特定的服务。 即在/var/www下的文件提示在Web服务器进程,在线上传表单或Web DAV等。
  • 此外,大多数守护进程(包括sftp)都会logging事件,如用户身份validation和/或上传到/var/log ,这也可以让您确定从哪个系统启动上传

您可以使用systemtap来查找哪个PID正在创build文件。 这里是如何看待删除: https : //serverfault.com/a/310477/30946对于创build,你需要看creat(2)open(2)系统调用。

systemtap脚本将是:

 probe syscall.creat, syscall.open { printf ("%s(%d) open (%s) userID(%d)\n", execname(), pid(), argstr, uid()) }