Android RIL에서 C 언어로 root 권한 필요한 shell command 실행이 불가능한가요?

bbyongi의 이미지

linux에서 사용하는 shell program을 Android용에 맞게끔 cross-compile해서 하였고
Android의 /system/bin에 static file로 추가하였습니다.

그리고 Android 디바이스에서 shell prompt에서 $ su 0 test_command /dev/USB0 1 를 실행해서
해당 shell command가 /dev/USB0 와 연동하여 정상적으로 동작하는것까지 확인 했습니다.

그런데 /dev/USB0를 접근하는 커맨드이다 보니 실행시 root 권한이 필요한 shell program 입니다.
그래서 유저모드인 $ 상태에서 $ su 0 를 앞에 입력해서 실행되는걸 확인했고
아니면 $ su 를 쳐서 root 모드 # 으로 바뀐후에 # test_command /dev/USB0 1 를 실행해야 했습니다.

cross-compile한 실행파일을 Android에 추가하고 직접 shell command를 입력해서 확인한 후에
최종단계로 vendor RIL인 C 언어 소스에서 새로 추가한 shell command를 실행하려고 하려고
알아보니 system( ) 이나 popen( ) 을 이용하면 된다고 나오더라구요.

ex 1) system 방식

int check;
check = system("test_command /dev/USB0 1");
if(check != 0)
   LOGD("error");

ex 2) popen 방식

FILE *fp;
fp = popen("test_command /dev/USB0 1", "r");
//fgets 또는 fread로 shell program 실행 결과 message 확인
pclose(fp);

위와 같이 제가 추가한 test_command를 호출해 보니 아무것도 실행되지 못하고 있습니다.
혹시나 싶어서 "ls -l"로 커맨드를 바꿔보니 정상적으로 실행되는걸 보고
제가 system( ) 이나 popen( )로 shell program 실행하는 소스를 잘못 구현한게 아닌건 확인했습니다.

제가 Android에서 이런 부분에 대한 작업이 처음이다 보니 잘 모르는 부분인데
지금 이 문제가 Android에서 vendor RIL이 root 권한이 아니기 때문에
실행시 root 권한이 필요한 shell program을 실행하지 못하는 상황처럼 보이는데
이럴때 어떻게 하면 root 권한을 가진 shell program을 실행할수 있는지 문의 드립니다.

참고로 안드로이드는 AOSP 9.0 pie 버전에서 확인중입니다.

Q1. 혹시 root 권한이 필요한 shell program을 실행시키키려면,
sepolicy 관련하여 .te 파일 등으로 뭔가 등록/설정 등을 해줘야만
root 권한을 가진 shell program을 실행시킬수 있는 건가요?

Q2. 아니면 Android 에서는 리눅스와 달리
root 권한이 필요한 shell program을 실행 시킬 방법이 없는건가요?

Andoird의 vendor RIL인 C 소스에서 root 권한이 필요한 shell program을 어떻게 실행하고
그 결과를 얻어올 수 있는지 관련하여 방법이나 예제가 있다면 조언 부탁드립니다.

감사합니다.

Lipi의 이미지

1. Android emulator에서 확인해 보니 rild가 radio 계정으로 실행되고 있던데, 이것을 root 계정 권한으로 실행
2. /dev/USB0 를 /dev/ppp 처럼 radio권한으로 생성하여 radio 계정 권한으로 실행된 rild에서 접근 가능하게
3. 보안에 문제가 없다면, /dev/USB0의 접근 권한을 모두 풀어 어떤 계정권한으로도 접근 가능하게

bbyongi의 이미지

3가지 방법에 대한 조언 너무 감사드립니다.

아무래도 2번 방법인 rild 와 vendor RIL의 radio 권한으로만 사용 가능한게 좋을것 같은데
ls -l로 확인해보니 ttyUSB0가 이미 radio 권한으로 설정되어 있었습니다.

crw-rw---- 1 radio  radio    188,   0 1970-01-01 09:00 ttyUSB0
crw-rw---- 1 radio  radio    188,   1 1970-01-01 09:00 ttyUSB1
crw-rw---- 1 radio  radio    188,   2 1970-01-01 09:00 ttyUSB2
crw-rw---- 1 radio  radio    188,   3 2019-03-28 10:19 ttyUSB3
crw-rw---- 1 radio  radio    188,   4 1970-01-01 09:00 ttyUSB4

혹시 /dev/ttyUSB0 외에 static으로 추가한 test_command 실행 파일에 대해서도
radio용으로 권한 설정을 해주면 C 소스에서 실행이 가능해질까요?

질문에는 test_command 하나만 언급했지만
test_command 와 test_proxy 라는 2개의 shell program 파일이 실행되는 상황입니다.

< 동작 예시 >
1. shell에서 "$ su 0 test_command /dev/ttyUSB0 1"라고 명령을 실행하면
2. test_command이 실행되면서 test_proxy를 추가로 호출(실행)하며
3. test_command와 test_proxy 실행 파일이 /dev/ttyUSB0를 접근하여 데이터 통신을 수행합니다.

조언을 참고하여 현재 이미 /dev/ttyUSB0는 radio 설정중인 상태이니
실행 파일을 radio 권한으로 바꿔서 시도를 한번 해보겠습니다.

혹시 제가 놓친 부분이나 더 고려해야할 부분이 있다면 조언 부탁드립니다.

감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.