CentOS 8 SELinux のアクセス制限を有効にした時の設定手順


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

※※ 注意 ※※
      システム構築中に直接 SELinux 設定ファイルを変更をしないようにしてください。
      システムが再起動しなくなります。
      SELinux のアクセス制限の解除は、コマンド setenforce 0 で簡単に行えます。

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

    Enforcing      <---- アクセス制御が有効になっています。

    に成っているはずです。

    確認したら SELinux の制御モードを enforcing から permissive に変更してアク
    セス制御無効にします。( 完全に無効にするのではなく、SELinux のアクセス制御ポ
    リシーデータを有効にするために permissive にします。)

    コマンドは、 vi /etc/sysconfig/selinux です。

    SELINUX=enforcing  ----> SELINUX=permissive に変更。

2. 不足パッケージのインストール

    「ベース」と「その他の開発」を dnf groupinstall でインストールします。
    パッケージ数は、「ベース」+「その他の開発」: 516個位です。

※※ 注意 ※※ 
     yum -y update を先にすると Base のインストールがエラーになりますので注意して
     ください。
     つまり、カーネルのバージョンを先に最新バージョンにしないことです。)

   dnf -y groupinstall "Base" "Additional Development"

   groupinstall は、時間がかかるので、追加処理として update 後、シャットダウン
   するコマンドを追加して勝手に終了するのを待ちます。

dnf -y groupinstall "Base" "Additional Development" && dnf -y update && poweroff

---------------------------------------------------------------------------------
3. 再起動後 ssh の Port を 22 → 2222 に変更します。

    vi /etc/ssh/sshd_config

    #Port 22 の # を削除して 22を追加して Port 2222 する。

4. firewall に Port 2222 を追加します。

    firewall-cmd --add-port=2222/tcp --permanent

    success と表示したら OKです。次に上記コマンドを有効にします。

    firewall-cmd --reload

    success と表示したら OKです。

5. コマンド poweroff を入力して再起動します。

---------------------------------------------------------------------------------
6. 再起動後リモート制御する PC の Tera Term から Port 2222 でログインします。まだ、
   SELinux は、アクセス制御無効なので問題なくログインできるはずです。

7. SELinux の各種設定するコマンド semanage は、CentOS 8 では、デフォルトでインス
   トールされています。

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

    semanage port -l| grep ssh

    ssh_port_t                     tcp      22

9. 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番ポートを削除しようとしても、システムに標準で
                  定義されているため、削除はできないようです。

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

  10-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 が有効になっています。

  10-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 が有効になっています。

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

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

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

        Enforcing

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

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

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

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

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

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

        ftpd_anon_write --> off
        ftpd_connect_all_unreserved --> off
        ftpd_connect_db --> off
        ftpd_full_access --> off  <---- 変更箇所は、ここです
        ftpd_use_cifs --> off
        ftpd_use_fusefs --> off
        ftpd_use_nfs --> off
        ftpd_use_passive_mode --> off
        httpd_can_connect_ftp --> off
        httpd_enable_ftp_server --> off
        tftp_anon_write --> off
        tftp_home_dir --> off

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

        setsebool -P ftpd_full_access 1  <---- 1 or on

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

        getsebool ftpd_full_access

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

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

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

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

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

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

        setsebool -P ftpd_full_access 1    ----> off ⇒ on 
        setenforce 1  ---->   permissive ⇒ enforcing に変更する。
        reboot

    再起動したら、SELinux 有効下で Tera Term が Port 2222 でログインできるかと
     FFFTP でサーバ機のファイルが見られるかを確認します。
    以上の設定で、私が構築しているサーバ機は、SELinux アクセス制御有効で動作し
    ています。

12. 以上で SELinux の設定は、終わりです [ 3. 事前にダウンロードするファイル一
    覧と探し方 ] からの手順で設定してください