stdio通信的安全性

时间:2010-02-18 16:58:53

标签: linux ipc stdio

在我正在开发的程序(Linux)中,我需要非常简单的基于文本的IPC。为此,使用标准输入/输出管道非常容易。我可以相信发送到进程'stdin的消息不能被任何人读取吗?另外,我可以相信,如果我将管道保持在标准输出端,只有我可以读取输出的内容吗?我只是想确保没有基于procfs的技巧可以从这些中读取。

4 个答案:

答案 0 :(得分:2)

老实说,我认为这取决于您认为应用程序需要多少安全性。我在stdin上输入了我的GPG密钥密码。我总是问“可接受的风险是什么?”。

也就是说,没有什么可以保护你的应用程序免受内核空间中的rootkit的攻击。它不仅可以读取std输入/输出终端,还可以读取运行时的整个进程内存。并且可能会覆盖您已经实施的一些保护措施。

您可能会将SELinux沙盒与您正在进行的操作结合使用 - 如果您确实需要这种级别的保护,请在http://danwalsh.livejournal.com/详细了解它。 libselinux允许您与它进行交互以检查是否存在保护等。

答案 1 :(得分:1)

据我所知,没有“技巧”,其他用户无法读取你的stdin / stdout。请记住:

  • 以同一用户身份运行的其他进程可以读取进程的内存;这是因为安全保护您免受其他用户的侵害。
  • 以超级用户身份运行的进程可以执行所有操作。

也就是说,如果您要处理敏感数据,请查看mlock

答案 2 :(得分:1)

没有任何技巧,我唯一可以想到的就是检测stdout是否被重定向到其他地方就像在一个简单的C函数中那样做isredirected,除了onus依赖于你要确保消息是安全的...另一件事是,使用procfs技巧需要root权限来访问某些procfs功能...所以请确保你在那里检查以确保它不以root身份运行...

int isredirected(void){
if (!isatty(fileno(stdin))) return 1;
return 0;
}

希望这有帮助, 最好的问候,汤姆。

答案 3 :(得分:0)

在我自己的有限测试中(运行uniq | sort然后尝试通过/proc/XXX/fd窥探管道的两端),似乎我无法读取被发送到管道的内容,但是我可以将数据注入其中。

换句话说,做自己的测试,看看你能做什么,不能做什么。 : - )