写入文件而不重定向?

写入文件而不重定向?

我正在编写一个常规编译的应用程序,需要创建一个特殊文件并在其中写入一个魔法 cookie。我无法直接从应用程序写入文件,系统安全模型要求我启动具有提升权限的帮助工具来完成此任务。我可以向辅助工具提供任意数量的参数。现在我想选择一些非常简单的系统命令作为辅助工具并为我创建文件。像这样的东西:

/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"

Simpletouch不会削减它,因为我需要将 cookie 写入文件,echo没有 shell 包装器的 simple 不起作用,因为它需要重定向来写入文件。我不太习惯用 root 权限调用 shell 来完成如此琐碎的任务。是否有一些非常简单、受限的系统命令可供我调用来为我写入文件?

答案1

没有输出重定向,没有管道,但有“这里字符串”:

dd of=/some/where/file <<<'magic'

答案2

这个怎么样:

echo -n 'magic' | sudo tee /some/where/file > /dev/null

当然这里有重定向,但只有 tee 以 root 身份运行,而不是以 shell 身份运行。也适用于dd of=...

答案3

还有另一个考虑因素,即您不想将 magic cookie 的值放在命令行上,因为其他用户可以观察到它。即使程序是短暂的(包括程序将命令行字符串清零),也有攻击的机会。所以,理论上:

writestringtofile 'magic' /some/where/file

是一种危险的做法。因此,我赞同@stribika的建议:将值写入临时文件并将其复制到位。确保使用安全函数来创建临时文件 ( mkstemp()),以便那里也不存在竞争条件。

答案4

现在有一个简单的程序可以完全满足您的需要。

https://github.com/rewallf/write_stdin_to_file

相关内容