【问题标题】:Restrict a process to read "/etc/resolv.conf" file in linux限制进程在linux中读取“/etc/resolv.conf”文件
【发布时间】:2019-12-10 12:06:30
【问题描述】:

在我的进程中,我正在创建一个子进程并使用 execl() API 运行一个二进制文件。在父进程中调用 waitpid() 并等待子进程退出。此二进制文件打开 "/etc/resolv.conf" 并尝试连接 DNS IP。如果 DNS ip 不可达,子进程会阻塞很长时间。由于该父进程超时。我没有二进制源代码,我不想对 /etc/resolve.conf 进行任何更改,因为该文件被其他进程使用。

有什么办法,我可以删除或限制对我的子进程的“/etc/resolve.conf”访问。

【问题讨论】:

  • 父进程是否有root权限?
  • 你知道你的子进程如果阻止它读取/etc/resolv.conf会做什么吗?
  • @AndrewHenle 是的,这个二进制文件可以从远程位置或本地磁盘读取文件。我只用它来读取本地磁盘文件。所以不上网也没关系。
  • @Ctx 是的,父进程有root权限。
  • 只需将应用程序正在寻找的主机放入/etc/hosts

标签: c linux process dns fork


【解决方案1】:

阻止对/etc/resolv.conf的访问并不容易。但是您可以通过环境变量 RES_OPTIONS 告诉解析器为 DNS 名称解析执行的尝试次数。即使是零尝试也是一个有效值,并导致名称解析立即失败。

参见示例:

RES_OPTIONS="attempts:0" telnet www.google.de
telnet: could not resolve www.google.de/telnet: Temporary failure in name resolution

这意味着,在您的 prgram 中,您可以这样做

...
putenv("RES_OPTIONS=attempts:0");
execl(...);
...

这应该会导致解析失败立即并且你的过程应该继续。

【讨论】:

  • 我总是对有建设性的批评持开放态度,请对 DV 发表评论
猜你喜欢
  • 2022-07-02
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2011-05-04
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多