我廣泛搜查擁有文件,但沒有找到任何具體的這個樣子。拒絕了對用戶使用Perl和cron
我有一個目錄還擁有和可寫的「阿帕奇」,「阿帕奇」所擁有的日誌文件,並寫入:
-rw-rw-r-- 1 apache apache 0 Apr 9 16:43 /var/log/apache2/load.log
我有一個Perl程序「load.pl」有以下幾點:
my $log = "/var/log/apache2/load.log";
my $error = "";
#...doing useful stuff here, where $error might get set
if ($error && $log)
{
if (open (LOG, '>>$log'))
{
print LOG "[".localtime(time)."] ".$error."\n";
close (LOG);
}
else
{
my $reason = $!;
$error .= "Could not open log file as ".getpwuid($>)." (really ".getpwuid($<)."): $reason";
my $subject = "load.pl could not write to $log";
$error .= email($mailto, $replyto, $subject, $error);
}
}
其中$ mailto,$ replyto和email()子程序被定義並正常工作。
我可以通過crontab運行此程序如下:
*/1 * * * * apache flock -x -w 10 /home/web/load.txt -c "perl /home/web/load.pl> /home/web/load.txt 2>&1"
Load.txt得到STDOUT,這是JSON格式的一些網站負載統計被從JavaScript調用,而任何捕獲錯誤的應該是寫入load.log。一切工作正常,除了日誌寫作。
我通過電子郵件獲取以下輸出...
Subject: load.pl could not write to /var/log/apache2/load.log
Could not open log file as apache (really apache): Permission denied
所以很明顯Perl是執行這個程序爲「阿帕奇」 - 既有效又實際UID。但是我在apache所擁有的目錄中獲得了apache擁有的文件的權限。
是,如果你執行腳本直,用戶的Apache,而不是通過cron的工作? – fedorqui 2013-04-09 22:43:45
好問題!上面的cron部分可能是多餘的信息,因爲如果我運行'sudo -u apache load.pl',會發生同樣的事情。 – Tom 2013-04-09 23:18:26
以超級用戶身份運行也不起作用,但不是權限被拒絕,而是說:「無法以超級用戶身份打開日誌文件(真正的超級用戶):不適合設備的ioctl。這種「對設備不適當的ioctl」實際上是不開放的,但在打印。 – Tom 2013-04-09 23:22:50