privilege.confの解析

 /home/QtPalmtop/etc/privilege.confは、アイコン長押しで設定出来る、ルート権限の設定ファイルである。

 ルート権限にチェックを入れると、/home/QtPalmtop/etc/privilege.confに行が追加され、チェックを外すと、該当の行が削除される。
 このことから、恐らく一行が一アプリに対応しているであろうことが分かる。

 さらに、実際に任意のアプリケーションをホーム画面に追加し、対応を調べてみる。

 ホーム画面でのタブ配置に関しては、どのタブに配置されていても実行ファイルが同一であれば、privilege.confへの登録内容は同一になるよ。ホーム画面に登録後、タブを移動させても変化は起こらない。

 また、同一の実行ファイルを別名で複数登録した場合、privilege.confに重複して複数の同一行が登録されることはない。さらに、この場合、片方でルート権限のチェックを入れると、他方でもチェックが入る。

 これらの事から、Qtアプリのルート権限設定は/home/QtPalmtop/bin/以下の実行ファイルそのものに対して設定されるものと思われる。


 さて、ここまでの検証内容から、privilege.confに記載される内容も、何らかの形で実ファイル名から反映されているものだと思われる。

 そこで、実際に実行ファイル名を変えながら、順次ホーム画面に登録し、内容の変化を追ってみた。

00.sh -> 127815771a682336342c
01.sh -> 127815761a682336342c
02.sh -> 127815751a682336342c
03.sh -> 127815741a682336342c
13.sh -> 127915741a682336342c

 確かに一定の法則性を持って、内容が変化していることが分かる。
 さらに、ファイル名の文字数で等分に区切ってみると、

00.sh -> 1278 1577 1a68 2336 342c
01.sh -> 1278 1576 1a68 2336 342c
02.sh -> 1278 1575 1a68 2336 342c
03.sh -> 1278 1574 1a68 2336 342c
13.sh -> 1279 1574 1a68 2336 342c

 かなり変化が分かりやすくなった。
 どうも一文字を四桁の数値、あるいは2Byeteのコードに変換しているようだ。

 ただ、00.shの例を見てわかるように、単純な文字コード変換と言う訳でも無いようだ。単純な文字コード変換なら、同一の文字は同一のコードにならなければおかしい。
 また、一桁目は0<1と順列でコードが大きくなっているのに対し、二桁目では0>1と逆順でコードが配置されている。

 ま、とは言え、昇順降順問わず、順番に数値がズレていくと言うことは何等かの文字コードが設定されていると言うことでもある。


 今度はファイル名の文字数を変化させてみよう。

0.sh
  • > 1278 1569 1a35 232d
00.sh
  • > 1278 1577 1a68 2336 342c
000.sh
  • > 1278 1577 1a76 236b 3437 552b
0000.sh
  • > 1278 1577 1a76 2375 346a 5530 962a
00000.sh
  • > 1278 1577 1a76 2375 3474 556d 9631 1729
000000.sh
  • > 1278 1577 1a76 2375 3474 5573 966c 1732 1828
0000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 176f 1833 1957
00000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 186e 194c 1a56
000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 1911 1a4d 1b55
0000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a10 1b4e 1c54
00000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b13 1c4f 1d53
000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c12 1d48 1e52
0000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d15 1e49 1f51
00000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e14 1f4a 2050
000000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e0a 1f17 204b 215f
0000000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e0a 1f09 2016 2144 225e
00000000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e0a 1f09 2008 2119 2245 235d
000000000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e0a 1f09 2008 2107 2218 2346 245c
0000000000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e0a 1f09 2008 2107 2206 231b 2447 255b
00000000000000000000.sh
  • > 1278 1577 1a76 2375 3474 5573 9672 1771 1870 190f 1a0e 1b0d 1c0c 1d0b 1e0a 1f09 2008 2107 2206 2305 241a 2540 265a

 ま、総当たりで調べるのはここらあたりまでで良いだろう。そもそも、これ以上はキリがなさそうだし(^^;)。

 とりあえず、20桁まで調べたところで、各コードの差分を取ってみると、

 1: 1577-1278: 02FF
 2: 1a76-1577: 04FF
 3: 2375-1a76: 08FF
 4: 3474-2375: 10FF
 5: 5573-3474: 20FF
 6: 9672-5573: 40FF
 7: 1771-9672: FFFF FFFF FFFF 80FF
 8: 1870-1771: FF
 9: 190f-1870: 9F
10: 1a0e-190f: FF
11: 1b0d-1a0e: FF
12: 1c0c-1b0d: FF
13: 1d0b-1c0c: FF
14: 1e0a-1d0b: FF
15: 1f09-1e0a: FF
16: 2008-1f09: FF
17: 2107-2008: FF
18: 2206-2107: FF
19: 2305-2206: FF

 7,8,9桁目辺りで愉快な桁上がりをしているが、まぁ、大体一定のパターンでコードが桁上がりしていっている事が分かる。
 恐らく、7,8,9桁目でイレギュラーとなっているのは、FATのファイル名制限(8+3文字)を意識して、コードが設定されたためでは無いかと思われる。

 ここまで来れば、後は総当りで文字コードそのものを特定することも不可能では無いが、それはさして重要では無いのでやめておく。

 とりあえず、ここまでの検証内容で重要なのは以下の事項である。

  1. Qtアプリのルート権限の設定は、privilege.confに設定行を追加することで行われる。
  2. privilege.confの設定行は、特定の独自コードで変換された実行ファイル名を列記している。
  3. 変換に使用されているコードは独自のものであるが、一定のものであるため、単純にコード変換された行をprivilege.confに追記することで、任意のアプリケーションのルート権限を設定することが出来る。


 ま、要するに、ユーザーパッケージに於いて、あらかじめprivilege.confへの追記内容をpostinst辺りでコピペしてやれば、インストール時点でアプリケーションにルート権限を設定することが可能って訳ですな。