【问题标题】:Permission denied when writing file from PAM module从 PAM 模块写入文件时权限被拒绝
【发布时间】:2014-11-02 22:02:28
【问题描述】:

我正在尝试编写一个 PAM 模块,它将有关来自 SSH 的身份验证尝试的信息记录到一个文件中。

我编写了一个模块,该模块由 OpenSSH 加载,然后在身份验证尝试时被调用。该模块基于此代码:http://www.adeptus-mechanicus.com/codex/logsshp/logsshp.html

但是,问题是每当我尝试写入日志时,我的代码总是无法打开日志文件:它返回 errno 13, "Permission denied"。

我已尝试写入“/var/log/auth_ssh_attempts.log”、“/var/log/auth_ssh_attempts”并写入我的主目录中的文件。这些位置都不允许我打开文件。我不确定我的方法有什么问题。

我什至尝试在函数开始时调用 setuid(0),它成功返回。所以我不知道为什么不允许我写入/var/log。

这是在 CentOS 6.5 上。

对此问题的任何帮助将不胜感激。

非常感谢!

【问题讨论】:

  • 通常当一个人在 Linux 中遇到“权限被拒绝”问题时,这是由于您尝试修改的文件不属于尝试写入它的用户,或者至少该用户不拥有没有写入文件的正确权限。在您要写入的文件上尝试chmod 777 <file> 以查看是否有效。之后,您可能会考虑将权限降低到更安全的位置。作为旁注,在发布类似问题时,请尝试包含文件当前权限的输出。这将通过您尝试写入的文件目录中的ls -la 来完成。
  • @mattias 感谢您的评论。最初该文件不存在(我使用 O_CREAT 打开该文件)。但是,我在创建文件并在其上调用 chmod 777 后尝试了它,但它仍然无法正常工作(仍然是错误 13,权限被拒绝)。我也很困惑,为什么不允许 root 首先在 /var/log 中创建文件?回家后我会发布 ls -al 的输出。
  • 不是为了让这成为一个冗长的讨论线程,但是,问题解决了吗?我仍然很确定您遇到的这个错误与权限有关。
  • @mattias,很抱歉花了这么长时间才回复。我发现我可以让模块写入 /tmp,这对于我当时的目的来说已经足够了(尽管将来写入 /var/log/ 更好)。然后我被其他一些项目搁置了。在这种情况下,我认为 UNIX 文件权限不是问题(因为即使权限设置为 777 我也无法写入)。但是,我现在相当确信是 SELinux 导致了问题。我将在今天晚些时候通过禁用 SELinux 进行测试。

标签: linux file-io centos permission-denied pam


【解决方案1】:

我刚刚在 CentOS 7 上遇到了同样的问题 - 可以写入 /tmp 文件夹中的文件,但在尝试写入 /var/log 目录中的文件时不断得到 Errno 13。 原来我的问题是因为 SELinux 阻止了我的访问 - https://wiki.centos.org/HowTos/SELinux

如果您禁用它并重新启动计算机,它应该可以解决问题 - https://linuxize.com/post/how-to-disable-selinux-on-centos-7/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2015-11-24
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2018-08-12
    相关资源
    最近更新 更多