13.4. 設定例


以下の例は、SELinux が Apache HTTP サーバーを補完する方法と、Apache HTTP サーバーの完全な機能を維持する方法の実例を紹介します。

13.4.1. 静的サイトの実行

静的 Web サイトを作成するには、その Web サイトの .html ファイルに httpd_sys_content_t タイプのラベルを付けます。デフォルトでは、Apache HTTP サーバーは httpd_sys_content_t タイプのラベルが付けられたファイルに書き込みできません。以下の例では、読み取り専用の Web サイトのファイルを保存する新しいディレクトリーを作成します。
  1. root で mkdir ユーティリティーを使用して、最上位のディレクトリーを作成します。
    ~]# mkdir /mywebsite
    Copy to Clipboard Toggle word wrap
  2. root として /mywebsite/index.html ファイルを作成します。以下の内容を /mywebsite/index.html にコピーアンドペーストします。
    <html>
    <h2>index.html from /mywebsite/</h2>
    </html>
    
    Copy to Clipboard Toggle word wrap
  3. Apache HTTP サーバーが、/mywebsite/、およびその下のファイルとサブディレクトリーに読み取り専用でアクセスできるようにするには、ディレクトリーに httpd_sys_content_t タイプのラベルを付けます。root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。
    ~]# semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
    Copy to Clipboard Toggle word wrap
  4. restorecon ユーティリティーを root として使用し、ラベルを変更します。
    ~]# restorecon -R -v /mywebsite
    restorecon reset /mywebsite context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /mywebsite/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    
    Copy to Clipboard Toggle word wrap
  5. この例では、root として /etc/httpd/conf/httpd.conf ファイルを編集します。既存の DocumentRoot オプションをコメントアウトします。DocumentRoot "/mywebsite" オプションを追加します。編集後、これらのオプションは以下のようになります。
    #DocumentRoot "/var/www/html"
    DocumentRoot "/mywebsite"
    
    Copy to Clipboard Toggle word wrap
  6. root で以下のコマンドを入力して、Apache HTTP Server のステータスを確認します。サーバーが停止している場合は、起動します。
    ~]# systemctl status httpd.service
    httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
       Active: inactive (dead)
    
    Copy to Clipboard Toggle word wrap
    ~]# systemctl start httpd.service
    Copy to Clipboard Toggle word wrap
    サーバーが実行している場合は、root で以下のコマンドを実行してサービスを再起動します (httpd.confに加えた変更も適用されます)。
    ~]# systemctl status httpd.service
    httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
       Active: active (running) since Wed 2014-02-05 13:16:46 CET; 2s ago
    
    Copy to Clipboard Toggle word wrap
    ~]# systemctl restart httpd.service
    Copy to Clipboard Toggle word wrap
  7. Web ブラウザーを使用して http://localhost/index.html に移動します。以下が表示されます。
    index.html from /mywebsite/
    
    Copy to Clipboard Toggle word wrap

13.4.2. NFS および CIFS ボリュームの共有

デフォルトで、クライアント側の NFS マウントは、NFS ボリュームのポリシーで定義されたデフォルトのコンテキストでラベル付けされます。一般的なポリシーでは、このデフォルトのコンテキストは nfs_t タイプを使用します。また、デフォルトでは、クライアント側でマウントされた Samba 共有には、ポリシーで定義されたデフォルトのコンテキストのラベルが付けられます。一般的なポリシーでは、このデフォルトコンテキストはcifs_t タイプを使用します。
ポリシーの設定によっては、サービスが、nfs_t タイプまたは cifs_t タイプのラベルが付いたファイルを読み込めない場合があります。これにより、このタイプのラベルが付いたファイルシステムをマウントしてから、その他のサービスによる読み取りやエクスポートができなくなる可能性があります。ブール値を有効または無効にして、nfs_t タイプおよび cifs_t タイプへのアクセスを許可するサービスを制御できます。
httpd_use_nfs ブール値を有効にして、httpd が NFS ボリューム (nfs_t タイプのラベルが付いている) にアクセスし、共有できるようにします。
~]# setsebool -P httpd_use_nfs on
Copy to Clipboard Toggle word wrap
httpd_use_cifs ブール値を有効にして、httpd が CIFS ボリューム (cifs_t の種類のラベルが付いている) にアクセスし、共有できるようにします。
~]# setsebool -P httpd_use_cifs on
Copy to Clipboard Toggle word wrap
注記
再起動後も、setsebool の変更を保持したくない場合は、-P オプションを使用しないでください。

13.4.3. サービス間でのファイルの共有

