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, 9000

Web サーバーが待ち受けてよいポートの一覧を見ます。

$ 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))。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、ゴールド以上のプランで遊べます。

Linux サーバー構築のコマンド一覧(LinuC レベル2 の範囲)へ戻る