首页 / LINUX / 是linux fork不安全
是linux fork不安全
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是linux fork不安全,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2268字,纯文字阅读大概需要4分钟。
内容图文
![是linux fork不安全](/upload/InfoBanner/zyjiaocheng/970/4083ad48aeca4158887679443ed14269.jpg)
我正在读这篇article
它说fork会创建自己的副本,fork man也会这样说
. The entire virtual address space of the parent is replicated in the child
这是否意味着子进程可以读取我的所有进程内存状态?
子进程可以转储整个父内存状态,并且可以对其进行分析以提取父变量及其值. ?
但文章还说,两个过程无法互相准备好数据.
所以我很困惑?
解决方法:
是的,子进程可以在fork(2)之后读取所有父进程状态的原始副本(但在写入时,只影响其自己的地址空间).但是,大多数情况下,子进程最终将使用execve(2)启动一个新的程序,它将“清除”并替换原始父地址空间的副本(通过新的地址空间).请注意,execve和mmap(2)(参见shm_overview(7)中的shared memory ……)是在process process中更改address space的常用方法(以及内核如何处理page faults).
内核使用(并设置MMU)lazy copy on write机制使子项的地址空间成为父项的副本,因此fork在实践中非常有效.
另请阅读proc(5),然后键入以下命令:
cat /proc/self/maps
cat /proc/$$/maps
sudo cat /proc/1/maps
并了解正在发生的事情
另请阅读fork上的wikipage和Advanced Linux Programming书籍.
没有不安全因素,因为如果孩子正在更改某些数据(例如变量,堆或堆栈位置……),则不会影响父进程.
如果执行fork的程序在某个虚拟内存位置保留了一些密码,则子进程只要执行相同的程序就能读取该位置.一旦孩子做了一个成功的execve(这是常见的情况,以及任何shell正在做什么),之前的地址空间就会消失并被新的地址空间所取代,在该执行程序的ELF可执行文件中有所描述.
Unix模型中没有“谎言”或“不安全”.但与其他几个操作系统相反,Unix& POSIX有两个独立的system calls用于创建新进程(fork)和执行新程序(execve).其他系统可能有一些混合这两种能力的单一spawn操作. posix_spawn通常由fork&的混合物实现. execve(system(3)和popen(3)也是如此,也使用waitpid(2)& / bin / sh ….).
Unix方法(具有分离的fork& execve)的优点是在fork之后和子进程中的execve之前你可以做很多有用的事情(例如关闭无用的文件描述符,……).不分离这两个特征的操作系统可能需要具有相当复杂的产生原语.
在极少数情况下,叉子后面没有一些执行器.一些MPI实现可能会这样做,您也可以这样做.但是你知道你能够通过你自己的副本读取所有父母的地址空间 – 所以你感觉不安全感正在成为一个有用的功能.在过去,你有过时的vfork阻止了父母.今天不需要使用它;实际上,fork通常是通过clone(2)实现的,你不应该直接在实践中使用(参见futex(7) ……),但只能通过POSIX pthreads.但是考虑将fork作为你的过程的神奇克隆者可能会有所帮助.
编码时(即使在C中)不要忘记测试fork和execve的失败.见perror(3)
PS. fork系统调用与multiverse的想法一样难以理解.两者都是“分叉”的时间!
内容总结
以上是互联网集市为您收集整理的是linux fork不安全全部内容,希望文章能够帮你解决是linux fork不安全所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。