オープンソース・ソフトウェアの開発とダウンロード

Subversion リポジトリの参照

Diff of /tags/htdocs/1.8/android-arm.html.ja

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

tags/htdocs/1.8-tmp/android-arm.html.ja revision 4244 by kumaneko, Fri Dec 24 03:16:45 2010 UTC tags/htdocs/1.8/android-arm.html.ja revision 6163 by kumaneko, Sun Nov 11 07:20:02 2012 UTC
# Line 1  Line 1 
1  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2  <html lang="ja-JP">  <html lang="ja-JP">
3  <head>  <head>
4  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
5  <meta http-equiv="Content-Style-Type" content="text/css">  <meta http-equiv="content-style-type" content="text/css">
6  <title>TOMOYO Linux 導入手順書</title>  <link rel="stylesheet" href="../media/tomoyolinux.css" media="all" type="text/css">
7  <link rel="stylesheet" href="http://tomoyo.sourceforge.jp/tomoyo.css" media="all" type="text/css">  <title>TOMOYO Linux 1.8.x : TOMOYO Linux on Android</title>
8  </head>  </head>
9    
10  <body>  <body>
 <p style="text-align:right;"><a href="android-arm.html.en">English Page</a></p>  
 <p style="text-align:right;">Last modified: $Date$</p>  
