LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3009|回复: 7

菜鸟问题:怎么在perl程序中执行sh命令?

[复制链接]
发表于 2003-5-8 08:36:38 | 显示全部楼层 |阅读模式
我想在web上,通过触发一个perl程序。来控制/etc/init.d/proftpd的启动和停止,请问应该怎么做啊?

有一种方法是:
`/etc/init.d/proftpd start`
这样,在linux机器上的命令行上执行那个文件是可以的。
但是,通过web调用这个文件时,却不能执行,
请各位高手回答!!!
发表于 2003-5-8 16:13:40 | 显示全部楼层
应该是权限问题
发表于 2003-5-8 16:45:58 | 显示全部楼层
通过web调用使用的缺省用户是apache没有启动服务的权限。
有几种方法可以改:
1,修改httpd.conf的缺省用户,较危险。
2,使用sudo,加入apache运行service的权限,推荐。
3,设置suid,较危险。
4,参考webmin的源代码,有帮助,不过一定使用了perl的其他模块,比如认证等,我没研究过,但是我看到可以,推荐。
5,还没想好...
 楼主| 发表于 2003-5-8 17:49:27 | 显示全部楼层

没解决啊,老大们,再问,请再答!!!

经过测试,的确是权限问题,apache不能到/etc/init.d/下面去做什么活动。
bingo-dw说得很好,但是我还不知道具体怎么操作啊,能教教么?
用第2种方法。使用sudo
 楼主| 发表于 2003-5-8 18:19:02 | 显示全部楼层

没解决啊,老大们,再问,请再答!!!

我在/etc/apache/conf/commonapache.conf里面把ScriptAlias选项加了一条:
ScriptAlias /cgi-bin/ /etc/init.d/
然后,把我的perl命令copy过去。结果还是不能启动proftpd啊。
甚至我把proftpd 设为了chmod 777 还有,把proftpd文件chown apache proftpd,chgrp apache proftpd后,还是不行。

sudo到底是怎么执行啊??!!! 
发表于 2003-5-8 21:51:51 | 显示全部楼层
如果是redhat,在安装包中有sudo-xxx.rpm,用rpm -ivh安装。
用visudo编辑配置文件,其中有例子可以参考,用不使用password提示的例子设定/sbin/service,然后编辑你的perl脚本,用sudo service proftpd restart。
不然就是修改/etc/httpd/conf/httpd.conf文件,寻找Group,就在下面几行就是设定启动httpd的用户,你可以修改成有权限运行 service的用户。
其实init.d下的proftpd只是脚本,真正的可执行文件在另外的目录里,你只修改它的权限是不行的。
请试试,有问题不要慌,慢慢问,细细想,不是什么天塌下来的事,不必用呼天抢地的标题。;)
 楼主| 发表于 2003-5-9 12:08:45 | 显示全部楼层

谢谢 bingo-dw!

我用sudo解决问题了。呵呵,
apache ALL=(ALL) NOPASSWD:ALL
就可以了。
我用呼天抢地的标题是因为比较急,怕别人看不到我的贴子,呵呵。好,下回如果遇到天塌下来的事,我再用呼天抢地的标题,
平时,再也不用啦。:)
发表于 2003-5-9 12:27:17 | 显示全部楼层
不谢。
不过你要注意安全哟,看你的设置好像把所有的命令都给apache用户给sudo了,这样要是有不法之徒象毁掉你的系统,简直轻而易举。
建议你只针对某个命令开放sudo。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表