标签: audit

如何实时监控进程打开的文件?

我知道我可以查看使用过程中打开文件lsof 的时间在那一刻,我的Linux机器上。但是,进程可以如此快速地打开、更改和关闭文件,以至于我在使用标准 shell 脚本(例如watch)监视它时将无法看到它,如“在 linux 上监视打开的进程文件(实时)”中所述.

所以,我想我正在寻找一种简单的方法来审核流程并查看它在过去的时间里做了什么。如果还可以查看它(尝试)建立的网络连接并在进程有时间运行而不启动审计之前开始审计,那就太好了。

理想情况下,我想这样做:

sh $ audit-lsof /path/to/executable
4530.848254 OPEN  read  /etc/myconfig
4530.848260 OPEN  write /var/log/mylog.log
4540.345986 OPEN  read  /home/gert/.ssh/id_rsa          <-- suspicious
4540.650345 OPEN  socket TCP ::1:34895 -> 1.2.3.4:80    |
[...]
4541.023485 CLOSE       /home/gert/.ssh/id_rsa          <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80    |   this when polling
Run Code Online (Sandbox Code Playgroud)

这是否可以使用strace某些标志来看不到每个系统调用?

process lsof open-files audit

50
推荐指数
1
解决办法
4万
查看次数

事后寻找命令执行时间

我刚刚从 bash 提示符执行了一个长时间运行的进程。事后看来,我希望我能time坚持下去,或者记下我开始的时间。

有没有办法追溯获得这些信息?在.bash_history似乎不包含时间戳。

在我的特殊情况下,它是 Mac OS X,但我对通用 Unix/Linux 解决方案感兴趣。

澄清一下,该过程现已完成,除非绝对必要,否则我不想再次运行它!

osx bash command-history timestamps audit

22
推荐指数
3
解决办法
3048
查看次数

如何在 dmesg 中禁用无用的“审核成功”日志条目

简短版本:如何在 Fedora 系统上禁用审计消息 (dmesg)?


Fedora 系统不断在 dmesg 中记录“审计:成功”消息 - 以一种极端的方式,dmesg 变得无法使用,因为它被这些消息填满(dmesg | grep -v audit为空)。这些消息完全没有用,因为它们显然想通知用户一些日常内部过程已经成功(在调试某些东西时可能会感兴趣,但在这种情况下它只是噪音)。

甚至命令行界面(切换到与非X TTY当Ctrl+ Alt+ F2)变得不可使用,因为它总是与这些审核消息混乱,这是不可能的读取实际上是由用户运行的命令的输出。例如,输入用户名(登录)后,会喷出一条审核消息(显然是告诉用户某些内容已格式化/打印成功):

审计:类型=1131审计(1446913801.945:10129):pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=fprintd comm="systemd" exe="/usr/lib/systemd/systemd" 主机名 地址=? 终端=?资源=成功'

似乎这些消息中的大多数表示“成功”,但是也有许多审核消息不包含此关键字。运行 Chromium 会触发数百个:

审计:类型=1326审计(1446932349.568:10307):auid=500 uid=500 gid=500 ses=2 pid=1593 comm="chrome" exe="/usr/lib64/chromium/chrome" sig=0 arch=c000003e系统调用=273 兼容=0 ip=0x7f9a1d0a34f4 代码=0x50000

其他消息包括:

审计:类型=1131审计(1446934361.948:10327):pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=NetworkManager-dispatcher comm="systemd" exe="/usr/lib/systemd/systemd" =?地址=? 终端=?资源=成功'

审计:类型=1103 审计(1446926401.821:10253):pid=28148 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:setcred grantors=p am_env,pam_unix"exe acct/="user/usr /crond”主机名=?地址=? 终端=cron res=成功'

通常,大多数最近的审计消息(在撰写本文时)都包含关键字“ NetworkManager ”或“ chrome ”。

如何完全禁用这些消息?


附加点:

  • 如果有人可能会想“您应该阅读和分析这些审核消息,而不是禁用它们,它们可能很重要”,不,它们不重要,它们几乎完全是“成功”消息。没有人需要被告知应该有效的东西实际上有效。但是,如果记录了一条真正重要的消息,那么在成千上万条无关紧要的消息风暴中永远不会注意到它。在任何情况下,这个特定系统都不需要审计日志(无论如何它都在受控环境中运行)。 …

linux fedora networkmanager systemd audit

20
推荐指数
3
解决办法
3万
查看次数

如何在 CentOS/Fedora 下禁用与 sudo 相关的日志以成功执行命令?

您可以通过添加类似的东西来禁用与 sudo 相关的日志消息

Defaults:juser !syslog
Run Code Online (Sandbox Code Playgroud)

sudoers文件。

这将禁用日志记录到系统日志。但是在例如 CentOS/Fedoraauditd下,默认情况下会启用它继续(详细地)通过以下方式记录成功的 sudo 执行/var/log/audit/audit.log. 这意味着一个(成功的)sudo 调用会产生 5 个审计日志条目。

使这些消息静音的一种(可能过于广泛)方法是通过以下auditctl选项禁用对这些消息的审核:

-a exclude,always -F msgtype=USER_START
-a exclude,always -F msgtype=USER_END 
-a exclude,always -F msgtype=USER_CMD
-a exclude,always -F msgtype=CRED_ACQ
-a exclude,always -F msgtype=CRED_DISP
Run Code Online (Sandbox Code Playgroud)

是否有更优雅/细粒度的方法来仅禁用成功的 sudo 调用的审计?

(也许仅适用于某个 sudo 用户?)

fedora sudo centos audit linux-audit

18
推荐指数
1
解决办法
6192
查看次数

有没有一种简单的方法来记录所有执行的命令,包括命令行参数?

我试图找到如何记录特定实例化rrdtool以查看它接收的路径是否不正确。

我知道我可以将可执行文件包装在一个可以记录参数的 shell 脚本中,但我想知道是否有一种更特定于内核的方法来监视它,也许是一个文件系统回调,可以看到特定的 /proc/pid/exe匹配给定的二进制文件?

logs proc audit arguments

15
推荐指数
2
解决办法
2万
查看次数

如何使用auditd记录进程及其所有后代所做的所有系统调用

我可以

auditctl -a always,exit -S all -F pid=1234
Run Code Online (Sandbox Code Playgroud)

记录所有由 pid 1234 完成的系统调用,并且:

auditctl -a always,exit -S all -F ppid=1234
Run Code Online (Sandbox Code Playgroud)

对于它的孩子,但我如何覆盖孙辈和他们的孩子(现在和未来)?

我不能依赖会改变的 (e)uid/(e)gid。

(请注意,使用strace也不是一种选择)

linux audit linux-audit

15
推荐指数
1
解决办法
2635
查看次数

显示文件的历史记录(修改过文件的用户列表)

是否有命令可以显示修改提供文件历史记录的文件的用户列表?

我知道使用 svn/git 等是可能的,但是我们有一个不在 SVN 中的配置文件并且有人修改了它。

linux files audit

10
推荐指数
1
解决办法
5万
查看次数

为什么即使我有组权限,也会收到“权限被拒绝”错误?

我正在尝试在 Manjaro Linux 中运行一个名为“Dofus”的游戏。我已经用打包器安装了它,把它放在/opt/ankama文件夹下。该文件夹的所有权(以及其中的每个文件)是 root 用户和游戏组。按照安装包的指示,我已将自己(用户familia)添加到游戏组中(如果不这样做,“每次尝试运行更新程序时我都必须输入密码”)。

但是,在运行游戏时,它在输入我的密码后崩溃(这不应该是必需的)。检查日志,我遇到了一些类似的错误:

