我正在开发一个程序(Linux),需要非常简单的基于文本的IPC。使用标准输入/输出管道非常容易。我可以相信发送到进程stdin的消息不会被任何人读取吗?此外,我可以相信如果我保持其stdout的管道,只有我可以读取它输出的内容吗?我只是想确保没有procfs-based trick可以从这些管道中读取。
尽管如此,没有什么能保护您的应用程序免受内核空间中的rootkit攻击。它可以读取不仅是标准输入/输出终端,而且还可以读取您运行时的整个进程内存。并且可能覆盖您已经放置的一些保护措施。
如果您真的需要那种级别的保护,您可以考虑使用SELinux沙箱技术与您正在进行的操作相结合 - 在http://danwalsh.livejournal.com/阅读更多有关它的信息。libselinux让您与之交互以检查保护是否存在等等。
没有什么诀窍,我所能想到的唯一与检测stdout是否被重定向到其他地方有关的方法是像这个简单的C函数中所示的那样进行操作,如isredirected
,除此之外,你需要确保消息的安全性...另外,使用procfs技巧需要root权限才能访问某些procfs功能...因此,请确保在其中放置一个检查以确保它不作为root运行...
int isredirected(void){
if (!isatty(fileno(stdin))) return 1;
return 0;
}
希望这能有所帮助, 最好的问候,汤姆。
isatty
会对管道返回false,而这正是OP想要做的。 - C. K. Young话虽如此,如果您处理敏感数据,请查看 mlock。
uniq | sort
,然后尝试通过/proc/XXX/fd
窥探管道的两端),似乎我无法读取发送到管道中的内容,但我可以向其中注入数据。