카테고리 없음

php에서 사용자 계정 만들기

Wood Pecker 2021. 8. 18. 16:17

1. 개요

웹호스팅 서비스의 경우 웹페이지에서 회원가입을 하면 서버에 유저 아이디를 추가하고 DB 계정을 생성해 주며 웹페이지 운영이 가능하도록 환경을 구축해 주어야 한다. 이를 php 프로그램을 통하여 자동으로 처리해본다. Virtula Host는 사용하지 않으며 심벌 링크 방식으로 사용하고자 한다.

 

2. php 프로그램

아래의 php 프로그램을 프런트에서 호출하고 필요한 데이터를 보내 온다고 가정한다.

phpseclib는 다음 싸이트에서 다운받아서 압축을 풀고 서버의 적절한 위치에 올리고 사용한다.

 http://phpseclib.sourceforge.net/  

<?php  
   //아래의 라이브러이는 사전에 설치한다. 
   set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
   include('Net/SSH2.php');

  try{
        $student_id=$_POST["student_id"];
        $student_passwd =$_POST["password"];

        $student_id='ss'.$student_id; //dummy prefix

     //1. ssh 로그인한다.  
     $ssh = new Net_SSH2('localhost');
     $ssh->login('server_admin_id', 'password');  //server_admin_id는 sudo user이며 패스워드를 물어 보지 않도록 미리 설정한다. 

     //2. user 계정 생성   adduser와 chpasswd  batch mode 명령을 사용한다. 
     $res= $ssh->exec('sudo adduser --disabled-password --gecos "" '.$student_id);
     $ssh->exec('sudo chpasswd <<<"'.$student_id.':'.$student_passwd.'"');

     $ssh->exec('sudo chown root:'.$student_id.' /home/'.$student_id);
     $ssh->exec('sudo chmod 755 /home/'.$student_id);
     $ssh->exec('sudo mkdir /home/'.$student_id.'/Public');
     $ssh->exec('sudo chown root:'.$student_id.' /home/'.$student_id.'/Public');
     $ssh->exec('sudo chmod 775 '.'/home/'.$student_id.'/Public'); //<==  775  (위는 755 이다)

     // 사용자는 ssh를 사용못하고 sftp만을 사용하도록 특정 그룹(예,filetransfer)을 사전등록하고 여기에서 연결한다. 
     $ssh->exec('sudo usermod -G filetransfer '.$student_id);
     $ssh->exec('ln -s /home/'.$student_id.'/Public  /var/www/html/'.$student_id);//심볼릭 링크를 만든다.

     //3. mysql 설정 
     $connection = mysqli_connect('localhost', 'mysql_id', 'mysql_password', 'mysql');
     if ($connection -> connect_errno) {
          echo '{"Operation":"Failed"}';
      return;
    }
     $query = "CREATE USER '".$student_id."'@'%' IDENTIFIED BY '".$student_passwd."'";
     mysqli_query($connection, $query);

     $query = "create database ".$student_id;
     mysqli_query($connection, $query);

     $query = "grant all privileges on ".$student_id.".* to '".$student_id."'@'%'";
     mysqli_query($connection, $query);

     $query = "FLUSH privileges";
     mysqli_query($connection, $query);

     echo '{"Operation":"Sucess"}';
   }
   catch (Exception $e) {
      echo '{"Operation":"Failed"}';
   }
?>
반응형