我对linux很新,很抱歉新手问题。 我有一个功课额外的信用问题,我试图做,但未能得到它。
Q值。编写一个记录以下信息的安全shell脚本 对于每个进程:用户ID,开始时间,结束时间(如果进程为0则为0) 仍在运行),该进程是否已尝试访问安全文件 (存储为yes或no)调用创建的日志 process_security_log,其中包含上述每条信息 存储在一个单独的行上,每个条目立即跟随(即, 没有空行)。编写一个将要检查的shell脚本 此日志并输出仍在运行的任何进程的用户标识 曾试图访问安全文件。
我开始尝试捕获用户并回显它但失败了。
output=`ps -ef | grep [*]`
set -- $output
User=$1
echo $User
答案 0 :(得分:1)
ps
的输出不足,无法生成此问题所需的数据。
你需要像auditd,SELinux或直接内核黑客(即fork.c)这样的东西在安全日志记录领域远程做任何事情。
<强>更新强>
其他人已经建议使用shell命令日志记录,ps
和朋友(proc或sysfs)。它们可能很有用,并且确实有它们的位置(显然)。我认为他们不应该依赖来达到这个目的,特别是在教育背景下。
...进程是否尝试访问安全文件(存储为是或否)
似乎是其他答案忽略的那个。我坚持原来的答案,但丹尼尔指出还有其他有趣的方法来装饰这些数据。
对于教育练习,这些工具将有助于提供更完整的答案。
答案 1 :(得分:0)
由于这是家庭作业,我假设场景不是真实场景,而仅仅是一个学习练习。 shell实际上不是进行安全审核或process accounting的正确位置。但是,这里有一些指示可以帮助您在shell提示符下发现可以做的事情。
tail
或grep
您的命令历史记录用于记录。/usr/bin/script
(通常在bsdutils包中找到)来创建会话的打字稿。ps
实用程序在循环中运行watch
,以查看当前正在运行的进程。pidof
或pgrep
更轻松地查找流程。作为一个起点,你可能会从这样的小事做起:
$ export PROMPT_COMMAND='history | tail -n1'
56 export PROMPT_COMMAND='history | tail -n1'
$ ls /etc/passwd
/etc/passwd
57 ls /etc/passwd
并构建您认为必要的任何其他日志记录数据或流程信息。希望能让你指出正确的方向!
答案 2 :(得分:0)
在此内部,当前正在运行的每个进程都有一个子目录 - process [pid]在/ proc / [pid] /中提供其信息。在该目录中,您可以使用/ prod / [pid] / stat /或/ proc / [pid] / status来获取有关哪个用户启动该进程以及何时启动的信息。
我不确定“安全文件”的分配意味着什么,但是如果你有办法确定哪些文件是安全的,你可以通过/ prod / [pid获得有关打开文件(包括其名称)的信息] / fd /和/ prod / [pid] / fdinfo。
/ proc足以进行真正的安全日志记录吗?不,但/ proc足以获取有关系统当前正在运行哪些进程的信息,这可能是您关于shell脚本编写的家庭作业所需要的。此外,在此类之外,您可能会发现/ proc稍后用于其他目的,例如查看进程的映射页面。如果您正在编写堆栈跟踪实用程序或想要了解它们的工作方式,或者您正在调试使用内存映射文件的代码,这可以派上用场。