看板FreeBSD
标 题请问执行权限的问题
发信站交大机械 BBS 站 (Sat May 29 01:43:46 2004)
转信站ptt!ctu-reader!ctu-peer!news.nctu!nctumenews!nctumebbs
请教各位大大们:
说明一、小弟使用自行写的一支 perl(030_CreateEmailAccount.pl) 程式,会
由 crontab 执行之(身份是 root)
1.程式中会 use conndb.pm
2.这支程式又会呼叫一些系统程式:pw、chown、chmod 等等
说明二、网页PHP也会呼叫到 030_CreateEmailAccount.pl(但网页执行者是 nobody)
在(说明一)中,如果是使用 crontab 执行之则不会有问题,(说明二)由PHP呼叫这
个 030_CreateEmailAccount.pl 则会无法执行。error.log如下:
Can't locate conndb.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl
/5.6.1/mach /usr/local/lib/perl5/site_perl/5.6.1 /usr/local/lib/perl5/site_perl
/usr/local/lib/perl5/5.6.1/BSDPAN /usr/local/lib/perl5/5.6.1/mach /usr/local/
lib/perl5/5.6.1 .) at /home/bofan/program/030_CreateEmailAccount.pl line 3.
BEGIN failed--compilation aborted at /home/bofan/program/030_CreateEmailAcco
unt.pl line 3.
这个错误讯息,如果我把行号 3 的 conndb.pm 放至 /usr/local/lib/perl5/5.6.1 下
则可解决,想请教各位大大们的是,是否有其他的解决办法!因为我比较希望能保持所
有的程式放在同一个目录下,不知 perl 执行时是否有 path 可设,就如同
java 在执行时设的 JAVA_HOME or CLASSPATH 类似的功能。
mkdir: /home/student/CSIE/m90/m9021522: Permission denied
pw: you must be root to run this program
如果由(说明一)的方式执行之则不会有问题,但由 PHP 执行之则会有权限的问题。不
知perl在呼叫外部程式是否有定义执行者身份的方式呢?
ex. perl 程式呼叫的方式如下:
$dir="/home/student/$department/$degree/$user";
`mkdir -p $dir`;
$group="student";
$shell="/bin/sh";
`echo $passwd | /usr/sbin/pw useradd -n $user -d $dir -g $group -c "" -s
$shell -h0`;
--
※ Origin: 交大机械工厂 ◆ From: mis.ndhu.edu.tw