繁体   English   中英

确定上次修改 Linux 中文件的 UID?

[英]Determine UID that last modified a file in Linux?

我正在编写一个程序,它将监视 select 文件和目录的更改。 有些文件是世界可写的,有些是所有者,有些是组。

我需要做的是能够找出最后一个修改(不仅仅是访问)文件的人。 不知何故,我认为这很简单,因为我们知道文件的 inode。但是我似乎找不到任何方法来获得它。 我认为有一种实用的方法可以将任何给定的 inode 与上次访问它的 uid 关联起来。

我想我已经挤压了谷歌,因为它会给我关于这个话题的所有信息。

任何帮助表示赞赏。 我正在 C 中编写程序。

编辑:

在修改文件的任何程序的PID早已消失后,我需要能够做到这一点。

如果您使用的是 2.6 kernel,则可以利用内核的 auditd 守护程序。 检查此 URL 它可能会给你一些关于如何完成你想要做的事情的提示。 我确定您可以在 C 中使用 API。

据我所知,任何常见文件系统都不会存储此信息,但您应该能够挂接到inotify并保留哪些进程接触哪些文件的审计跟踪。

好的,使用普通文件系统的直接旧标准 Linux,您将无法做到这一点。 该信息不会存储在任何地方(有关存储的内容,请参见man lstat 。)

正如@pablo 建议的那样,您可以在打开安全审计的情况下执行此操作。 他指出的链接是一个好的开始,但它的要点是:

  • 你打开审计守护进程,它启用审计形式 kernel
  • 您配置规则文件以捕获您想要的内容
  • 您在审计文件中搜索您想要的事件。

这里的困难在于,如果您开始审核所有文件的所有文件操作,那么审核将会变得很大。

那么你想要满足的实际需求是什么?

非常基本,但它有效:您可以轻松编写一个小 c 程序来执行您想要的操作 此示例检索文件或目录或链接的 UID,只需尝试找到您想要的属性。

编译:

gcc -x c my-prog.c -o my-prog

然后:

./my-prog /etc

可以像这样获得很多其他信息

它不坚固。 但无论如何,我知道如何使用它,并在 bash shell 中进行检查:-)

[ -x /etc ] && my-prog /etc

源代码:

# retrieve the uid of a file
# source code: my-prog.c
#
#include <stdio.h> 
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char **argv) {
  struct stat buffer;
  int status;
  char *fname;
  fname=argv[1];
  status = stat(fname, &buffer);
  printf("%i",buffer.st_uid);
  return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM