我知道我可以查看使用过程中打开文件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某些标志来看不到每个系统调用?
我刚刚从 bash 提示符执行了一个长时间运行的进程。事后看来,我希望我能time坚持下去,或者记下我开始的时间。
有没有办法追溯获得这些信息?在.bash_history似乎不包含时间戳。
在我的特殊情况下,它是 Mac OS X,但我对通用 Unix/Linux 解决方案感兴趣。
澄清一下,该过程现已完成,除非绝对必要,否则我不想再次运行它!
简短版本:如何在 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 ”。
如何完全禁用这些消息?
附加点:
您可以通过添加类似的东西来禁用与 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 用户?)
我试图找到如何记录特定实例化rrdtool以查看它接收的路径是否不正确。
我知道我可以将可执行文件包装在一个可以记录参数的 shell 脚本中,但我想知道是否有一种更特定于内核的方法来监视它,也许是一个文件系统回调,可以看到特定的 /proc/pid/exe匹配给定的二进制文件?
我可以
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也不是一种选择)
是否有命令可以显示修改提供文件历史记录的文件的用户列表?
我知道使用 svn/git 等是可能的,但是我们有一个不在 SVN 中的配置文件并且有人修改了它。
我正在尝试在 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 …
我想修改我管理的系统上所有用户的历史设置。我希望它包含来自连接终端的信息,例如来自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) 我一直在阅读有关配置的一些信息auditd,但我无法弄清楚,我知道该怎么做
然而,我无法弄清楚的是:如何设置审计守护程序,以便它/home仅针对给定的用户 ID记录对文件夹结构中所有文件(例如以及其中的所有子文件夹和文件)的访问(读/写)。
因此,如果我有一个用户 ID 为 2053 的用户“bob”,我将知道他们曾尝试在文件系统上打开或读取的每个文件。我对系统服务或任何其他用户访问这些文件不感兴趣。
额外的问题:是否有可能为整个文件系统层次结构设置这种审计?由于某些原因,AFAIK 审计不允许这样做