출처 : www.phpschool.com 에 Tip & Tech 에 있는 글을 참조했습니다.
linux 에서
계정을 추가하는 명령어는 useradd
계정을 삭제하는 명령어는 userdel
입니다. 그러나 위에 있는 명령어들은 모두 root 권한의 사용자가 실행을 할수
있지요.
그러나 apache는 일반적으로 nobody의 권한을 가지고 있습니다.
그래서 useradd,userdel,rm 을 원하는 디렉토리에 모아 놓습니다.
[root@linux program]# ls -al
total 116
drwxrwxrwx 2 smson smson 1024 Feb 6 11:15 ./
drwxr-xr-x 12 smson smson 2048 Feb 6 10:42 ../
-rwsr-sr-x 1 root root 20140 Feb 6 10:42 rm*
-rwsr-sr-x 1 root root 55016 Feb 6 11:15 useradd*
-rwsr-sr-x 1 root root 36500 Feb 6 10:42 userdel*
위를 자세히 보시면 이상한것을 볼수 있을것 같군요.
권한입니다.
% chmod 755 *
% chmod a+s *
이와 같이 해 주시면 될것 같군요.
chmod a+s 는 해당 프로그램을 실행시 권한을 해당 프로그램 주인의 권한으로 실행하라는
명령어입니다.
이와 같이 작성한후에
<?
/*
인수에다 $userid와 $cryptpwd 를 입력 php함수중에 crypt(); 함수가 있죠?
그걸 사용한다음 인수로 넘기면 됩니다.
*/
function adduser($userid,$cryptpwd)
{
global $P_DIR;
global $H_DIR;
$cmd=sprintf("%s/useradd %s -d %s/%s -p %s 2>&1",$P_DIR,$userid,$H_DIR,$userid,$cryptpwd);
echo "$cmd<br>";
exec($cmd,$arr,$returnvar);
echo "returnvar > $returnvar<br>";
echo "arr > $arr[0]<br>";
if($returnvar==9) return 0;
else return 1;
}
function deluser($userid)
{
global $P_DIR;
global $H_DIR;
$cmd=sprintf("%s/userdel %s 2>&1",$H_DIR,trim($userid));
exec($cmd,$arr,$returnvar);
/*
12번 삭제에러
6번 없는 유저
8번 로그인중입니다.
*/
switch($returnvar) {
case 8:
$return=0; break;
case 12:
$return=0; break;
case 6:
$return=0; break;
default:
$cmd1=sprintf("%s/rm -r %s 2>&1",$P_IDR,$H_DIR.trim($userid));
exec($cmd1,$arr1,$returnvar1);
$return=1;
break;
}
return $return;
}
$P_DIR = "/home/smson/program";
$H_DIR = "/home";
// test2 등록
adduser("test2",crypt("smson"));
?>
PHP 프로그램을 작성합니다.
그렇게 어렵지는 않지요.
exec는 외부 프로그램을 실행시키는 명령어입니다.
bibaram