Type Enforcement は、プロセスが別のプロセスで使用することを目的としたファイルにアクセスするのを防ぐのに役立ちます。たとえば、Samba は、デフォルトでは、httpd_sys_content_t のタイプでラベルが付いたファイル (Apache HTTP サーバーが使用するファイル) を読み込むことができません。ファイルに public_content_t または public_content_rw_t のタイプのラベルが付けられている場合は、Apache HTTP サーバー、FTP、rsync、および Samba との間でファイルを共有できます。
以下の例では、ディレクトリーとファイルを作成し、Apache HTTP Server、FTP、rsync、および Samba でディレクトリーとファイルを共有 (読み取り専用) できるようにします。
  1. root で mkdir ユーティリティーを使用して、複数のサービス間でファイルを共有するための新しいトップレベルディレクトリーを作成します。
    ~]# mkdir /shares
    Copy to Clipboard Toggle word wrap
  2. file-context 設定のパターンに一致しないファイルおよびディレクトリーには、default_t タイプのラベルが付けられます。このタイプは、制限のあるサービスからはアクセスできません。
    ~]$ ls -dZ /shares
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /shares
    
    Copy to Clipboard Toggle word wrap
  3. root で、/shares/index.html ファイルを作成します。以下の内容を /shares/index.html にコピーアンドペーストします。
    <html>
    <body>
    <p>Hello</p>
    </body>
    </html>
    
    Copy to Clipboard Toggle word wrap
  4. public_content_t タイプでの /shares/ のラベル付けでは、Apache HTTP サーバー、FTP、rsync、および Samba による読み取り専用アクセスが許可されます。root で以下のコマンドを入力し、ラベルの変更を file-context 設定に追加します。
    ~]# semanage fcontext -a -t public_content_t "/shares(/.*)?"
    Copy to Clipboard Toggle word wrap
  5. restorecon ユーティリティーを root で使用し、ラベルの変更を適用します。
    ~]# restorecon -R -v /shares/
    restorecon reset /shares context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
    restorecon reset /shares/index.html context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
    
    Copy to Clipboard Toggle word wrap
Samba 経由で/shares/を共有するには、以下を行います。
  1. samba パッケージ、samba-common パッケージ、および samba-client パッケージがインストールされていることを確認します (バージョン番号が異なる場合があります)。
    ~]$ rpm -q samba samba-common samba-client
    samba-3.4.0-0.41.el6.3.i686
    samba-common-3.4.0-0.41.el6.3.i686
    samba-client-3.4.0-0.41.el6.3.i686
    
    Copy to Clipboard Toggle word wrap
    これらのパッケージのいずれかがインストールされていない場合は、root で以下のコマンドを実行してインストールします。
    ~]# yum install package-name
    Copy to Clipboard Toggle word wrap
  2. /etc/samba/smb.conf を root で編集します。このファイルの下部に以下のエントリーを追加し、Samba で/shares/ ディレクトリーを共有します。
    [shares]
    comment = Documents for Apache HTTP Server, FTP, rsync, and Samba
    path = /shares
    public = yes
    writable = no
    
    Copy to Clipboard Toggle word wrap
  3. Samba ファイルシステムをマウントするには、Samba アカウントが必要です。root で次のコマンドを入力して、Samba アカウントを作成します。username は、既存の Linux ユーザーです。たとえば、smbpasswd -a testuser は、Linux testuser ユーザーの Samba アカウントを作成します。
    ~]# smbpasswd -a testuser
    New SMB password: Enter a password
    Retype new SMB password: Enter the same password again
    Added user testuser.
    
    Copy to Clipboard Toggle word wrap
    上記のコマンドを実行し、システムに存在しないアカウントのユーザー名を指定すると、Cannot locate Unix account for 'username'! エラーが発生します。
  4. Samba サービスを再起動します。
    ~]# systemctl start smb.service
    Copy to Clipboard Toggle word wrap
  5. 利用可能な共有をリスト表示するには、次のコマンドを入力します。username は、手順 3 で追加した Samba アカウントです。パスワードを求められたら、手順 3 で Samba アカウントに割り当てたパスワードを入力します (バージョン番号は異なる場合があります)。
    ~]$ smbclient -U username -L localhost
    Enter username's password:
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Sharename       Type      Comment
    ---------       ----      -------
    shares          Disk      Documents for Apache HTTP Server, FTP, rsync, and Samba
    IPC$            IPC       IPC Service (Samba Server Version 3.4.0-0.41.el6)
    username        Disk      Home Directories
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Server               Comment
    ---------            -------
    
    Workgroup            Master
    ---------            -------
    
    Copy to Clipboard Toggle word wrap
  6. mkdir ユーティリティーを使用して、新しいディレクトリーを作成します。このディレクトリーは、shares の Samba 共有をマウントするために使用されます。
    ~]# mkdir /test/
    Copy to Clipboard Toggle word wrap
  7. root で次のコマンドを入力して、shares の Samba 共有を /test/ にマウントし、username を、手順 3 のユーザー名に置き換えます。
    ~]# mount //localhost/shares /test/ -o user=username
    Copy to Clipboard Toggle word wrap
    手順 3 で設定した username のパスワードを入力します。
  8. Samba で共有されているファイルの内容を表示します。
    ~]$ cat /test/index.html
    <html>
    <body>
    <p>Hello</p>
    </body>
    </html>
    
    Copy to Clipboard Toggle word wrap
