e0661fcb363b63cbfe2b2bc1960d1fa928e1bc79
Linux/SELinux.md
... | ... | @@ -2,87 +2,87 @@ |
2 | 2 | |
3 | 3 | # 管理ツールのインストール
|
4 | 4 | - 管理ツールのパッケージ
|
5 | -```
|
|
6 | -# yum install setroubleshoot
|
|
7 | -```
|
|
5 | + ```
|
|
6 | + # yum install setroubleshoot
|
|
7 | + ```
|
|
8 | 8 | - GUI用追加パッケージ
|
9 | -```
|
|
10 | -# yum install policycoreutils-gui
|
|
11 | -```
|
|
9 | + ```
|
|
10 | + # yum install policycoreutils-gui
|
|
11 | + ```
|
|
12 | 12 | |
13 | 13 | # 動作モード切替
|
14 | 14 | - 現在のモードを調べる。
|
15 | -```
|
|
16 | -# getenforce
|
|
17 | -```
|
|
15 | + ```
|
|
16 | + # getenforce
|
|
17 | + ```
|
|
18 | 18 | - 「Enforcing」モードに変更。
|
19 | -```
|
|
20 | -# setneforce 1
|
|
21 | -```
|
|
19 | + ```
|
|
20 | + # setneforce 1
|
|
21 | + ```
|
|
22 | 22 | - 「Permissive」モードに変更。
|
23 | -```
|
|
24 | -# setenforce 0
|
|
25 | -```
|
|
23 | + ```
|
|
24 | + # setenforce 0
|
|
25 | + ```
|
|
26 | 26 | - [SELinuxの動作モードをコマンドラインで切り替えるには - @IT](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/979selinuxenforce.html)
|
27 | 27 | |
28 | 28 | # ログ分析
|
29 | 29 | - ログ分析
|
30 | -```
|
|
31 | -# sealert -a /var/log/audit/audit.log
|
|
32 | -```
|
|
30 | + ```
|
|
31 | + # sealert -a /var/log/audit/audit.log
|
|
32 | + ```
|
|
33 | 33 | - 一時許可ポリシーの適用
|
34 | -```
|
|
35 | -# grep <分析して出てきたキーワード> /var/log/audit/audit.log | audit2allow -M mypol
|
|
36 | -# semodule -i mypol.pp
|
|
37 | -```
|
|
34 | + ```
|
|
35 | + # grep <分析して出てきたキーワード> /var/log/audit/audit.log | audit2allow -M mypol
|
|
36 | + # semodule -i mypol.pp
|
|
37 | + ```
|
|
38 | 38 | - 複数の項目を許可するポリシーが必要な場合
|
39 | 39 | 1. SELinux を Permissive モードに切り替えて該当プログラムを実行し、動かない原因が SELinux であることを確認する。
|
40 | -```
|
|
41 | -# setenforce 0
|
|
42 | -```
|
|
40 | + ```
|
|
41 | + # setenforce 0
|
|
42 | + ```
|
|
43 | 43 | 1. 一時許可ポリシーを削除。
|
44 | -```
|
|
45 | -# semodule -r mypol
|
|
46 | -```
|
|
44 | + ```
|
|
45 | + # semodule -r mypol
|
|
46 | + ```
|
|
47 | 47 | 1. ログファイル更新。
|
48 | -```
|
|
49 | -# service auditd rotate
|
|
50 | -```
|
|
48 | + ```
|
|
49 | + # service auditd rotate
|
|
50 | + ```
|
|
51 | 51 | - 更新に失敗する場合は、auditd の動作確認/再起動を行う。
|
52 | -```
|
|
53 | -# service auditd status
|
|
54 | -# service auditd restart
|
|
55 | -```
|
|
52 | + ```
|
|
53 | + # service auditd status
|
|
54 | + # service auditd restart
|
|
55 | + ```
|
|
56 | 56 | 1. 該当プログラムを実行し、ログを記録する。
|
57 | 57 | 1. Enforcing モードに戻す。
|
58 | -```
|
|
59 | -# setenforce 1
|
|
60 | -```
|
|
58 | + ```
|
|
59 | + # setenforce 1
|
|
60 | + ```
|
|
61 | 61 | 1. ログからポリシーを作成する。
|
62 | - - 許可すべき項目が不明な場合<br />
|
|
63 | -「XXX」は自分で決めた名前。
|
|
64 | -```
|
|
65 | -# cat /var/log/audit/audit.log | audit2allow -M mypol_XXX
|
|
66 | -```
|
|
67 | - - 許可すべき項目が既知の場合<br />
|
|
68 | -必要な項目を「\|」で繋げて検索する。
|
|
69 | -```
|
|
70 | -# grep "項目1\|項目2\|項目3" /var/log/audit/audit.log | audit2allow -M mypol_XXX
|
|
71 | -```
|
|
72 | - 1. ポリシーの確認<br />
|
|
73 | -関係ない項目まで許可されていないかどうか確認する。
|
|
74 | -```
|
|
75 | -# vi mypol_XXX.te
|
|
76 | -```
|
|
62 | + - 許可すべき項目が不明な場合
|
|
63 | + 「XXX」は自分で決めた名前。
|
|
64 | + ```
|
|
65 | + # cat /var/log/audit/audit.log | audit2allow -M mypol_XXX
|
|
66 | + ```
|
|
67 | + - 許可すべき項目が既知の場合
|
|
68 | + 必要な項目を「\|」で繋げて検索する。
|
|
69 | + ```
|
|
70 | + # grep "項目1\|項目2\|項目3" /var/log/audit/audit.log | audit2allow -M mypol_XXX
|
|
71 | + ```
|
|
72 | + 1. ポリシーの確認
|
|
73 | + 関係ない項目まで許可されていないかどうか確認する。
|
|
74 | + ```
|
|
75 | + # vi mypol_XXX.te
|
|
76 | + ```
|
|
77 | 77 | - ポリシーの手動コンパイル
|
78 | -```
|
|
79 | -# checkmodule -M -m -o mypol_XXX.mod mypol_XXX.te
|
|
80 | -# semodule_package -o mypol_XXX.pp -m mypol_XXX.mod
|
|
81 | -```
|
|
78 | + ```
|
|
79 | + # checkmodule -M -m -o mypol_XXX.mod mypol_XXX.te
|
|
80 | + # semodule_package -o mypol_XXX.pp -m mypol_XXX.mod
|
|
81 | + ```
|
|
82 | 82 | 1. ポリシーをインストール。
|
83 | -```
|
|
84 | -# semodule -i mypol_XXX.pp
|
|
85 | -```
|
|
83 | + ```
|
|
84 | + # semodule -i mypol_XXX.pp
|
|
85 | + ```
|
|
86 | 86 | |
87 | 87 | # スクリプト
|
88 | 88 | ## コンパイルとインストール
|
... | ... | @@ -178,100 +178,107 @@ sub sortInBracket |
178 | 178 | ```
|
179 | 179 | |
180 | 180 | # ブーリアン値設定
|
181 | -- 現在の設定値を確認 (httpの場合)
|
|
181 | +
|
|
182 | +## 現在の設定値を確認 (httpの場合)
|
|
182 | 183 | ```
|
183 | 184 | # getsebool -a | grep http
|
184 | 185 | ```
|
185 | -- sshd
|
|
186 | +
|
|
187 | +## sshd
|
|
186 | 188 | ```
|
187 | 189 | # setsebool -P nis_enabled 1
|
188 | 190 | ```
|
189 | -- ftpd
|
|
190 | - - ユーザホームディレクトリの読み書き許可<br />
|
|
191 | +
|
|
192 | +## ftpd
|
|
193 | +- ユーザホームディレクトリの読み書き許可
|
|
191 | 194 | 許可が無いと「500 OOPS: cannot change directory」エラーでログインできない。
|
192 | -```
|
|
193 | -# setsebool -P ftp_home_dir 1
|
|
194 | -```
|
|
195 | - - ユーザホームディレクトリ外の読み書き許可
|
|
196 | -```
|
|
197 | -# setsebool -P allow_ftpd_full_access 1
|
|
198 | -```
|
|
195 | + ```
|
|
196 | + # setsebool -P ftp_home_dir 1
|
|
197 | + ```
|
|
198 | +- ユーザホームディレクトリ外の読み書き許可
|
|
199 | + ```
|
|
200 | + # setsebool -P allow_ftpd_full_access 1
|
|
201 | + ```
|
|
199 | 202 | |
200 | -- httpd
|
|
201 | - - メール送信を許可
|
|
202 | -```
|
|
203 | -# setsebool -P httpd_can_sendmail 1
|
|
204 | -```
|
|
205 | - - ネットワークアクセスを許可
|
|
206 | -```
|
|
207 | -# setsebool -P httpd_can_network_connect 1
|
|
208 | -```
|
|
209 | - - データベースアクセスを許可
|
|
210 | -```
|
|
211 | -# setsebool -P httpd_can_network_connect_db 1
|
|
212 | -```
|
|
213 | - - ユーザディレクトリへのアクセスを許可
|
|
214 | -```
|
|
215 | -# setsebool -P httpd_read_user_content 1
|
|
216 | -```
|
|
203 | +## httpd
|
|
204 | +- メール送信を許可
|
|
205 | + ```
|
|
206 | + # setsebool -P httpd_can_sendmail 1
|
|
207 | + ```
|
|
208 | +- ネットワークアクセスを許可
|
|
209 | + ```
|
|
210 | + # setsebool -P httpd_can_network_connect 1
|
|
211 | + ```
|
|
212 | +- データベースアクセスを許可
|
|
213 | + ```
|
|
214 | + # setsebool -P httpd_can_network_connect_db 1
|
|
215 | + ```
|
|
216 | +- ユーザディレクトリへのアクセスを許可
|
|
217 | + ```
|
|
218 | + # setsebool -P httpd_read_user_content 1
|
|
219 | + ```
|
|
220 | +- スクリプトのファイル書き出しを許可
|
|
221 | + ```
|
|
222 | + # setsebool -P httpd_sys_script_anon_write 1
|
|
223 | + ```
|
|
217 | 224 | |
218 | -- named
|
|
219 | - - 外部ドメインの名前解決に失敗する(検索結果のキャッシュに失敗している)
|
|
220 | -```
|
|
221 | -# setsebool -P named_write_master_zones 1
|
|
222 | -```
|
|
225 | +## named
|
|
226 | +- 外部ドメインの名前解決に失敗する(検索結果のキャッシュに失敗している)
|
|
227 | + ```
|
|
228 | + # setsebool -P named_write_master_zones 1
|
|
229 | + ```
|
|
223 | 230 | |
224 | -- smbd
|
|
225 | - - ユーザホームディレクトリのアクセスを許可
|
|
226 | -```
|
|
227 | -# setsebool -P samba_enable_home_dirs 1
|
|
228 | -```
|
|
229 | - - 共有フォルダの読み書きを許可
|
|
230 | -```
|
|
231 | -# setsebool -P samba_export_all_rw 1
|
|
232 | -```
|
|
231 | +## smbd
|
|
232 | +- ユーザホームディレクトリのアクセスを許可
|
|
233 | + ```
|
|
234 | + # setsebool -P samba_enable_home_dirs 1
|
|
235 | + ```
|
|
236 | +- 共有フォルダの読み書きを許可
|
|
237 | + ```
|
|
238 | + # setsebool -P samba_export_all_rw 1
|
|
239 | + ```
|
|
233 | 240 | |
234 | 241 | # ポート設定
|
235 | 242 | - 許可ポート確認 (POPの場合)
|
236 | -```
|
|
237 | -# semanage port -l | grep pop_port_t
|
|
238 | -```
|
|
243 | + ```
|
|
244 | + # semanage port -l | grep pop_port_t
|
|
245 | + ```
|
|
239 | 246 | - 許可ポート追加 (POPの場合)
|
240 | -```
|
|
241 | -# semanage port -a -t pop_port_t -p tcp <追加ポート>
|
|
242 | -```
|
|
247 | + ```
|
|
248 | + # semanage port -a -t pop_port_t -p tcp <追加ポート>
|
|
249 | + ```
|
|
243 | 250 | |
244 | 251 | # コンテキスト設定
|
245 | 252 | - /var/www/html, /var/www/cgi-bin 以外にコンテンツを配置する場合、ディレクトリに適切なタイプを設定する必要がある。
|
253 | +- コンテキスト確認
|
|
254 | + ```
|
|
255 | + # ls -lZ
|
|
256 | + ```
|
|
246 | 257 | - 静的コンテンツ
|
247 | -```
|
|
248 | -# chcon -R -t httpd_sys_content_t <ディレクトリ>
|
|
249 | -```
|
|
258 | + ```
|
|
259 | + # chcon -R -t httpd_sys_content_t <ディレクトリ>
|
|
260 | + ```
|
|
250 | 261 | - 動的コンテンツ
|
251 | -```
|
|
252 | -# chcon -R -t httpd_sys_script_exec_t <ディレクトリ>
|
|
253 | -```
|
|
262 | + ```
|
|
263 | + # chcon -R -t httpd_sys_script_exec_t <ディレクトリ>
|
|
264 | + ```
|
|
254 | 265 | - シンボリックリンクに対してコンテキストの変更を行うと、デフォルトではリンク先のコンテキストが変更される。
|
255 | 266 | シンボリックリンク自体のコンテキストを変更するには「--no-dereference」を指定する。
|
256 | -```
|
|
257 | -# chcon --no-dereference -t httpd_sys_script_exec_t <シンボリックリンク>
|
|
258 | -```
|
|
259 | -- コンテキスト確認
|
|
260 | -```
|
|
261 | -# ls -lZ
|
|
262 | -```
|
|
267 | + ```
|
|
268 | + # chcon --no-dereference -t httpd_sys_script_exec_t <シンボリックリンク>
|
|
269 | + ```
|
|
263 | 270 | |
264 | 271 | # バグ
|
265 | 272 | ## ps コマンドが /proc/<pid> にアクセスしようとしてブロックされる
|
266 | 273 | - ログ例
|
267 | -```
|
|
268 | -type=AVC msg=audit(xxx.xxx:xxx): avc: denied { getattr } for pid=xxx comm="ps" path="/proc/<pid>" dev=proc
|
|
269 | - ino=xxx scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=dir
|
|
270 | -```
|
|
274 | + ```
|
|
275 | + type=AVC msg=audit(xxx.xxx:xxx): avc: denied { getattr } for pid=xxx comm="ps" path="/proc/<pid>" dev=proc
|
|
276 | + ino=xxx scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=dir
|
|
277 | + ```
|
|
271 | 278 | - sealert 分析結果
|
272 | -```
|
|
273 | -ps に、 <pid> directory の getattr アクセスがデフォルトで許可されるべきです。
|
|
274 | -```
|
|
279 | + ```
|
|
280 | + ps に、 <pid> directory の getattr アクセスがデフォルトで許可されるべきです。
|
|
281 | + ```
|
|
275 | 282 | - [Bug 982205 – SELinux is preventing /usr/bin/ps from 'getattr' accesses on the directory /proc/<pid>.](https://bugzilla.redhat.com/show_bug.cgi?id=982205)
|
276 | 283 | |
277 | 284 | # リンク
|