5월, 2013의 게시물 표시

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 해서 복사한 다음 권한과 소유권을 변경하면 정상적으로 동작한다.