CentOS 6 SELinux のアクセス制限を有効にした時の追加設定

---------------------------------------------------------------------------------

SELinux を enforcing(アクセス制限を有効)にすると SELinux のポリシーとし規定され
た制御条件に従ってアクセス制御が実施され、ポリシーに違反したアクションは拒否され
エラーになりログが出力されます。 
SELinux の制御を有効にすると外部からのアクセスに対するファイル改竄等に対する防御
が向上するので私のサーバ機も SELinux 有効で稼働させています。

---------------------------------------------------------------------------------

1. ここで念のため SELinux の状態確認をして置きます。
    コマンドは、 getenforce です。

    Permissive      <---- アクセス制御が無効(エラーログは出力)になっています。

    に成っているはずです。

2. SELinux の各種設定するコマンド(semanage)が標準ではインストールされていません。
   semanage コマンドは、下記パッケージ policycoreutils-python に含まれているので
   yum コマンドでインストールします。

    yum -y install policycoreutils-python

   下記の様に表示し、完了します。
   ------------------------------------------------------------------------------
   インストール:
     policycoreutils-python.x86_64 0:2.0.83-30.1.el6_8

   依存性関連をインストールしました:
     audit-libs-python.x86_64 0:2.4.5-6.el6
     libsemanage-python.x86_64 0:2.0.43-5.1.el6
     setools-libs.x86_64 0:3.3.7-4.el6
     setools-libs-python.x86_64 0:3.3.7-4.el6
         (時間がかかる しばらく待つ)
   完了しました!
   ------------------------------------------------------------------------------

2. SELinux が有効としている ssh の Portを下記コマンドで確認します。

    semanage port -l| grep ssh

    ssh_port_t                     tcp      22

4. SELinux に Port 2222 を semanage コマンドで追加します。

    semanage port -a -t ssh_port_t -p tcp 2222

    再度、SELinux が有効としている ssh の Portを確認します。

    semanage port -l| grep ssh
         (時間がかかる しばらく待つ)
    ssh_port_t                     tcp      2222, 22

    Port 2222 が追加されています。

   ※ 参考情報 ※ 使わなくなった22番ポートを削除しようとしても、システムに標準で
                  定義されているため、削除はできないようです。

5. FFFTP、apache、ftp が SELinux 有効下で使用できるかの確認

  5-1 FFFTP の Port 確認
        下記コマンドを入力します。

        semanage port -l| grep ftp

        ftp_data_port_t                tcp      20
        ftp_port_t                     tcp      21, 989, 990
        ftp_port_t                     udp      989, 990
        tftp_port_t                    udp      69

        上記の通り Port 21 が有効になっています。

  5-2 apache Port 確認
        下記コマンドを入力します。

        semanage port -l| grep http

        http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
        http_cache_port_t              udp      3130
        http_port_t                    tcp      80, 81, 443, 488, 8008,……
        pegasus_http_port_t            tcp      5988
        pegasus_https_port_t           tcp      5989

        上記の通り port 80 が有効になっています。

  5-3  apache ドキュメントルートの確認

        apache HTTPサーバーでのドキュメントルートはデフォルトで /var/www/html/
         に設定されています。
        ドキュメントルートが、/var/www/html/ の場合は、このままでOKです。

        ls -dZ /var/www/html/

  drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

  5-4  このままでは、外部(ftp, FFFTP)から /home と /var をアクセスできないので
       アクセスできるように
       変更します。方法は、ふたつあります。

方法 1 SELinux を一時的に現在の状態を Enforcing から Permissive に変更する。

        コマンド getenforce で現在の状態を確認します。

        Enforcing

        この状態をコマンド setenforce 0 で Permissive に変更します。

        コマンド getenforce で状態を確認します。

        Permissive に成っているはずです。これで、アクセスが可能になります。

        元の状態に戻すには、コマンド setenforce 1 で行います。

    方法 2 SELinux の設定を変えてアクセス可能にする。

        ftp 関連の初期状態の確認 : コマンド getsebool -a | grep ftp で行います。

        allow_ftpd_anon_write --> off
        allow_ftpd_full_access --> off  <---- 変更箇所は、ここです
        allow_ftpd_use_cifs --> off
        allow_ftpd_use_nfs --> off
        ftp_home_dir --> off
        ftpd_connect_db --> off
        ftpd_use_fusefs --> off
        ftpd_use_passive_mode --> off
        httpd_enable_ftp_server --> off
        tftp_anon_write --> off
        tftp_use_cifs --> off
        tftp_use_nfs --> off

        設定値の変更は、下記コマンドで行います。

        setsebool -P allow_ftpd_full_access 1  <---- 1 or on

        変更には、チョット時間がかかります。
        変更されたか確認します。

        getsebool allow_ftpd_full_access

        allow_ftpd_full_access --> on  <---- デフォルト値 off が on になりました。

        これで、FFFTP でフルアクセスできるようになり、ftp でのデータ転送も受付さ
        れるようになりました。  
        但し、サーバ運用時は、フルアクセス禁止にしておく事を進めます。

        フルアクセスを禁止するコマンドは、下記の通りです。

        setsebool -P allow_ftpd_full_access 0  <---- ftpd_full_access の欄が
                                                       off になります。

        私は、方法 1 でサーバにアクセスする時に一時的に変更して運用しています。

6. ここで SELinux 有効( Enforcing )で Tera Term, FFFTP にログインできる事を確
   認します。SELinux を制御有効にして再起動します。
   ( FFFTPの確認の前に FTPサーバをインストールしておいてください。)
   なお、allow_ftpd_full_access --> off は、 on にしておきます。

        setsebool -P allow_ftpd_full_access 1    <---- off ⇒ on 
        vi /etc/sysconfig/selinux  ---->   permissive ⇒ enforcing に変更する。
        reboot

   再起動したら  Tera Term が Port 2222 でログインできるかと FFFTP でサーバ機の
   ファイルが見られるかを確認します。

7. SELinux を有効にした時の apache2 のポリシー設定

   apache2 のポリシー設定については、「CentOS-7-x86_64-DVD.iso インストールとサ
   ーバ構築」の「10-2. SELinux を有効にした時の apache2 のポリシー設定」で詳細
   を解説しています。