www.smiyasaka.com は、 2022 年 11月から Oracle LInux 8.X にOSを変更しました。

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



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

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


私の場合、Enforcing ままで総てを設定しています。

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

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

に成っているはずです。

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

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

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

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

   「ベース」と「その他の開発」を yum groupinstall でインストールします。

   パッケージ数は、「ベース」+「その他の開発」: 794個位です。

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


  
yum -y groupinstall "Base" "Additional Development"


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


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

※※ 参考情報 ※※ Minimal でインストールした時には、"Development" を追加してください。

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

  
ここからは、windows PC から、port 22 でログインして設定した方が楽です。

  
vi /etc/ssh/sshd_config

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

   sed コマンドでは、下記のようになります。

  
sed -i 's/#Port 22/ Port 2222/g' /etc/ssh/sshd_config

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

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

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

  
firewall-cmd --reload

   success と表示したら OKです。

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

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


7. SELinux の各種設定するコマンド( semanage )をインストールします。

semanage コマンドは、下記パッケージ policycoreutils-python に含まれているので yum コマンドでインストールします。


  
yum -y install policycoreutils-python

   下記の様に表示し、完了します。

  ------------------------------------------------------------------
  インストール:
   policycoreutils-python.x86_64 0:2.5-17.1.el7

   依存性関連をインストールしました:
   audit-libs-python.x86_64 0:2.7.6-3.el7  checkpolicy.x86_64 0:2.5-4.el7
   libcgroup.x86_64 0:0.41-13.el7   libsemanage-python.x86_64 0:2.5-8.el7
   python-IPy.noarch 0:0.75-6.el7   setools-libs.x86_64 0:3.3.8-1.1.el7

  完了しました!
  ------------------------------------------------------------------
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, ……
   pegasus_http_port_t    tcp   5988
   pegasus_https_port_t   tcp   5989

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

10-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/

10-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 で行います。

   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. 事前にダウンロードするファイル一覧と探し方 ] からの手順で設定してください

^