php调用Linux命令启动程序(root权限)

1.

<?php
    echo "调用正在进行……<br>";
    $result = system('/usr/local/apache2/htdocs/asterisk/ast_start');
?>

//

2.在/usr/local/apache2/htdocs/asterisk/目录下建立文件ast_start.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    uid_t uid ,euid;
    int id;

    uid = getuid() ;
    euid = geteuid();
   //printf("my uid :%u/n",getuid());  //这里显示的是当前的uid 可以注释掉.
   //printf("my euid :%u/n",geteuid()); //这里显示的是当前的euid
    if(setreuid(euid, uid))  //交换这两个id
    {
        perror("setreuid");
    }
   //printf("/n/nafter setreuid uid :%u/n",getuid());
   //printf("afer sertreuid euid :%u/n",geteuid());

    id = system( "asterisk" );
    //printf( "/nid=%d/n",id );
    //id=-1:出现错误  
    //id=0:调用成功但是没有出现子进程  
    //id>0:成功退出的子进程的id
    return 0;
}
///

3.  保存并编译ast_start.c

#gcc -o ast_start -Wall ast_start.c

//

4.  赋权限

#chmod u+s ./ast_start

//

5. 在浏览器中预览结果

 

附:关掉一个进程ast_stop.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    uid_t uid ,euid;
    int id;
    uid = getuid() ;
    euid = geteuid();
    if(setreuid(euid, uid))  //交换这两个id
    {
        perror("setreuid");
    }
    id = system( "kill -9 $(pidof asterisk)" );

    //pidof获得进程asterisk的ID号
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值