プロジェクト

全般

プロフィール

SELinux

コマンド

chcon

ファイルのSELinuxコンテキストを一時的に変更します。再ラベル付けされるかrestoreconコマンドが実行されるとchconで指定した内容が失われます。

使用方法

  • ファイルまたはディレクトリに対して設定
    ~$ chcon -t httpd_sys_content_t /var/lib/svn
  • ディレクトリ以下に再帰的に設定
    ~$ chcon -R -t httpd_sys_content_t /var/lib/svn

semanage fcontext

ファイルのSELinuxコンテキストを永続的に変更します。
変更内容は、/etc/selinux/targeted/contexts/files/file_contexts に反映されます。新規ファイル・ディレクトリに対してコマンドを実行したときは、file_contexts.local に反映されます。

使用方法

~$ sudo semanage fcontext -a -t httpd_sys_context_t /var/lib/svn
~$ sudo restorecon -v /var/lib/svn

新規作成のファイル及びディレクトリは親ディレクトリのSELinuxタイプを引き継ぎます。
しかし、既に作成されたディレクトリについては後から引継ぎはできないので、次のように正規表現でパターンを指定します。

~$ sudo semanage fcontext -a -t httpd_sys_context_t "/var/lib/svn(/.*)?" 
~$ sudo restorecon -R -v /var/lib/svn

※ 細部要確認

メモ集

httpd関係

httpdからの読み書き

~$ getsebool httpd_unified
httpd_unified --> on

のとき、httpd_sys_content_t は、httpdからの読み書きが可能です。

指定したディレクトリ以下をhttpdで読み書き可能としたい

例えば、/var/lib/svn以下にあるリポジトリをhttpdで読み書きする場合、/var/libにはhttpdのアクセスが設定されていないのでそのままでは書き込み時にエラーとなります。

~$ sudo semanage fcontext -a -t httpd_sys_content_t '/var/lib/svn(/.*)?'
~$ sudo restorecon -R /var/lib/svn
  • 注)/var/lib/svn(/.*)? をシングルクォートではなくダブルクォートで囲むとエラーとなります(コマンドシェルが先に展開してしまうため)

ポート番号を80から変更したらhttpdが起動しない

# service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:8086
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:8086
no listening sockets available, shutting down
Unable to open logs

SELinuxが、httpdの利用可能なポートを管理しています。デフォルトでは次の中の"http_port_t"に記載されている、80, 81, 443, 488, 8008, 8009, 8443, 9000ポートが利用可能です。

# semanage port -l | grep http
http_cache_port_t              tcp      3128, 8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

ポートの追加は、semanageで可能です。

# semanage port -a -t http_port_t -p tcp 8086

クリップボードから画像を追加 (サイズの上限: 1 GB)