• ubuntu下apache2的cgi-bin中以root权限运行程序


    一,安装apache2

    sudo apt-get install apache2
    

    二.配置cgi-bin

    sudo chmod 777 /var/www/html
    sudo vim /etc/apache2/sites-enabled/000-default
    #加入
    DocumentRoot /var/www/html/
    ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
    #:wq 保存并退出
    sudo a2enmod cgi
    sudo /etc/init.d/apache2 restart
    

    三.测试

    test.c

    #include <stdio.h>
    #include <stdio.h> //getenv
    int main(void){
            printf("Content-Type: text/html
    
    ");
            printf("GET:%s
    ",getenv("QUERY_STRING"));
            return 0;
    }
    
    gcc -o test test.c
    mv test /var/www/html/cgi-bin/test
    

    访问http://localhost/cgi-bin/test?a=b
    得到GET:a=b

    四.以root身份运行的方法

    1.准备要用到的源文件

    visit.c 浏览器访问入口

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc,char* argv[])
    {
        system("./run_root ./run.sh");
        return 0;
    }
    

    run_root.c 用来获取root权限

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
    
    int main(int argc,char* argv[])
    {
        if(argc>1){
            uid_t uid ,euid;
            uid = getuid();
            euid = geteuid();
            if(setreuid(euid, uid))  //交换这两个id以获取root权限
                perror("setreuid");
            system(argv[1]); //执行一个需root权限运行的脚本,我尝试在这里执行应用程序,结果失败了,不知道是操作失误还是其它原因,还望指教
        }
        return 0;
    }
    

    run.sh

    #!/bin/bash
    #这里运行需要root权限的程序
    mkdir /home/hello 
    

    2.编译

    gcc -o visit visit.c
    sudo gcc -o run_root run_root.c
    sudo chmod u+s run_root
    chmod +x run.sh
    sudo mv run_root /var/www/html/cgi-bin/run_root
    sudo mv visit /var/www/html/cgi-bin/visit
    sudo mv run.sh /var/www/html/cgi-bin/run.sh
    

    结果

    inu1255@inu1255-pc:/var/www/html/cgi-bin$
    -rwxrwxr-x  1 inu1255 inu1255 7293 12月  9 23:42 visit*
    -rwxr-xr-x  1 inu1255 inu1255   60 12月  9 23:59 run.sh*
    -rwsr-xr-x  1 root    root    7452 12月  9 23:35 run_root*
    

    3.测试

    访问 http://localhost/cgi-bin/visit

    ls /home
    

    发现多了一个hello文件夹

  • 相关阅读:
    Git 常用命令
    Python 常用算法记录
    Python基础Web服务器案例
    你真的懂SDWebImage?
    Core Data的那点事儿~
    看看 SDWebImage内部基本实现过程
    App上架流程 & 上架被拒10大原因
    KVO中你所不知道的"坑"
    math公式手写识别网址
    umi build出现的Path must be a string的问题解决
  • 原文地址:https://www.cnblogs.com/inu1255/p/4154549.html
Copyright © 2020-2023  润新知