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