프로그래밍/PHP

PHP에서 root 권한으로 내부 명령 실행하기

채윤아빠 2019. 6. 7. 15:54
728x90
반응형



root 권한 부여용 프로그램 작성

PHP에서 직접 root 권한으로 스크립트를 바로 실행할 수가 없기 때문에, 대신 root 권한을 받아서 스크립트를 실행시켜줄 프로그램을 다음과 같이 작성합니다.
프로그램 내부에서는 root 권한을 얻기 위하여 setuid() 함수를 이용합니다.

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

int main (int argc, char  **argv)
{
    if (argc < 2) {
        printf("%s usage : %s <command of needed root right> <param1> <param2> ...\n", argv[0], argv[0]);
    }
    else {
        setuid (0);
        char szCmd[8000] = "";
        int i;

        for(i = 0; i < argc; i ++) {
            if(i != 0) {
                strcat(szCmd, *(argv+i));
                strcat(szCmd, " ");
            }
        }

        system (szCmd);
    }

    return 0;
}

위와 같이 작성한 C 프로그램을 gcc 컴파일러를 이용하여, 실행 프로그램을 만든 후, root 권한으로 실행될 수 있도록 권한을 부여합니다.

$ gcc php_root.c -o php_root
$ chmod u=rwx,go=xr,+s php_root

직접 command-line에서 실행하면 다음과 같습니다.

$ whoami
builder

$ ./php_root whoami
root


PHP에서 root 권한으로 명령 실행하기

앞에서 작성한 프로그램을 이용하여 다음과 같이 간단한 소스를 작성하여 root 권한으로 정상적으로 실행되는지 확인할 수 있습니다.

<?php
    system("whoami");
    system("/tmp/php_root whoami");
?>

위 코드를 실행하면 그 결과는 다음과 같습니다.

apache root

root 권한이 필요한 명령 또는 작업을 스크립트로 만들어서, 앞에서 작성한 "php_root" 명령으로 실행해 주면, root 권한으로 잘 실행이 됩니다.

참고자료