11    
12  <h1>TOMOYO Linux on Android</h1>  <div id="titlebar">
13    <a href="../index.html.ja"><img src="../media/tomoyotitle.png" alt="tomoyotitle.png" width="320" height="40" border="0" align="left" title="TOMOYO Linux"></a>
14    </div>
15    
16    <div id="navbar" class="tomoyo-documentation">
17    <ul id="navbarlist">
18    <li id="tomoyo-home"><a href="../index.html.ja" title="TOMOYO Linux ホーム">ホーム</a></li>
19    <li id="tomoyo-about"><a href="../about.html.ja" title="TOMOYO Linux の詳細">詳細</a></li>
20    <li id="tomoyo-download"><a href="../download.html.ja" title="TOMOYO Linux を入手">ダウンロード</a></li>
21    <li id="tomoyo-changelogs"><a href="../changelogs.html.ja" title="TOMOYO Linux 変更履歴">変更履歴</a></li>
22    <li id="tomoyo-documentation"><a href="../documentation.html.ja" title="公式ドキュメント">ドキュメント</a></li>
23    <li id="tomoyo-support"><a href="../support.html.ja" title="サポート情報">サポート</a></li>
24    <li id="tomoyo-links"><a href="../links.html.ja" title="Links">リンク</a></li>
25    </ul>
26    <ul id="switch-language">
27    <li id="tomoyo-switch-language"><a href="android-arm.html.en" title="Go to English page">English page</a></li>
28    </ul>
29    </div>
30    
31    <div id="content">
32    
33  <p>このページでは、 TOMOYO Linux を arm 用 Android エミュレータ上で動作させる手順について説明します。ホスト環境として x86 上で動作している Ubuntu 8.04.4 を使用します。</p>  <div id="regular-content">
34    
35  <hr>  <h2>TOMOYO Linux on Android</h2>
36    
37  <h2>ステップ1:必要なパッケージのインストール</h2>  <p>このページでは、 TOMOYO Linux を arm 用 Android エミュレータ上で動作させる手順について説明します。ホスト環境として x86_64 上で動作している Ubuntu 10.04.3 を使用します。</p>
38    
39    <h3>ステップ1:必要なパッケージのインストール</h3>
40    
41  <p><a href="http://source.android.com/source/download.html">http://source.android.com/source/download.html</a> に示されているとおり、必要なパッケージをインストールします。</p>  <p><a href="http://source.android.com/source/download.html">http://source.android.com/source/download.html</a> に示されているとおり、必要なパッケージをインストールします。</p>
42    
43  <table border="1">  <pre class="command">
44  <tr><td>  sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
45  sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev  sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
46  </td></tr>  sudo apt-get update
47  </table>  sudo apt-get install sun-java6-jdk
48    sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev \
49    lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
50    libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
51    </pre>
52    
53    <h3>ステップ2:環境変数の設定</h3>
54    
55    <p>以下の内容を環境変数として指定します。 ~/.bashrc などに追加しておくことをお勧めします。</p>
56    
57    <pre class="command">
58    export ANDROID_HOME=$HOME/mydroid/
59    export ANDROID_IMG=$ANDROID_HOME/image/
60    </pre>
61    
62    <p>必要なディレクトリを作成します。</p>
63    
64    <pre class="command">
65    mkdir -p $ANDROID_HOME
66    mkdir -p $ANDROID_HOME/tmp
67    mkdir -p $ANDROID_HOME/tmp/policy
68    mkdir -p $ANDROID_IMG
69    mkdir -p $ANDROID_IMG/tmp
70    sudo mkdir -p /var/log/tomoyo
71    sudo chown -R `id -u` /var/log/tomoyo/
72    </pre>
73    
74  <h2>ステップ2:環境変数の設定</h2>  <h3>ステップ3: Android 環境の構築</h3>
75    
76  <p>以下の内容を環境変数として指定します。 ~/.bashrc などに追加しておくことをお勧めします。 arm-eabi-4.2.1 の部分は arm-eabi-4.3.1 または arm-eabi-4.4.0 にしても構いません。</p>  <p>エミュレータをコンパイルします。</p>
77    
78  <table border="1">  <pre class="command">
79  <tr><td>  cd $ANDROID_HOME
80  export ANDROID_HOME=$HOME/mydroid/<br>  wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
81  export ANDROID_IMG=$ANDROID_HOME/image/<br>  chmod 755 repo
82  export ANDROID_TOOLCHAIN=$ANDROID_HOME/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/<br>  ./repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
83  export PATH=$PATH:$ANDROID_HOME/out/host/linux-x86/bin/:$ANDROID_TOOLCHAIN  ./repo sync
84  </td></tr>  source build/envsetup.sh
85  </table>  lunch full-eng
86    make
87    </pre>
88    
89  <h2>ステップ3: Android 環境の構築</h2>  <h3>ステップ4:ホスト環境用ツールのインストール</h3>
90    
91  <p>エミュレータをコンパイルします。</p>  <p>Android エミュレータを遠隔操作するために、ホスト側に TOMOYO Linux のツールをインストールします。</p>
92    
93  <table border="1">  <pre class="command">
94  <tr><td>  cd $ANDROID_HOME/tmp/
95  mkdir -p $ANDROID_HOME<br>  wget -O ccs-tools-1.8.3-20120805.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49693/ccs-tools-1.8.3-20120805.tar.gz'
96  cd $ANDROID_HOME<br>  wget -O ccs-tools-1.8.3-20120805.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49693/ccs-tools-1.8.3-20120805.tar.gz.asc'
97  wget http://android.git.kernel.org/repo<br>  wget http://I-love.SAKURA.ne.jp/kumaneko-key
98  chmod 755 repo<br>  gpg --import kumaneko-key
99  ./repo init -u git://android.git.kernel.org/platform/manifest.git<br>  gpg ccs-tools-1.8.3-20120805.tar.gz.asc
100  ./repo sync<br>  tar -zxf ccs-tools-1.8.3-20120805.tar.gz
101    cd ccs-tools
102  make  make
103  </td></tr>  sudo make install
104  </table>  </pre>
105    
106  <h2>ステップ4: Android 用カーネルの構築</h2>  <p>また、ポリシーをチューニングするためのツールを使うので、そのための準備を行います。</p>
107    
108  <p>カーネルをコンパイルします。 TOMOYO Linux パッチを適用する以外は通常の手順と同じです。</p>  <pre class="command">
109    sudo /usr/lib/ccs/init_policy
110    sudo chown -R `id -u` /etc/ccs/
111    echo 'rewrite head_pattern /acct/uid/\$/' &gt;&gt; /etc/ccs/tools/patternize.conf
112    </pre>
113    
114    <h3>ステップ5:エミュレータ環境用ツールのインストール</h3>
115    
116    <p>Android エミュレータ側にインストールするためのエージェントをコンパイルします。</p>
117    
118  <table border="1">  <pre class="command">
119  <tr><td>  cd $ANDROID_HOME/tmp/
120  mkdir -p $ANDROID_HOME/tmp<br>  wget -O agcc http://plausible.org/andy/agcc
121  cd $ANDROID_HOME/tmp/<br>  sed -i -e 's@4\.2\.1@4.4.3@g' -e 's@interwork/@@g' -- agcc
122  wget -O kernel-source.tar.gz 'http://android.git.kernel.org/?p=kernel/common.git;a=snapshot;h=b0d93fb0426911d0329f861f22c59f1c72cff815;sf=tgz'<br>  chmod 755 agcc
123  tar -zxf kernel-source.tar.gz<br>  ./agcc -o ccs-editpolicy-agent $ANDROID_HOME/tmp/ccs-tools/usr_lib_ccs/ccs-editpolicy-agent.c
124  cd common/<br>  chmod 700 ccs-editpolicy-agent
125  wget -O ccs-patch-1.8.0-20101122.tar.gz 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49684/ccs-patch-1.8.0-20101122.tar.gz'<br>  </pre>
126  wget -O ccs-patch-1.8.0-20101122.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49684/ccs-patch-1.8.0-20101122.tar.gz.asc'<br>  
127  gpg ccs-patch-1.8.0-20101122.tar.gz.asc<br>  <h3>ステップ6:初期ポリシーの作成</h3>
128  tar -zxf ccs-patch-1.8.0-20101122.tar.gz<br>  
129  patch -p1 &lt; patches/ccs-patch-2.6.29-android-goldfish.diff<br>  <p>カーネル内に埋め込んでおくためのポリシーを作成します。</p>
130  sed -i -e 's:/sbin/modprobe /sbin/hotplug::' -e 's:/sbin/ccs-start:/init:' -- security/ccsecurity/Kconfig<br>  
131  ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make goldfish_defconfig<br>  <ul>
132  ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make -s<br>  <li>全てのドメインを学習モードに設定する。</li>
133  mkdir -p $ANDROID_IMG/tmp<br>  <li>ユーザIDまたはグループIDが 1 ~ 9999 に変化した時点で &lt;kernel&gt; //./system-user ドメインへと遷移する</li>
134    <li>ユーザIDまたはグループIDが 10000 以上に変化した時点で &lt;kernel&gt; //./app-user ドメインへと遷移する</li>
135    <li>予めある程度のアクセス許可を与えておく</li>
136    <li>個々の Android アプリは区別しない</li>
137    <li>ポリシーを変更できるのは /sbin/ccs-editpolicy-agent のみとする</li>
138    </ul>
139    
140    <p>という設定での例を示します。 &lt;kernel&gt; //./app-user ドメインに対して ANY_PATHNAME への書き込み許可は与えすぎです。実際に利用する場合には例えば /system/ 以下への書き込みを禁止するなどの対策を行うべきです。</p>
141    
142    <pre class="command">
143    cd $ANDROID_HOME/tmp/policy/
144    cat &gt; profile.conf &lt;&lt; "EOF"
145    PROFILE_VERSION=20100903
146    0-COMMENT=-----Disabled Mode-----
147    0-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 enforcing_penalty=0  }
148    0-CONFIG={ mode=disabled grant_log=no reject_log=yes }
149    1-COMMENT=-----Learning Mode-----
150    1-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 enforcing_penalty=0  }
151    1-CONFIG={ mode=learning grant_log=no reject_log=yes }
152    2-COMMENT=-----Permissive Mode-----
153    2-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 enforcing_penalty=0  }
154    2-CONFIG={ mode=permissive grant_log=no reject_log=yes }
155    3-COMMENT=-----Enforcing Mode-----
156    3-PREFERENCE={ max_audit_log=1024 max_learning_entry=2048 enforcing_penalty=0  }
157    3-CONFIG={ mode=enforcing grant_log=no reject_log=yes }
158    EOF
159    cat &gt; exception_policy.conf &lt;&lt; "EOF"
160    path_group ANY_PATHNAME /
161    path_group ANY_PATHNAME /\{\*\}/
162    path_group ANY_PATHNAME /\{\*\}/\*
163    path_group ANY_PATHNAME /\*
164    path_group ANY_PATHNAME \*:/
165    path_group ANY_PATHNAME \*:/\{\*\}/
166    path_group ANY_PATHNAME \*:/\{\*\}/\*
167    path_group ANY_PATHNAME \*:/\*
168    path_group ANY_PATHNAME \*:[\$]
169    path_group ANY_PATHNAME socket:[family=\$:type=\$:protocol=\$]
170    acl_group 0 file getattr @ANY_PATHNAME
171    acl_group 0 file ioctl @ANY_PATHNAME 0-0xFFFFFFFF
172    acl_group 0 file read /dev/urandom
173    acl_group 0 file read /system/bin/linker
174    acl_group 0 file read /system/lib/lib\*.so
175    acl_group 0 misc env _
176    acl_group 0 misc env ANDROID_ASSETS
177    acl_group 0 misc env ANDROID_BOOTLOGO
178    acl_group 0 misc env ANDROID_DATA
179    acl_group 0 misc env ANDROID_DNS_MODE
180    acl_group 0 misc env ANDROID_PROPERTY_WORKSPACE
181    acl_group 0 misc env ANDROID_ROOT
182    acl_group 0 misc env ANDROID_SOCKET_\*
183    acl_group 0 misc env ASEC_MOUNTPOINT
184    acl_group 0 misc env BOOTCLASSPATH
185    acl_group 0 misc env EXTERNAL_STORAGE
186    acl_group 0 misc env HOME
187    acl_group 0 misc env LD_LIBRARY_PATH
188    acl_group 0 misc env LOOP_MOUNTPOINT
189    acl_group 0 misc env ndns
190    acl_group 0 misc env PATH
191    acl_group 0 misc env qemu
192    acl_group 0 misc env RANDOM
193    acl_group 0 misc env SHELL
194    acl_group 0 misc env TERM
195    acl_group 0 task auto_domain_transition &lt;kernel&gt; //./app-user task.gid=10000-4294967295
196    acl_group 0 task auto_domain_transition &lt;kernel&gt; //./app-user task.uid=10000-4294967295
197    acl_group 0 task auto_domain_transition &lt;kernel&gt; //./system-user task.gid=1-9999
198    acl_group 0 task auto_domain_transition &lt;kernel&gt; //./system-user task.uid=1-9999
199    acl_group 1 file getattr @ANY_PATHNAME
200    acl_group 1 file ioctl @ANY_PATHNAME 0-0xFFFFFFFF
201    acl_group 1 file read /dev/urandom
202    acl_group 1 file read /system/bin/linker
203    acl_group 1 file read /system/lib/lib\*.so
204    acl_group 1 misc env _
205    acl_group 1 misc env ANDROID_ASSETS
206    acl_group 1 misc env ANDROID_BOOTLOGO
207    acl_group 1 misc env ANDROID_DATA
208    acl_group 1 misc env ANDROID_PROPERTY_WORKSPACE
209    acl_group 1 misc env ANDROID_ROOT
210    acl_group 1 misc env ANDROID_SOCKET_\*
211    acl_group 1 misc env ASEC_MOUNTPOINT
212    acl_group 1 misc env BOOTCLASSPATH
213    acl_group 1 misc env EXTERNAL_STORAGE
214    acl_group 1 misc env HOME
215    acl_group 1 misc env HOSTNAME
216    acl_group 1 misc env LD_LIBRARY_PATH
217    acl_group 1 misc env LOOP_MOUNTPOINT
218    acl_group 1 misc env MKSH
219    acl_group 1 misc env PATH
220    acl_group 1 misc env PS1
221    acl_group 1 misc env RANDOM
222    acl_group 1 misc env SHELL
223    acl_group 1 misc env TERM
224    acl_group 1 misc env USER
225    EOF
226    cat &gt; domain_policy.conf &lt;&lt; "EOF"
227    &lt;kernel&gt;
228    use_profile 1
229    use_group 0
230    
231    &lt;kernel&gt; //./system-user
232    use_profile 1
233    use_group 1
234    
235    file read/write/unlink/rmdir/truncate/symlink @ANY_PATHNAME task.euid=1-9999 task.egid=1-9999
236    file create/mkdir/mkfifo/mksock/chmod @ANY_PATHNAME 0-0777 task.euid=1-9999 task.egid=1-9999
237    file link/rename @ANY_PATHNAME @ANY_PATHNAME task.euid=1-9999 task.egid=1-9999
238    
239    &lt;kernel&gt; //./app-user
240    use_profile 1
241    use_group 1
242    
243    file read/write/unlink/rmdir/truncate/symlink @ANY_PATHNAME task.euid=10000-4294967295 task.egid=10000-4294967295
244    file create/mkdir/mkfifo/mksock/chmod @ANY_PATHNAME 0-0777 task.euid=10000-4294967295 task.egid=10000-4294967295
245    file link/rename @ANY_PATHNAME @ANY_PATHNAME task.euid=10000-4294967295 task.egid=10000-4294967295
246    EOF
247    echo /sbin/ccs-editpolicy-agent &gt; manager.conf
248    echo &gt; stat.conf
249    </pre>
250    
251    <h3>ステップ7: Android 用カーネルの構築</h3>
252    
253    <p>カーネルのソースコードをダウンロードして展開します。</p>
254    
255    <pre class="command">
256    cd $ANDROID_HOME/tmp/
257    git clone https://android.googlesource.com/kernel/goldfish
258    cd goldfish/
259    git checkout origin/android-goldfish-2.6.29
260    ARCH=arm CROSS_COMPILE=$ANDROID_EABI_TOOLCHAIN/arm-linux-androideabi- make -s goldfish_armv7_defconfig
261    </pre>
262    
263    <p>TOMOYO Linux パッチを適用します。</p>
264    
265    <pre class="command">
266    cd $ANDROID_HOME/tmp/goldfish/
267    wget -O ccs-patch-1.8.3-20121111.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49684/ccs-patch-1.8.3-20121111.tar.gz'
268    wget -O ccs-patch-1.8.3-20121111.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49684/ccs-patch-1.8.3-20121111.tar.gz.asc'
269    gpg ccs-patch-1.8.3-20121111.tar.gz.asc
270    tar -zxf ccs-patch-1.8.3-20121111.tar.gz
271    patch -p1 &lt; patches/ccs-patch-2.6.29-android-goldfish.diff
272    sed -e 's/# CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER is not set/CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER=y/' -- config.ccs &gt;&gt; .config
273    mkdir -p security/ccsecurity/policy/
274    cp -p $ANDROID_HOME/tmp/policy/*.conf security/ccsecurity/policy/
275    </pre>
276    
277    <p>カーネルをコンパイルします。</p>
278    
279    <pre class="command">
280    cd $ANDROID_HOME/tmp/goldfish/
281    ARCH=arm CROSS_COMPILE=$ANDROID_EABI_TOOLCHAIN/arm-linux-androideabi- make -s
282  cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img  cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img
283  </td></tr>  </pre>
 </table>  
284    
285  <h2>ステップ5:イメージファイルのコピー</h2>  <h3>ステップ8:イメージファイルのコピー</h3>
286    
287  <p>Android エミュレータで指定するためのイメージファイルをコピーします。</p>  <p>Android エミュレータで指定するためのイメージファイルをコピーします。</p>
288    
289  <table border="1">  <pre class="command">
290  <tr><td>  cd $ANDROID_HOME/out/target/product/generic/
 cd $ANDROID_HOME/out/target/product/generic/<br>  
291  cp -p system.img ramdisk.img userdata.img $ANDROID_IMG  cp -p system.img ramdisk.img userdata.img $ANDROID_IMG
292  </td></tr>  </pre>
 </table>  
293    
294  <h2>ステップ6:ホスト環境用ツールのインストール</h2>  <h3>ステップ9:RAMディスクの編集</h3>
295    
296  <p>Android エミュレータを遠隔操作するために、ホスト側に TOMOYO Linux のツールをインストールします。</p>  <p>Android エミュレータで使用するRAMディスクにエージェントをコピーし、自動的に起動されるようにします。</p>
297    
298  <table border="1">  <pre class="command">
299  <tr><td>  cd $ANDROID_IMG/tmp/
300  cd $ANDROID_HOME/tmp/<br>  zcat ../ramdisk.img | cpio -id
301  wget -O ccs-tools-1.8.0-20101122.tar.gz 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49693/ccs-tools-1.8.0-20101122.tar.gz'<br>  echo &gt;&gt; init.rc
302  wget -O ccs-tools-1.8.0-20101122.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49693/ccs-tools-1.8.0-20101122.tar.gz.asc'<br>  echo 'service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000' &gt;&gt; init.rc
303  gpg ccs-tools-1.8.0-20101122.tar.gz.asc<br>  echo '&nbsp;&nbsp;&nbsp;&nbsp;class core' &gt;&gt; init.rc
304  tar -zxf ccs-tools-1.8.0-20101122.tar.gz<br>  echo '&nbsp;&nbsp;&nbsp;&nbsp;oneshot' &gt;&gt; init.rc
305  cd ccstools<br>  cp -p $ANDROID_HOME/tmp/ccs-editpolicy-agent sbin/
306  sudo apt-get install libreadline-dev<br>  find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img
307  make<br>  </pre>
 sudo make install  
 </td></tr>  
 </table>  
308    
309  <h2>ステップ7:エミュレータ環境用ツールのインストール</h2>  <h3>ステップ10:エミュレータの起動</h3>
310    
311  <p>Android エミュレータ側にインストールするためのエージェントをコンパイルします。</p>  <p>Android エミュレータを起動します。カーネルはステップ7で作成したものを、RAMディスクはステップ9で作成したものを指定します。</p>
312    
313  <p>Android エミュレータで使用するRAMディスクに含まれている /init.rc が  /etc という名前で /system/etc/ ディレクトリへのシンボリックリンクを作成するため、(ステップ13で追加する TOMOYO Linux のポリシーローダである) /sbin/ccs-init が /etc/ccs/ ディレクトリを起動時に読み込むポリシーを保存しておくためのディレクトリとして使用することができません。そのため、 /etc/ccs/ の代わりに /ccs/ をポリシー用ディレクトリとして使用します。</p>  <pre class="command">
314    emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG \
315    -data $ANDROID_IMG/userdata.img -show-kernel
316    </pre>
317    
318  <table border="1">  <h3>ステップ11:ポート転送の指定</h3>
 <tr><td>  
 cd $ANDROID_HOME/tmp/<br>  
 wget -O agcc http://plausible.org/andy/agcc<br>  
 chmod 755 agcc<br>  
 ./agcc -o init_policy $ANDROID_HOME/tmp/ccstools/usr_lib_ccs/init_policy.c<br>  
 ./agcc -o ccs-editpolicy-agent $ANDROID_HOME/tmp/ccstools/usr_lib_ccs/ccs-editpolicy-agent.c<br>  
 sed -e 's:etc/ccs:ccs:g' $ANDROID_HOME/tmp/ccstools/sbin/ccs-init.c &gt; $ANDROID_HOME/tmp/ccstools/ccs-init2.c<br>  
 ./agcc -o ccs-init $ANDROID_HOME/tmp/ccstools/ccs-init2.c<br>  
 chmod 700 init_policy ccs-editpolicy-agent ccs-init  
 </td></tr>  
 </table>  
319    
320  <h2>ステップ8:RAMディスクの編集</h2>  <p>エミュレータ内で動作しているエージェントと通信するために、ポート転送を指定します。以下のように指定した場合、ホスト側でのポート 10000 への TCP 接続は、エミュレータ側でのポート 7000 へと転送されます。ステップ9で ccs-editpolicy-agent をポート 7000 で待機するように指定しているので、ホスト側でポート 10000 へ接続することにより、エージェントとの通信が可能になります。</p>
321    
322  <p>Android エミュレータで使用するRAMディスクにエージェントをコピーし、自動的に起動されるようにします。</p>  <pre class="command">
323    adb forward tcp:10000 tcp:7000
324    </pre>
325    
326  <table border="1">  <h3>ステップ12:エージェント経由での操作</h3>
 <tr><td>  
 cd $ANDROID_IMG/tmp/<br>  
 zcat ../ramdisk.img | cpio -id<br>  
 echo 'service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000' &gt;&gt; init.rc<br>  
 echo '&nbsp;&nbsp;&nbsp;&nbsp;oneshot' &gt;&gt; init.rc<br>  
 echo &gt;&gt; init.rc<br>  
 cp -p $ANDROID_HOME/tmp/init_policy $ANDROID_HOME/tmp/ccs-editpolicy-agent sbin/<br>  
 find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img  
 </td></tr>  
 </table>  
327    
328  <h2>ステップ9:エミュレータの起動</h2>  <p>以下のように ccs-editpolicy を起動すると、エミュレータ内のエージェント経由で ポリシーを閲覧/編集できます。</p>
329    
330  <p>Android エミュレータを起動します。カーネルはステップ4で作成したものを、RAMディスクはステップ8で作成したものを指定します。</p>  <pre class="command">
331    /usr/sbin/ccs-editpolicy 127.0.0.1:10000
332    </pre>
333    
334  <table border="1">  <p>以下のように ccs-auditd を起動すると、エミュレータ内のエージェント経由でアクセス許可ログ/拒否ログを取得して保存することができます。なお、アクセスログは大量に出力されるため、ディスクの空き容量に注意してください。</p>
 <tr><td>  
 emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG -data $ANDROID_IMG/userdata.img -show-kernel  
 </td></tr>  
 </table>  
335    
336  <h2>ステップ10:必要なファイルのコピー</h2>  <pre class="command">
337    /usr/sbin/ccs-auditd 127.0.0.1:10000
338    </pre>
339    
340  <p>/sbin/ccs-init の動作に必要なファイルをRAMディスクにコピーします。 Android 環境では、ダイナミックリンクライブラリをロードするために /system/bin/loader が使われます。しかし、 /sbin/ccs-init が実行される時点では /system/ パーティションはまだマウントされていません。そのため、 /system/ パーティションの中にある /bin/loader をRAMディスク内の /system/bin/ ディレクトリにコピーしておく必要があります。同様に、 /system/ パーティションの中にある /lib/libc.so と /lib/libm.so をRAMディスク内の /lib/ ディレクトリにコピーしておく必要があります。</p>  <p>以下のように ccs-queryd を実行すると、エミュレータ内のエージェント経由で、強制モードでのポリシー違反を対話的に処理できます。 ccs-queryd を終了させるには Ctrl-C を押してください。</p>
341    
342  <table border="1">  <pre class="command">
343  <tr><td>  /usr/sbin/ccs-queryd 127.0.0.1:10000
344  cd $ANDROID_IMG/tmp/<br>  </pre>
 mkdir -p system/bin lib<br>  
 adb pull /system/bin/linker system/bin/<br>  
 adb pull /system/lib/libc.so lib/<br>  
 adb pull /system/lib/libm.so lib/<br>  
 chmod 755 system/bin/linker lib/libc.so lib/libm.so<br>  
 </td></tr>  
 </table>  
345    
346  <h2>ステップ11:ポリシーの初期化</h2>  <p>ワイルドカード化を行うには以下のようにしてください。ワイルドカード化のルールは /etc/ccs/tools/patternize.conf で定義されているので、適宜編集してください。</p>
347    
348  <p>TOMOYO Linux が使用するための初期状態のポリシーを作成します。初期状態のポリシーファイルをRAMディスクの中の /ccs/ ディレクトリにコピーします。</p>  <pre class="command">
349    cd $ANDROID_HOME/tmp/policy/
350    /usr/sbin/ccs-savepolicy -d 127.0.0.1:10000 &gt; domain_policy.old
351    /usr/sbin/ccs-patternize &lt; domain_policy.old &gt; domain_policy.new
352    /usr/sbin/ccs-diffpolicy domain_policy.old domain_policy.new &gt; domain_policy.diff
353    less domain_policy.diff
354    /usr/sbin/ccs-loadpolicy -d 127.0.0.1:10000 &lt; domain_policy.diff
355    </pre>
356    
357  <table border="1">  <h3>ステップ13:ポリシーのアップデート</h3>
 <tr><td>  
 mkdir -p $ANDROID_IMG/tmp/ccs/<br>  
 adb shell /sbin/init_policy policy_dir=/data/ccs/<br>  
 adb pull /data/ccs/ $ANDROID_IMG/tmp/ccs/<br>  
 adb shell rm /data/ccs/\*<br>  
 adb shell rmdir /data/ccs/<br>  
 adb emu kill  
 </td></tr>  
 </table>  
358    
359  <h2>ステップ12:ポリシーの修正</h2>  <p>ポリシーはメモリ上にのみ存在しているため、エミュレータを終了すると失われてしまいます。エミュレータを終了する前に忘れずにポリシーを保存するようにしてください。</p>
360    
361  <p>不足している acl_group 0 file read などを例外ポリシーに追加します。以下の内容は一例です。ドメインポリシーでは全体をプロファイル1(学習モード)で動作させるように指定しています。マネージャにはエージェントプログラムだけを指定しています。</p>  <pre class="command">
362    cd $ANDROID_HOME/tmp/policy/
363    /usr/sbin/ccs-savepolicy -e 127.0.0.1:10000 &gt; exception_policy.conf
364    /usr/sbin/ccs-savepolicy -d 127.0.0.1:10000 &gt; domain_policy.conf
365    /usr/sbin/ccs-savepolicy -p 127.0.0.1:10000 &gt; profile.conf
366    </pre>
367    
368  <table border="1">  <p>また、保存したポリシーをカーネル内に埋め込むには以下のように行ってください。</p>
 <tr><td>  
 cd $ANDROID_IMG/tmp/<br>  
 (<br>  
 echo 'initialize_domain /init'<br>  
 echo 'initialize_domain /system/bin/app_process'<br>  
 <br>  
 echo 'acl_group 0 file read /system/lib/\@.so'<br>  
 echo 'acl_group 0 file read /system/framework/\*.jar'<br>  
 echo 'acl_group 0 file read /system/media/audio/\*/\*'<br>  
 echo 'acl_group 0 file read /system/fonts/\*.ttf'<br>  
 <br>  
 echo 'path_group SYSTEM_APK /system/app/\@.apk'<br>  
 <br>  
 echo 'path_group SYS_FILES sys:kernel/ipv4/tcp_wmem_min'<br>  
 echo 'path_group SYS_FILES sys:kernel/ipv4/tcp_wmem_def'<br>  
 echo 'path_group SYS_FILES sys:kernel/ipv4/tcp_wmem_max'<br>  
 echo 'path_group SYS_FILES sys:kernel/ipv4/tcp_rmem_min'<br>  
 echo 'path_group SYS_FILES sys:kernel/ipv4/tcp_rmem_def'<br>  
 echo 'path_group SYS_FILES sys:kernel/ipv4/tcp_rmem_max'<br>  
 <br>  
 echo 'acl_group 0 file read sys:devices/platform/\*battery\*/power_supply/ac/online'<br>  
 echo 'acl_group 0 file read sys:devices/platform/\*battery\*/power_supply/battery/\@'<br>  
 <br>  
 #App. specific data files<br>  
 ) &gt;&gt; ccs/exception_policy.conf<br>  
 (<br>  
 echo '&lt;kernel&gt;'<br>  
 echo 'use_profile 1'<br>  
 ) &gt; ccs/domain_policy.conf<br>  
 echo /sbin/ccs-editpolicy-agent &gt; ccs/manager.conf  
 </td></tr>  
 </table>  
