c - popen 与 KornShell 安全性

标签 c shell unix ksh popen

我正在使用一些外部二进制文件编写 C 程序以实现计划目标。我需要运行一个命令给我一个输出,我需要处理这个输出,然后将其作为输入提供给另一个程序。我正在使用 popen,但想知道这是否与使用 KornShell (ksh) 临时文件相同。

例如:

touch myfile && chmod 700
cat myfile > /tmp/tempfile 
process_file < /tmp/tempfile  && rm /tmp/tempfile

既然创建了一个可以被 root 读取的临时文件,那么如果在 C 中使用 popen,知道管道也是文件,会不会一样?或者假设操作系统 (OS) 不允许任何其他进程读取您的管道是否安全?

最佳答案

你说“这创建了一个可以被 root 读取的临时文件”,这意味着你正试图以 root 用户无法读取的方式传输数据。这不可能;通常,root 用户对系统具有完全控制权,因此可以读取系统上的任何数据,无论它是否在临时文件中。即使在单个进程中,root 用户也可以读取该进程的内存。

如果您使用 popen() ,文件系统上不会有该文件的条目;它创建了一个管道,其作用类似于文件,但实际上并不将该数据写入磁盘,而只是在两个程序之间传递数据。

它会有一个文件描述符;根据系统的不同,拦截该数据可能更容易或更困难,但始终可以做到。例如,在 Linux 上,您可以只查看 /proc/<pid>/fd/。找到所有打开的文件描述符并对其进行操作(读取或写入)。

关于c - popen 与 KornShell 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130772/

相关文章:

c - ReleaseStringUTF 能做的不仅仅是释放内存吗?

c - 输出末尾有问号

linux - Bash 脚本 Shell 脚本

linux - AWK 报告重复行和计数,程序说明

linux - 什么是好的 Linux 退出错误代码策略?

c - 如何在 C 中使用 getopt 和多个命令打印一次输出

c - 了解使用链表按位置插入

c - 为什么 objdump 生成的程序集很大?

linux - 以 root 用户身份在 jenkins 中运行 shell 命令?

shell - 如何在 Jenkins Job 中删除 docker 镜像