攻撃は最大の防御なり

50代おやじの適当なブログです。

[Android]パーミッションって何だろ?

2011-08-23 10:04:24 | Android
今回は以前書いたファイルの権限について書いて行きます。
では早速ルートディレクトリを覗いて見ましょう。



これは「ls」と言うカレントディレクトリの中身を表示するコマンドの結果です。
Androidをコマンドラインから操作する場合に頻繁に使うので少し覚えておきましょう。
行頭に「drwxr-xr-x」みたいな文字列がありますがこれがファイル等の参照権限を表しています。
最初の一文字がリソースの種別です。

- 通常ファイル
d ディレクトリ
l シンボリックリンク

シンボリックリンクはwindowsのショートカットと似たような機能ですが、そこにコピーが存在するするのと同じように扱えます。
この例だと

etc -> /system/etc

となっている場所。
etcの内容は/system/etcを参照しています。/system/etcの内容を変更した場合はetcの内容も変更されます。

その次からは3文字で一セット。ファイルとディレクトリではちょっと意味合いが違います。

ファイルの場合

 r 読み込み権限
 w 書き込み権限
 x 実行権限

ディレクトリの場合

 r ディレクトリ内容物の読み込み権限
 w ディレクトリ内への書き込み権限
 x ディレクトリ内に移動する権限

3文字が3セット並んでいます。
それぞれ所有ユーザーに対する権限、所有グループに対する権限、その他のユーザーに対する権限を表します。
グループと言うのは複数ユーザーの集合体です。

パーミッション表記の後に表示されているのがファイルの所有ユーザー、ファイルの所有グループ、ファイルサイズ、更新日時となります。
Androidは所詮一人で使う物ですのでファイル所有者は余り問題ではなく、参照権限が論点の中心となります。

この参照権限rwxの総組み合わせは8種類なので3桁の8進数表記を良く使用します。
「---------」であれば000「rwxrwxrwx」は777といった感じ。
この全ての組み合わせを覚える必要はなくAndroidの場合は2種類だけ覚えてください。

rw-r--r-- (644)

通常ファイルのパーミッション。これが一番多いかも。

rwxr-xr-x (755)

ディレクトリ及び実行ファイルのパーミッション。
/system/bin,/system/xbin等のファイルはこれじゃないと動かなくなります。

このパーミッションを変更する場合にはchmodというコマンドを使います。

chmod 644 build.prop

上記は「build.propをrw-r--r--の参照権限に変更する」という意味ですね。

このパーミッションを変更する必要性が生まれるのは、/system以下のファイルを入れ替えた場合です。
新規に入れた場合、上書きした場合に関わらず一定のパーミッションに変更されてしまうので適正なパーミッションに修正する必要があります。(ここはLinuxとちょっと違いますね)
この場合にどんなパーミッションが付与されるかはumaskによって決まっており機種毎に異なります。


要はシステムファイルを入れ替えた場合には適切なパーミッション設定をしてあげないと起動不能になる場合がありますよと言うことです。
しかし、通常通りadbで作業をしている人だったらとんでもなく変な事をしない限り復旧できます。
例えば/system/bin以下を全て644に変更してしまったとかねw それでも直せますが。
rootエクスプローラしか使えない人が起動不能にしてしまった場合はちょっと厄介ですね。
頑張ってadbを覚えるか、バックアップから戻すか、最悪はRUUで初期化か。