369    
370  <h2>ステップ13:ポリシーローダの追加</h2>  <pre class="command">
371    cp -p $ANDROID_HOME/tmp/policy/*.conf $ANDROID_HOME/tmp/goldfish/security/ccsecurity/policy/
372    </pre>
373    
374  <p>TOMOYO Linux を有効にするために、 ccs-init を追加します。</p>  <p>カーネルを再コンパイルします。</p>
375    
376  <table border="1">  <pre class="command">
377  <tr><td>  cd $ANDROID_HOME/tmp/goldfish/
378  cd $ANDROID_IMG/tmp/<br>  ARCH=arm CROSS_COMPILE=$ANDROID_EABI_TOOLCHAIN/arm-linux-androideabi- make -s
379  rm sbin/init_policy<br>  cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img
380  cp -p $ANDROID_HOME/tmp/ccs-init sbin/<br>  </pre>
 find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img  
 </td></tr>  
 </table>  
381    
382  <h2>ステップ14:エミュレータの起動</h2>  <p>再度エミュレータを実行します。</p>
383    
384  <p>Android エミュレータを起動します。カーネルはステップ4で作成したものを、RAMディスクはステップ13で作成したものを指定します。</p>  <pre class="command">
385    emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG \
386    -data $ANDROID_IMG/userdata.img -show-kernel
387    </pre>
388    
389  <table border="1">  <p>最終的なポリシーが完成したら、カーネル内に埋め込まれている domain_policy.conf に enforcing mode 用のプロファイルを割り当てておく( use_profile 3 )ことにより、 /init が実行される時点からアクセス制御を有効にすることができます。その状態で正常に動作することを確認したら、ステップ9で追加した /sbin/ccs-editpolicy-agent を削除します。また、 /init.rc およびカーネル内に埋め込まれた profile.conf からも ccs-editpolicy-agent を削除します。</p>
 <tr><td>  
 emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG -data $ANDROID_IMG/userdata.img -show-kernel  
 </td></tr>  
 </table>  
390    
391  <h2>ステップ15:ポート転送の指定</h2>  <h3>補足:ポリシーの更新を認めたい場合のヒント</h3>
392    
393  <p>エミュレータ内で動作しているエージェントと通信するために、ポート転送を指定します。以下のように指定した場合、ホスト側でのポート 10000 への TCP 接続は、エミュレータ側でのポート 7000 へと転送されます。ステップ8で ccs-editpolicy-agent をポート 7000 で待機するように指定しているので、ホスト側でポート 10000 へ接続することにより、エージェントとの通信が可能になります。</p>  <p>Android ではユーザがアプリケーションを追加することができます。上記手順では、ユーザIDに基づいて3つのカテゴリに分類するという方法により、アプリケーションが追加されてもポリシーを更新する必要が無いような仕様になっています。</p>
394    
395  <table border="1">  <p>しかし、追加されるアプリケーションによっては、ポリシーを更新したい場合があるかもしれません。そのような場合、起動時に必要になるポリシーとしてカーネル内に埋め込む固定分と、起動後に必要になるポリシーとしてカーネル内には埋め込まない変動分とを分離することで対処するという方法が考えられます。</p>
 <tr><td>  
 adb forward tcp:10000 tcp:7000  
 </td></tr>  
 </table>  
396    
397  <h2>ステップ16:エージェント経由での操作</h2>  <p>起動時に必要となるポリシーはカーネルを読み込み専用のパーティションに配置することで、改ざんされる可能性を減らすことができます。起動後に必要になるポリシーは読み書きが可能なパーティションに配置することになるので改ざんされる可能性が高くなります。そのため、例えば GPG で署名し、改ざんされていないことを確認できた場合にのみポリシーを追加読み込みするという方法が考えられます。</p>
398    
399  <p>以下のように ccs-editpolicy を起動すると、エミュレータ内のエージェント経由で ポリシーを閲覧/編集できます。</p>  <p>TOMOYO Linux では強制モードにおけるポリシー違反を契機として外部のプログラムに問い合わせを行うことができます。 ccs-queryd 相当の処理を実装し、 ccs-editpolicy-agent の代わりに常駐させておくという方法を利用できます。</p>
400    
401  <table border="1">  <h3>補足:ポリシーをカーネル内に埋め込みたくない場合のヒント</h3>
 <tr><td>  
 /usr/sbin/ccs-editpolicy 127.0.0.1:10000  
 </td></tr>  
 </table>  
402    
403  <p>以下のように ccs-savepolicy を実行すると、エミュレータ内のエージェント経由で現在のポリシーをRAMディスク内の /ccs/ ディレクトリに出力できます。</p>  <p>何かの理由によりポリシーをカーネル内に埋め込みたくない場合、ステップ7の</p>
404    
405  <table border="1">  <pre class="command">
406  <tr><td>  sed -e 's/# CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER is not set/CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER=y/' -- config.ccs &gt;&gt; .config
407  /usr/sbin/ccs-savepolicy $ANDROID_IMG/tmp/ccs/ 127.0.0.1:10000<br>  mkdir -p security/ccsecurity/policy/
408  cd $ANDROID_IMG/tmp/<br>  cp -p $ANDROID_HOME/tmp/policy/*.conf security/ccsecurity/policy/
409  find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img  </pre>
 </td></tr>  
 </table>  
410    
411  <p>以下のように ccs-auditd を起動すると、エミュレータ内のエージェント経由でアクセス許可ログ/拒否ログを取得して保存することができます。なお、アクセスログは大量に出力されるため、ディスクの空き容量に注意してください。</p>  <p>という部分を</p>
412    
413  <table border="1">  <pre class="command">
414  <tr><td>  sed -e 's:/sbin/init:/init:' -- config.ccs &gt;&gt; .config
415  /usr/sbin/ccs-auditd /tmp/grant_log /tmp/reject_log 127.0.0.1:10000  </pre>
 </td></tr>  
 </table>  
416    
417  <p>以下のように ccs-queryd を実行すると、エミュレータ内のエージェント経由で、強制モードでのポリシー違反を対話的に処理できます。 ccs-queryd を終了させるには Ctrl-C を押してください。</p>  <p>に置き換えてください。このようにした場合、ポリシーローダとして /sbin/ccs-init (および /sbin/ccs-init が依存するファイルとして /system/bin/linker /system/lib/libc.so /system/lib/libm.so )もRAMディスク内にコピーしてください。 /sbin/ccs-init が実行される時点では /system/ パーティションがマウントされていないため、シンボリックリンクでの代用はできません。また、 ccs-init.c はポリシーを /etc/ccs/ から読み込むようになっていますので、適宜修正(例えば $ANDROID_HOME/tmp/policy/*.conf の内容を ccs-init.c に埋め込んでしまうなど)してください。 Android エミュレータで使用するRAMディスクに含まれている /init.rc が /etc という名前で /system/etc/ ディレクトリへのシンボリックリンクを作成するため、以下の例では、ポリシーを /ccs/ ディレクトリから読み込むように修正しています。</p>
418    
419  <table border="1">  <pre class="command">
420  <tr><td>  cd $ANDROID_HOME/tmp/
421  /usr/sbin/ccs-queryd 127.0.0.1:10000  sed -e 's:etc/ccs:ccs:g' $ANDROID_HOME/tmp/ccs-tools/sbin/ccs-init.c &gt; $ANDROID_HOME/tmp/ccs-tools/sbin/ccs-init2.c
422  </td></tr>  ./agcc -o ccs-init $ANDROID_HOME/tmp/ccs-tools/sbin/ccs-init2.c
423  </table>  cd $ANDROID_IMG/tmp/
424    mkdir -p sbin system/bin system/lib
425    cp -p $ANDROID_HOME/tmp/ccs-init sbin/
426    cp -p $ANDROID_HOME/out/target/product/generic/system/bin/linker system/bin/
427    cp -p $ANDROID_HOME/out/target/product/generic/system/lib/libc.so system/lib/
428    cp -p $ANDROID_HOME/out/target/product/generic/system/lib/libm.so system/lib/
429    chmod 700 sbin/ccs-init system/bin/linker system/lib/libc.so system/lib/libm.so
430    find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img
431    </pre>
432    
433    </div><!-- regular-content -->
434    
435    </div><!-- content -->
436    
437    <div id="navfooter">
438  <hr>  <hr>
439    <table>
440    <tr>
441    <td class="docs-previous">
442    </td>
443    <td class="docs-index">
444    <a href="index.html.ja">目次</a>
445    </td>
446    <td class="docs-next">
447    </td>
448    </tr>
449    <tr>
450    <td class="docs-previous-description">
451    </td>
452    <td class="docs-home">
453    </td>
454    <td class="docs-next-description">
455    </td>
456    </tr>
457    </table>
458    </div>
459    
460    <div id="footer">
461    <p class="language">Go to <a href="android-arm.html.en">English page</a>.</p>
462    <p class="timestamp">Last modified: $Date$</p>
463    <p class="trademark">Linux&reg; は世界各国における Linus Torvalds の登録商標です。 TOMOYO&reg; は<a href="http://www.nttdata.co.jp/">株式会社NTTデータ</a>の登録商標です。</p>
464    <p><a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1973" width="96" height="31" alt="sflogo.php" title="SourceForge.jp"></a></p>
465    </div>
466    
 <p><a href="index.html.ja">目次へ戻る</a></p>  
 <p><a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1973" width="96" height="31" alt="SourceForge.jp"></a></p>  
467  </body>  </body>
468  </html>  </html>

Legend:
Removed from v.4244  
changed lines
  Added in v.6163

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26