[29/08 20:44:07.114]{T001}INFO    c/net/NetworkAccessManager.cpp L87  : Starting request GET http://dl.ak.ankama.com/updates/uc1/projects/dofus2/updates/check.9554275D
[29/08 20:44:07.291]{T001}INFO    c/net/NetworkAccessManager.cpp L313 : Request GET http://dl.ak.ankama.com/updates/uc1/projects/dofus2/updates/check.9554275D Finished (status : 200)
[29/08 20:44:07.292]{T001}ERROR   n/src/update/UpdateProcess.cpp L852 : Can not cache script data
Run Code Online (Sandbox Code Playgroud)

所以,我怀疑 Permission Denied 错误。启动后片刻出现错误信息在此处输入图片说明

这意味着“写入磁盘时发生错误 - 请验证您是否拥有足够的权限和足够的磁盘空间”。

然后,经过一些研究,我遇到了“auditd”,它可以记录文件夹中的文件访问。设置好之后,查看哪些文件访问不成功,就是这个结果

所有这些错误实际上都指向一个唯一的文件,/opt/ankama/transition/transition,并带有对 ( open)的系统调用。此文件的权限为rwxrwxr-x( 775)。所以,我对它有 rwx 权限,但它给了我一个错误exit -13,这是一个EACESS错误(权限被拒绝)。

我已经尝试重新启动计算机,登录和注销。他们都没有工作。

如果我将文件夹权限设置为familia:games,它就可以毫无问题地运行,我什至不需要输入密码。然而,这种方式似乎不太对。即使我有读/写/执行权限,为什么我会收到 Permission Denied 错误的任何想法?

马克说过我可能需要在路径前缀的所有目录中获得 +x 权限。路径本身是/opt/ankama/transition/transition …

permissions games audit linux-audit

9
推荐指数
1
解决办法
2万
查看次数

如何将网络或用户源连接数据添加到历史记录条目?

我想修改我管理的系统上所有用户的历史设置。我希望它包含来自连接终端的信息,例如来自who

sysadmin:/ # who
sysadmin  pts/0        Mar 26 07:11 (sysadmin.doofus.local)
Run Code Online (Sandbox Code Playgroud)

我目前通过以下方式修改我的历史记录。我知道这些设置中的许多设置已在此处多次介绍。然而,我很久以前从“ Linux System Administration Recipes by: Juliet Kemp ”中提取了这段代码。

shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T  "
Run Code Online (Sandbox Code Playgroud)

shopt -s histappend 修复了多个终端打开时信息可能丢失的问题。

PROMPT_COMMAND='history -n;history -a' 扩展以提供跨多个终端的实时附加到历史记录。

HISTSIZE=100000 HISTFILESIZE=100000 延长history保留金额

HISTTIMEFORMAT="%m/%d/%y %T " 用时间戳记在每一行历史记录之前

你通常会得到什么 history

835  ls
836  cd ..
Run Code Online (Sandbox Code Playgroud)

我修改后的当前history结果

5853  03/26/12 07:16:49  ls
5854  03/26/12 07:16:50  ll
Run Code Online (Sandbox Code Playgroud)

history我想看到的回报

5853  03/26/12 07:16:49  sysadmin.doofus.local    ls
5854  03/26/12 07:16:50  sysadmin.doofus.local    ll

001  03/26/12 …
Run Code Online (Sandbox Code Playgroud)

shell users command-history audit

8
推荐指数
1
解决办法
1694
查看次数

如何审核特定用户对给定路径内任何文件或文件夹的访问

我一直在阅读有关配置的一些信息auditd,但我无法弄清楚,我知道该怎么做

  • 记录用户的特定系统调用
  • 记录所有用户对特定文件的访问

然而,我无法弄清楚的是:如何设置审计守护程序,以便它/home仅针对给定的用户 ID记录对文件夹结构中所有文件(例如以及其中的所有子文件夹和文件)的访问(读/写)。

因此,如果我有一个用户 ID 为 2053 的用户“bob”,我将知道他们曾尝试在文件系统上打开或读取的每个文件。我对系统服务或任何其他用户访问这些文件不感兴趣。

额外的问题:是否有可能为整个文件系统层次结构设置这种审计?由于某些原因,AFAIK 审计不允许这样做

linux audit

8
推荐指数
1
解决办法
1万
查看次数