6

我对 linux 很陌生,对新手的问题感到抱歉。我有一个家庭作业额外学分问题,我试图做但没有得到它。

Q. 编写一个安全 shell 脚本,记录每个进程的以下信息:用户 ID、开始时间、结束时间(如果进程仍在运行,则为 0)、进程是否尝试访问安全文件(存储为 yes 或 no ) 创建的日志称为 process_security_log,其中上述每条信息都存储在单独的行中,并且每个条目都紧随其后(即没有空行)。编写一个 shell 脚本来检查这个日志并输出任何仍在运行并试图访问安全文件的进程的用户 ID。

我首先尝试捕获用户并回显它,但失败了。

output=`ps -ef | grep [*]`
set -- $output
User=$1
echo $User
4

3 回答 3

1

的输出ps既不充分,也无法产生该问题所需的数据。

您需要像 auditd、SELinux 或直接内核 hack(即 fork.c)之类的东西来远程执行安全日志记录领域的任何事情。

更新

其他人提出了使用 shell 命令日志记录ps和朋友(proc 或 sysfs)的建议。它们可能很有用,并且确实有它们的位置(显然)。我认为不应为此目的而依赖它们,尤其是在教育背景下。

...进程是否尝试访问安全文件(存储为是或否)

似乎是其他答案忽略的那个。我坚持我最初的答案,但正如丹尼尔指出的那样,还有其他有趣的方法可以装饰这些数据。

对于教育练习,这些工具将有助于提供更完整的答案。

于 2012-05-04T02:45:48.767 回答
0

看看/proc 伪文件系统

在此内部,每个当前正在运行的进程都有一个子目录 - 进程 [pid] 在 /proc/[pid]/ 中提供其信息。在该目录中,您可以使用 /prod/[pid]/stat/ 或 /proc/[pid]/status 来获取有关哪个用户启动进程以及何时启动的信息。

我不确定“安全文件”的分配是什么意思,但是如果您有某种方法可以确定哪些文件是安全的,您可以通过 /prod/[pid]/fd 获得有关打开文件(包括它们的名称)的信息/ 和 /prod/[pid]/fdinfo。

/proc 是否足以用于真正的安全日志记录?不,但是 /proc 足以获取有关系统上当前正在运行哪些进程的信息,这可能是您完成有关 shell 脚本的家庭作业所需要的。此外,在这个类之外,您可能会发现 /proc 稍后可用于其他目的,例如查看进程的映射页面。如果您正在编写堆栈跟踪实用程序或想知道它们是如何工作的,或者您正在调试使用内存映射文件的代码,这可能会派上用场。

于 2012-05-04T05:42:54.547 回答
0

由于这是家庭作业,我假设该场景不是真实世界的场景,而只是一个学习练习。shell 并不是真正适合进行安全审计或进程记帐的地方。但是,这里有一些提示可以帮助您了解在 shell 提示符下可以执行的操作。

  1. 您可以设置 bash PROMPT_COMMAND 来记录您的进程。
  2. 您可以tailgrep您的命令历史记录用于日志记录。
  3. 您可以使用/usr/bin/script(通常在 bsdutils 包中找到)来创建会话的打字稿。
  4. 您可以ps使用子shell 或实用程序循环运行watch,以查看当前正在运行的进程。
  5. 您可以更轻松地使用pidof或查找进程。pgrep
  6. 您可以修改您的 .bashrc 或其他 shell 启动文件来设置您的环境或启动您的日志记录工具。

作为一个起点,你可能会从一些像这样微不足道的事情开始:

$ export PROMPT_COMMAND='history | tail -n1'
 56 export PROMPT_COMMAND='history | tail -n1'
$ ls /etc/passwd
/etc/passwd
 57 ls /etc/passwd

并构建您认为必要的任何其他日志记录数据或过程信息。希望这能让你指出正确的方向!

于 2012-05-04T05:32:14.573 回答