【发布时间】: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