家庭作业:如何使用bash shell记录审核流程?

时间:2012-05-01 21:02:56

标签: linux bash

我对linux很新,很抱歉新手问题。 我有一个功课额外的信用问题,我试图做,但未能得到它。

  

Q值。编写一个记录以下信息的安全shell脚本   对于每个进程:用户ID,开始时间,结束时间(如果进程为0则为0)   仍在运行),该进程是否已尝试访问安全文件   (存储为yes或no)调用创建的日志   process_security_log,其中包含上述每条信息   存储在一个单独的行上,每个条目立即跟随(即,   没有空行)。编写一个将要检查的shell脚本   此日志并输出仍在运行的任何进程的用户标识   曾试图访问安全文件。

我开始尝试捕获用户并回显它但失败了。

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

3 个答案:

答案 0 :(得分:1)

ps的输出不足,无法生成此问题所需的数据。

你需要像auditd,SELinux或直接内核黑客(即fork.c)这样的东西在安全日志记录领域远程做任何事情。

<强>更新

其他人已经建议使用shell命令日志记录,ps和朋友(proc或sysfs)。它们可能很有用,并且确实有它们的位置(显然)。我认为他们不应该依赖来达到这个目的,特别是在教育背景下。

  

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

似乎是其他答案忽略的那个。我坚持原来的答案,但丹尼尔指出还有其他有趣的方法来装饰这些数据。

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

答案 1 :(得分:0)

由于这是家庭作业,我假设场景不是真实场景,而仅仅是一个学习练习。 shell实际上不是进行安全审核或process accounting的正确位置。但是,这里有一些指示可以帮助您在shell提示符下发现可以做的事情。

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

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

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

答案 2 :(得分:0)

查看/proc pseudo-filesystem

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

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

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