strace 是找出程序写入文件系统位置的合适工具吗?

Mic*_*l A 5 filesystems security sed strace sandbox

我想确定某个应用程序(例如,surf)写入文件系统的位置,以确保它不留下任何痕迹。如果没有专用的沙箱系统,这可能并不容易,但我想知道是否有比简单地使用strace.

例如,这里有一个简单的脚本,名为run

#!/bin/bash

mkdir history
echo foo bar > history/hist.db
echo hello > test
Run Code Online (Sandbox Code Playgroud)

strace是这样跑的:

strace ./run 2>&1 | sed -n '/^open.*WRONLY/p' | sed 's/.*"\(.*\)"[^"]*$/\1/'
Run Code Online (Sandbox Code Playgroud)

查看已写入的所有文件(但不是目录)(我认为这不会捕获已创建但未写入的文件,例如由touch.创建的文件)。输出:

history/hist.db
test
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,因为这对于除微不足道的应用程序之外的任何东西都变得笨拙,或者我可以传递给strace(或更好的正则表达式?)我是否会冒丢失写入文件系统的文件的风险?

slm*_*slm 4

您还可以用来lsof“监视”进程将文件写入磁盘的过程。这更像是一种轮询解决方案,因此如果文件很小并且快速写入磁盘,您可能会错过一些文件,但是如果将文件写入磁盘的应用程序是服务器/服务,您可以使用它来观看这些类型的lsof文件处理相当容易。

$ lsof -p PID
Run Code Online (Sandbox Code Playgroud)

例子

$ lsof -p `pidof gnome-terminal` | head -5
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
gnome-ter 7423 saml  cwd    DIR              253,2    32768  10354689 /home/saml
gnome-ter 7423 saml  rtd    DIR              253,0     4096         2 /
gnome-ter 7423 saml  txt    REG              253,0   338632   1220790 /usr/bin/gnome-terminal
gnome-ter 7423 saml  mem    REG              253,0   614032   1192949 /usr/lib64/libfreetype.so.6.6.0
Run Code Online (Sandbox Code Playgroud)