Apache HTTP サーバー経由で /shares/ を共有するには、次のコマンドを実行します。
  1. httpd パッケージがインストールされていることを確認します (バージョン番号が異なる場合があります)。
    ~]$ rpm -q httpd
    httpd-2.2.11-6.i386
    
    Copy to Clipboard Toggle word wrap
    このパッケージがインストールされていない場合は、root で yum ユーティリティーを使用してインストールします。
    ~]# yum install httpd
    Copy to Clipboard Toggle word wrap
  2. /var/www/html/ ディレクトリーに変更します。root で以下のコマンドを入力し、/shares/ ディレクトリーへのリンク (名前は shares) を作成します。
    html]# ln -s /shares/ shares
    Copy to Clipboard Toggle word wrap
  3. Apache HTTP サーバーを起動します。
    ~]# systemctl start httpd.service
    Copy to Clipboard Toggle word wrap
  4. Web ブラウザーを使用して http://localhost/shares に移動します。/shares/index.htmlが表示されます。
デフォルトでは、index.html ファイルが存在する場合は読み込まれます。/shares/index.html がなく、代わりに file1file2、および file3 があった場合は、http://localhost/shares へのアクセス時にディレクトリーのリストが表示されます。
  1. index.html ファイルを削除します。
    ~]# rm -i /shares/index.html
    Copy to Clipboard Toggle word wrap
  2. touch ユーティリティーを root で使用し、/shares/ に 3 つのファイルを作成します。
    ~]# touch /shares/file{1,2,3}
    ~]# ls -Z /shares/
    -rw-r--r--  root root system_u:object_r:public_content_t:s0 file1
    -rw-r--r--  root root unconfined_u:object_r:public_content_t:s0 file2
    -rw-r--r--  root root unconfined_u:object_r:public_content_t:s0 file3
    
    Copy to Clipboard Toggle word wrap
  3. root で以下のコマンドを入力して、Apache HTTP サーバーのステータスを確認します。
    ~]# systemctl status httpd.service
    httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
       Active: inactive (dead)
    
    Copy to Clipboard Toggle word wrap
    サーバーが停止している場合は、起動します。
    ~]# systemctl start httpd.service
    Copy to Clipboard Toggle word wrap
  4. Web ブラウザーを使用して http://localhost/shares に移動します。ディレクトリーのリストが表示されます。

13.4.4. ポート番号の変更

ポリシー設定によっては、サービスは特定のポート番号でのみ実行できます。ポリシーを変更せずにサービスが実行するポートを変更しようとすると、サービスが起動できなくなる可能性があります。semanage ユーティリティーを使用して、root ユーザーに、SELinux が httpd でリッスンできるポートをリスト表示します。
~]# semanage port -l | grep -w http_port_t
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443
Copy to Clipboard Toggle word wrap
標準設定では、httpd は TCP ポート 80、443、488、8008、8009、または 8443 でリッスンできます。/etc/httpd/conf/httpd.conf が、http_port_t に登録されていないポートで httpd がリッスンするように設定されていると、httpd が起動できません。
httpd を TCP ポート 80、443、488、8008、8009、または 8443 以外のポートで実行するように設定するには、次のコマンドを実行します。
  1. /etc/httpd/conf/httpd.conf ファイルを root で編集し、Listen オプションに httpd の SELinux ポリシーで設定されていないポートのリストが表示されるようにします。以下の例では、httpd が 10.0.0.1 IP アドレスおよび TCP ポート 12345 でリッスンするように設定します。
    # Change this to Listen on specific IP addresses as shown below to 
    # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
    #
    #Listen 12.34.56.78:80
    Listen 10.0.0.1:12345
    
    Copy to Clipboard Toggle word wrap
  2. root ユーザーになり、次のコマンドを実行して、SELinux ポリシー設定にポートを追加します。
    ~]# semanage port -a -t http_port_t -p tcp 12345
    Copy to Clipboard Toggle word wrap
  3. ポートが追加されたことを確認します。
    ~]# semanage port -l | grep -w http_port_t
    http_port_t                    tcp      12345, 80, 443, 488, 8008, 8009, 8443
    
    Copy to Clipboard Toggle word wrap
ポート 12345 で httpd を実行しなくなった場合は、root で semanage ユーティリティーを使用し、ポリシー設定からポートを削除します。
~]# semanage port -d -t http_port_t -p tcp 12345
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat