android setuid()

NDK를 이용해 setuid를 실행해보면 당연히 그냥은 안된다.

권한을 변경해주어야한다.

http://en.wikipedia.org/wiki/Setuid


아래는 테스트 코드
int main(int argc,char *argv[]){
 int id = 999;
 printf("hello world\n");
 id = getuid();
 printf("getuid(): %d , euid: %d \n",id, geteuid());
 setuid(0);
 setgid(0);
 id=getuid();
 printf("getuid() after setuid(): %d , euid: %d \n",id, geteuid());

 return 0;
}
위 코드를 NDK로 컴파일하고 디바이스에 넣고 실행해보자.
실행파일을 넣고

adb push hello /data/local/tmp

접속한다.
adb shell

권한을 변경하고, 실행해보자
# cd /data/local/tmp
# su
# chmod 6755 hello
# exit
# ./hello
hello world
getuid(): 2000 , euid: 2000
getuid() after setuid(): 2000 , euid: 2000
#

안된다.
구글링 확인해보니 실행위치에도 관계가 있다. root권한으로 /system을 remount한다음
cat /data/local/tmp/hello > /system/xbin/hello


해서 복사한 다음 권한과 소유권을 변경하면 정상적으로 동작한다.





댓글

이 블로그의 인기 게시물

C#에서 포인터 사용

WPF RichTextBox 와 Document의 바인딩

WPF Template에 Grid 사용하기( UniformGrid, Grid, WrapPanel)