Linux 服务器上有谁打开了文件

Linux 服务器上有谁打开了文件

我有一个相当常见的任务,那就是在我们的 Windows 环境中查找谁在我们的 Linux(Ubuntu)文件服务器上打开了文件。

我们在网络上使用 Samba,我从我的工作站使用 Putty 建立一个 shell 窗口来运行 bash 脚本。

我一直在使用类似这样的方法来查找打开了哪些文件:(这将返回每个打开文件的进程 ID 列表)

Robert:$ sudo lsof | grep "/srv/office/some/folder"

然后,我跟进类似这样的操作来显示谁拥有该进程:(这将返回使用 IP4 协议在网络上拥有该进程的机器的名称)

Robert:$ sudo lsof -p 27295 | grep "IPv4"

现在我知道了哪个 Windows 客户端打开了文件并可以从那里采取行动。

正如您所看到的,这并不难,但很耗时。我更希望有一个可以运行的 Windows 应用程序,它可以给我我想要的东西。

因此,我一直在考虑创建一些可以在 Linux 上运行的进程,该进程侦听某个端口,然后返回所有打开文件的干净列表以及打开该文件的主机的 IP 地址。然后,一个小型 Windows 客户端应用程序可以在端口上发送请求。

这似乎应该是一个非常普遍的需求,但我找不到以前做过的类似的事情。

有什么建议么?

答案1

I. 如果您只需要在一台计算机上执行该任务 - 我会这样做:

  1. 为此类任务创建 Linux 帐户(例如“sambaadmin”),以提高安全性
  2. 配置 putty 以便该帐户自动登录
  3. 编写执行管理任务的脚本(/home/sambaadmin/see_clients.sh例如)。我会这样完成你的任务:

    smbstatus -p 读取 -p “按 [Enter] 退出...” 退出

  4. 为其添加执行权限(chmod +x /home/sambaadmin/see_clients.sh

  5. 在/home/sambaadmin/.bash_profile文件末尾调用此脚本。.bash_profile在用户登录后自动执行。

  6. 在 Windows 桌面上创建 Putty Shoutcut 以实现自动登录会话

完成后,您的 shourtuc 将打开 putty,登录,您的“管理任务脚本”将被执行,您将在 putty 窗口中看到它,按下 Enter 后,会话将结束。

II. 如果您在公司使用多台计算机 - 请用 python 编写简单的 Web 应用程序或使用一些服务器 Web 管理软件(例如 Webmin)。

III. 您可以使用 cron 每隔一两分钟执行一次脚本,如下所示:

smbstatus -p > /somewhere/sambashare/openfiles.txt

您可以在 Windows 中创建该文件的快捷方式,然后打开它即可查看发生了什么。

\\sambaserver\sambashare\openfiles.txt

相关内容