2010年10月07日

Android on Ubuntuで一般ユーザでのsocketシステムコールがPermission deniedになる

Android on Ubuntu で、なぜか一般ユーザでsocketシステムコールがPermission deniedになってしまいます。sudo すれば大丈夫です。

この問題に気がついてはいたのですが、きっとUbuntuの新しいセキュリティの設定が何か足りないせいだろうと思っていました。しかし、Debianで動かしても同じことがおきました。

このことをたまたまtwitterでつぶやいたら、有力な情報を教えてもらったので調べてみました。



一般ユーザでsocketシステムコールがPermission deniedになるというのはこんなことです。

user@arm-lucid:~$ ping 192.168.1.26
socket: Permission denied

sudoでルート権限で実行すると成功します。

user@arm-lucid:~$ sudo ping 192.168.1.26
[sudo] password for user:
PING 192.168.1.26 (192.168.1.26) 56(84) bytes of data.
64 bytes from 192.168.1.26: icmp_seq=1 ttl=64 time=0.168 ms
64 bytes from 192.168.1.26: icmp_seq=2 ttl=64 time=0.137 ms
64 bytes from 192.168.1.26: icmp_seq=3 ttl=64 time=0.142 ms
64 bytes from 192.168.1.26: icmp_seq=4 ttl=64 time=0.147 ms
64 bytes from 192.168.1.26: icmp_seq=5 ttl=64 time=0.125 ms
^C
--- 192.168.1.26 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.125/0.143/0.168/0.020 ms
user@arm-lucid:~$

straceで見てみると、確かにsocketのシステムコールがPermission deniedのエラーになっています。

user@arm-lucid:~$ strace ping 192.168.1.26
execve("/bin/ping", ["ping", "192.168.1.26"], [/* 15 vars 

  ...

munmap(0x40018000, 15575)               = 0
socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = -1 EACCES (Permission denied)
getuid32()                              = 1000
setuid32(1000)                          = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = -1 EACCES (Permission denied)
dup(2)                                  = 3

 ...

実はこれはAndroidのためにパッチをカーネルにあてたことが関係していました。これです。

net/Kconfig

config ANDROID_PARANOID_NETWORK
        bool "Only allow certain groups to create sockets"
        default y
        help
                none

Androidではある限定されたグループに属するユーザしかsocketを生成できないように制限がきつくなっていました。

とりあえずこれを無効にしてカーネルをビルドしなおすと通常どおり、一般ユーザでもpingや他のネットワークが関連するコマンドを正常に使うことができるようになりました。

後でまたこの仕組みを詳しく調べて、Ubuntu側で適切なグループ設定をして、このCONFIG_ANDROID_PARANOID_NETWORKを有効にしても問題がないようにしてみようと思います。



トラックバックURL

トラックバック一覧

4コアのCortex-A9のKZM-CA9-01ボードを使って実験したことを書いたページをまとめてみました。

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード