【问题标题】:Permissions issue on opening a file - Perl, CGI打开文件的权限问题 - Perl、CGI
【发布时间】:2016-09-03 17:07:56
【问题描述】:

我一直在尝试为应用程序创建日志文件,在 Apache 服务器中使用 Perl 和 CGI​​。出于这个原因,脚本需要保留一个日志文件,该文件必须在脚本启动时打开。从我得到的日志中:Unable to open the file: Permission denied at /usr/lib/cgi-bin/generate_logs.cgi,脚本如下:

#!/usr/bin/perl
use CGI qw(:standard);
print "Content-type: text/plain\n\n";
...
open (my $logs, ">", "/path/to/directory/logs.txt") || die "Unable to open the file: $!";
...

我一直在尝试为.txt 日志文件使用非根路径,例如~/Desktop,但脚本仍然无法创建/打开日志文件。如果您需要更多信息,请随时问我。提前致谢

【问题讨论】:

  • 文件本身的 UID:GID 是什么,充当 Web 服务器的用户的名称是什么?
  • @stevieb,也许我错了,但如果脚本尝试打开文件时文件不存在,难道不应该创建文件吗?
  • 那么你的问题是什么?正如错误所说,脚本运行的用户+组无权在/path/to/directory 中创建文件。要么将apache配置为使用不同的用户+组,要么更改权限,以便现有用户+组可以访问目录并创建文件。

标签: perl cgi


【解决方案1】:

Apache Web 服务器通常在您的系统上作为单独的用户运行。您的 ~/Desktop 目录将特定于 YOUR 用户。 Apache 写入的任何目录都需要 Apache 用户可写。

要查找 Apache 使用的用户名,请检查您的配置文件。这可能默认为/etc/httpd/conf/httpd.conf。您可能会在该文件中找到带有User directive 的行。它可能设置为用户apache

Apache 已经有一个日志目录。通常是/var/log/httpd。也许尝试在那里写你的日志。

请注意,您提供的示例代码非常有问题。每次运行 CGI 脚本时,您的日志文件都将被擦除和覆盖。如果它与并发用户一起运行,您将遇到更大的问题。两个线程试图写入同一个文件、锁定问题等。您可能需要查看CGI::Log 以获得更多功能。

【讨论】:

  • 由于我使用的是 Ubuntu 16.04,我找不到你告诉我的文件,因为全局配置在 /etc/apache2/apache2.conf。但是,正如您告诉我的那样,我最终通过设置 Apache 在我选择的文件夹中写入的权限使其工作。谢谢!
猜你喜欢
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
相关资源
最近更新 更多