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
# リンク