なんか最近 ICS にアップデートされた端末で /data/local/tmp になんか symlink してアレする手法が多いよね?ってことで調査してみたよ。
ソース見ながら憶測で書いてるから的外れだったらごめんね!
やっちまったのは多分2011/7/8のこれ。
起動時に読み込まれる init.rc って設定ファイルを実行する init ってヤツなんですが。
失敗したらエラー返すだけだったのを、ディレクトリが存在したら chmod するように変更されてますね?そして chmod に成功したら chown まで行っちゃいますね?
これがあかん。
adb shell で入ったら uid=2000(shell) gid=2000(shell) でして。
なので、init.rc で
mkdir /data/local 0771 shell shell
mkdir /data/local/tmp 0771 shell shell
とか shell で書けるようにしてくれてるディレクトリに symlink しちゃえばあら不思議。
起動時に勝手に権限書き換えてくれるのでした!!!
みたいな。
で流石に、これあかんやつやって気づいたみたいで10ヶ月ほど経って2012/5/2に
init: make chmod/mkdir/chown not follow symlinks · 42a9349 · android/platform_system_core · GitHub
「いやいや symlink あかんやろw」って修正されてます。
なので、今後出てくるやつではこの穴は使えなくなるんじゃないかしら?たぶん。
コメント
[…] さて、これと tmp 芸をあわせて次行こう […]
[…] 最も重要なのは先日ソースをみかけた init のマヌケ穴です。/data/local/tmp を別のディレクトリにリンクしておけば起動時に勝手に書き込み権限を設定してくれるというマヌケ穴。 […]
そもそもこの問題は、端末のアップデート時に既にファイルが存在している場合にパーミッションが変更でいないのが問題だよね、ということで報告されて
導入されたパッチなんですよね・・。
http://code.google.com/p/android/issues/detail?id=4519
参考までに
なるほど。
問題を解決したつもりが新たな問題を生み出してしまったってことですか。