मैंने एक पुराने RedHat Linux बॉक्स से एक पर्ल CGI स्क्रिप्ट को हाल ही में CentOS Linux बॉक्स में स्थानांतरित कर दिया और कुछ systemकमांड अब काम नहीं करता है।
उदाहरण के लिए system("ls -l filename");ठीक काम करता है, लेकिन system("lp -d printer filename");रिटर्न lp: Permission denied।
मैंने निर्देशिकाओं और फ़ाइलों पर अनुमतियों की जाँच की है, मैं उसी सीजीआई स्क्रिप्ट का उपयोग करके चला सकता हूं sudo -u apache scriptnameऔर फिर परेशानी systemकमांड ठीक काम करता है।
अब तक मैं बता सकता हूं, अपाचे httpd को काट नहीं दिया गया है और इसमें कुछ भी स्पष्ट नहीं है httpd.conf(जो लगभग स्थापित है)।
तो मुझे क्यों मिलता है lp: Permission Denied?
यहाँ एक परीक्षण स्क्रिप्ट है
#!/usr/bin/perl
use strict;
use warnings;
#use CGI::Carp qw(fatalsToBrowser);
BEGIN {
open (STDERR, '>&STDOUT') || die "cant merge STDERR $!\n";
$|=1;
}
print "Content-Type: text/plain\n\n";
print "TEST\n\n";
psys('id');
psys('which lp');
psys('ls -l /tmp/po-list.19025.ps');
psys('ls -ld /usr /usr/bin /usr/bin/lp');
psys('ls -l /etc/alternatives/print-lp');
psys('ls -l /usr/bin/lp.cups');
psys('lp -d laser1 /tmp/po-list.19025.ps');
psys('ls /home | wc -l');
print "Finished\n";
sub psys {
my $command = shift;
print "# $command\n";
system($command);
print "\n";
}
यहाँ एक ब्राउज़र क्या मिलता है
TEST
# id
uid=48(apache) gid=48(apache) groups=48(apache) context=user_u:system_r:httpd_sys_script_t:s0
# which lp
/usr/bin/lp
# ls -l /tmp/po-list.19025.ps
-rw-r--r-- 1 apache apache 2309 Aug 30 15:59 /tmp/po-list.19025.ps
# ls -ld /usr /usr/bin /usr/bin/lp
drwxr-xr-x 15 root root 4096 Sep 22 2011 /usr
drwxr-xr-x 2 root root 36864 Aug 30 12:06 /usr/bin
lrwxrwxrwx 1 root root 26 Mar 18 2011 /usr/bin/lp -> /etc/alternatives/print-lp
# ls -l /etc/alternatives/print-lp
lrwxrwxrwx 1 root root 16 Sep 22 2011 /etc/alternatives/print-lp -> /usr/bin/lp.cups
# ls -l /usr/bin/lp.cups
-rwxr-xr-x 1 root root 18792 Mar 30 2011 /usr/bin/lp.cups
# lp -d laser1 /tmp/po-list.19025.ps
lp: Permission denied
# ls /home | wc -l
ls: /home: Permission denied
0
Finished
/usr/bin/lp ...!
lp?lsमें है/bin/औरlpमें है/usr/bin। शायद अपाचे उपयोगकर्ता के पास/usr/binइसके रास्ते में नहीं है?