semanage の使い方
SELinux のポリシー設定
書き方
sudo semanage port -a -t http_port_t -p tcp 番号 sudo semanage fcontext -a -t タイプ 'パス(/.*)?' semanage port -l
Web サーバーに標準以外のポートを使わせるときや、独自の場所にラベルの規則を足すときに使います。
よく使うオプション
| オプション | 意味 |
|---|---|
port -l | ポートとタイプの対応の一覧を出す |
port -a -t タイプ -p tcp 番号 | ポートにタイプを付ける(Web サーバーに 8080 番を使わせるなど) |
fcontext -a -t タイプ 'パス(/.*)?' | 場所とラベルの規則を足す(restorecon で反映) |
fcontext -l | 場所とラベルの規則の一覧を出す |
-d | 足した規則を消す(-a の代わりに使う) |
boolean -l | スイッチ(ブール値)の一覧を、説明つきで出す |
例
$ sudo semanage port -l | grep -w http_port_thttp_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000Web サーバーが待ち受けてよいポートの一覧を見ます。
$ sudo semanage port -a -t http_port_t -p tcp 8088
8088 番を Web サーバー用のポートとして足します。httpd を 8088 番で動かしたいときに要ります。
$ sudo semanage fcontext -a -t httpd_sys_content_t '/srv/web(/.*)?'
/srv/web とその中を Web の公開用のラベルにする規則を足します。規則を足しただけではラベルは変わりません。
$ sudo restorecon -R -v /srv/web
足した規則のとおりに、実際のラベルを付け直します。
よくある間違い・注意
- fcontext のパスは '…' で囲みます。囲まないと (/.*)? をシェルが解釈してしまいます。
- すでに別のタイプが付いているポートに -a するとエラーになります。そのときは -m(変える)を使います。
- semanage は policycoreutils-python-utils のパッケージに入っています。無いときは dnf で入れます。
実際に打って練習する
Linux レベル2 コースの Lv8「結界の掟 semanage」で覚えます(第1章 結界(firewalld と SELinux))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、ゴールド以上のプランで遊べます。