【问题标题】:why stat() return -1 even if file exists [RHEL 7.2]为什么即使文件存在 stat() 返回 -1 [RHEL 7.2]
【发布时间】:2017-06-19 20:52:55
【问题描述】:

我正在为 Apache Server 开发一个模块。在那,我正在尝试使用 stat(const char *filename, struct stat *buf) 函数从路径 /tmp/_clusterMemberName/ 读取文件。我的问题是 stat() 函数返回 -1 即使路径上存在文件。如果我将文件位置从 /tmp/_clusterMemberName/ 更改为 /opt/ 则 stat() 函数工作正常。请帮我找出原因。

【问题讨论】:

  • 调用 stat() 后,找出 errno 的值,看看它是否符合 stat 手册页中的一种情况。

标签: stat


【解决方案1】:

最可能的原因是/tmp 不可访问。

您需要查看stat 返回的errno 值。如果是EACCES,原因是用户没有访问/tmp的权限。如果是EPERM,原因可能是SELinux 策略阻止httpd 访问/tmp。如果您使用的是 SELinux,请确保您了解 httpd_selinux 手册页。

您可以通过以下方式启用httpd/tmp 的访问:

setsebool httpd_tmp_t 1

并使更改持久化

setsebool -P httpd_tmp_t 1

【讨论】:

  • 感谢您的意见。在我的机器上,我将 SELinux 保持禁用状态并获得 errno 值 2。
  • 我想分享一下,相同的设置正在 RHEL6 机器上运行。
  • errno 值 2 是 ENOENT。你确定/tmp/_clusterMemberName 没有拼写错误吗?
  • 感谢保罗的回复。我终于得到了问题,它与 /tmp 目录的 RHEL 7 安全性有关。我必须为 httpd 进程禁用 PrivateTmp 才能允许 httpd 进程访问 /tmp 目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2021-12-09
  • 2014-06-18
  • 1970-01-01
相关资源
最近更新 更多