CentOS8 をインストールして遊んでみる

WPサイト引っ越し(2018/11/20)|Ewig Leere(Lab)の記事を参考にCentOS8の環境を作ってみたのでメモ。

1. インストール

  • インストール言語
    • 日本語
    • 日本語 (日本)
  • インストール設定
    • 地域設定
      • 時刻と日付
        • デフォルトがアメリカ大陸/ニューヨーク タイムゾーン」になっているので「アジア/東京 タイムゾーン」に変更
    • ソフトウェア
      • ソフトウェアの選択
        • 最小限のインストール
          • 標準
          • 開発ツール
          • ネットワークサーバー
    • システム
      • インストール先
        • 既存パーティションを全削除してパーティションを自動作成
          • /home: 自動作成された容量から100GB削減
          • /: homeの分を増量
      • ネットワークとホスト名
        • トグルを「オン」にして使用する状態に
        • 「設定」
          • 「全般」タブ
            • この接続が利用可能になったときに自動的に接続する
          • 「IPv6 設定」
            • 方式: 無視する
    • 「インストール開始」
  • rootパスワード設定
  • ユーザ追加

インストール完了後、再起動。

以下、sshで接続して設定作業。

2. バージョン確認

# cat /etc/redhat-release
CentOS Linux release 8.1.1905 (Core)

3. アップデート

# dnf update
CentOS-8 - AppStream                            1.0 MB/s | 6.4 MB     00:06

## 略

完了しました!
# dnf upgrade
メタデータの期限切れの最終確認: 0:19:29 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
依存関係が解決しました。
行うべきことはありません。
完了しました!

OK。

4. SELINUX

鎮まり給え。

# getenforce
Enforcing
# vi /etc/sysconfig/selinux

#SELINUX=enforcing
SELINUX=disabled    #変更

一度再起動し、再度状態確認。

# getenforce
Disabled

鎮まりました。

5. Firewall

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enpXXX
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

初期状態を確認。httpとhttpsを追加。

# firewall-cmd --add-port=80/tcp --permanent
success
# firewall-cmd --add-port=443/tcp --permanent
success

続いてリロード。

# firewall-cmd --reload
success

再度確認。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enpXXX
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 80/tcp 443/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

OK。

6. chrony

CentOS8ではntpからchronyに変更になりました。CentOS7では別途インストールしていましたが、今回はインストールせずに設定だけ。

# vi /etc/chrony.conf
#pool 2.centos.pool.ntp.org iburst
pool ntp.jst.mfeed.ad.jp iburst    #変更
# chronyc sources
506 Cannot talk to daemon

あれ、起きていない?

# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor pr
   Active: inactive (dead)
     Docs: man:chronyd(8)
           man:chrony.conf(5)
...skipping...
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor pr
   Active: inactive (dead)
     Docs: man:chronyd(8)
           man:chrony.conf(5)

眠っているので起こします。目覚めよchronyのパウアー。

# systemctl start chronyd
# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor pr
   Active: active (running) since WWW YYYY-mm-dd hh:ii:ss JST; 1s ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 5991 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=ex
  Process: 5987 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUC
 Main PID: 5989 (chronyd)
    Tasks: 1 (limit: 26213)
   Memory: 1.8M
   CGroup: /system.slice/chronyd.service
           mq5989 /usr/sbin/chronyd

ついでに起動時に自動起動するように変更しておきましょう。

# systemctl enable chronyd
Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service →
usr/lib/systemd/system/chronyd.service.
# chronyc sources
210 Number of sources = 3
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp2.jst.mfeed.ad.jp          2   6    17     4  -2711us[-2711us] +/-   65ms
^- ntp3.jst.mfeed.ad.jp          2   6    17     3    -12us[  -12us] +/-   78ms
^* ntp1.jst.mfeed.ad.jp          2   6    17     4  -9601ns[+1430us] +/-   50ms

これで確認もOK。

7. リポジトリ追加

続いてepelremiを追加します。

# dnf -y install epel-release

## 略

完了しました!
# dnf -y update

## 略

完了しました!
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-8.rpm
http://rpms.famillecollet.com/enterprise/remi-release-8.rpm を取得中
## 略
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:remi-release-8.1-1.el8.remi      ################################# [100%]

# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

OK。

# vi /etc/yum.repos.d/remi.repo

[remi]
enabled=1

リポジトリ有効化。

ちなみに

# ls /etc/yum.repos.d/
CentOS-AppStream.repo  CentOS-Extras.repo      CentOS-Sources.repo     epel-modular.repo          epel.repo
CentOS-Base.repo       CentOS-HA.repo          CentOS-Vault.repo       epel-playground.repo       remi-modular.repo
CentOS-CR.repo         CentOS-Media.repo       CentOS-centosplus.repo  epel-testing-modular.repo  remi-safe.repo
CentOS-Debuginfo.repo  CentOS-PowerTools.repo  CentOS-fasttrack.repo   epel-testing.repo          remi.repo

PHPをインストールしたいのでremi-php74.repoがあってほしいのですが、見当たらず。検索しても特にヒットしないのでスルー(結果として、予想通りPHPのところで手戻り発生)。

8. Apache

# dnf -y install httpd-devel

## 略

完了しました!
# dnf -y install mod_ssl

## 略

完了しました!
# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
# systemctl start httpd

起動・自動起動もOK。

# mv -i /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/autoindex.conf.org
# mv -i /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/userdir.conf.org
# mv -i /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org

いらない設定を読み込まないように。

# systemctl restart httpd
#

OK。

9. PHP (remiリポジトリ指定だと7.2が入るので注意)

# dnf info php74 --enablerepo=remi,remi-php74
エラー: 不明な repo : 'remi-php74'

一応確認コマンドはあるのですが、上述の通りremi-php74は存在しないので……うーん。

# dnf info php74 --enablerepo=remi
メタデータの期限切れの最終確認: 0:00:13 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
利用可能なパッケージ
名前         : php74
バージョン   : 1.0
リリース     : 1.el8.remi
Arch         : x86_64
サイズ       : 6.6 k
ソース       : php74-1.0-1.el8.remi.src.rpm
リポジトリー : remi
概要         : Package that installs PHP 7.4
ライセンス   : GPLv2+
説明         : This is the main package for php74 Software Collection,
             : that install PHP 7.4 language.

名前         : php74
バージョン   : 1.0
リリース     : 1.el8.remi
Arch         : x86_64
サイズ       : 6.6 k
ソース       : php74-1.0-1.el8.remi.src.rpm
リポジトリー : remi-safe
概要         : Package that installs PHP 7.4
ライセンス   : GPLv2+
説明         : This is the main package for php74 Software Collection,
             : that install PHP 7.4 language.

remiリポジトリのみにすると通る。行けるか?

# dnf -y install php php-devel php-pdo php-mysqlnd php-mbstring php-gd php-pear php-pecl-apc-devel zlib-devel php-xml php-mcrypt
メタデータの期限切れの最終確認: 0:01:58 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
一致した引数がありません: php-mcrypt
エラー: 一致するものが見つかりません: php-mcrypt

あら、php-mcrypt見付からず。仕方ないので削って再度実行。

# dnf -y install php php-devel php-pdo php-mysqlnd php-mbstring php-gd php-pear php-pecl-apc-devel zlib-devel php-xml

## 略

完了しました!

できました。

# php -v
PHP 7.2.11 (cli) (built: Oct  9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

げ、デフォルトの7.2が入ってしまいました……。

# dnf remove php

## 略

完了しました!

# dnf module reset php

## 略

依存関係が解決しました。
=========================================================================================================================
 パッケージ                  アーキテクチャー           バージョン                     リポジトリー                サイズ
=========================================================================================================================
モジュールの再設定:
 php

トランザクションの概要
=========================================================================================================================

これでよろしいですか? \[y/N\]: y
完了しました!

とりあえずアンインストールとリセットを試します。

# php -v
PHP 7.2.11 (cli) (built: Oct  9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

あるぇ~?

# dnf module install -y php:remi-7.4
メタデータの期限切れの最終確認: 0:09:37 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
エラー:
 問題 1: package php-devel-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 requires php-cli(x86-64) = 7.2.11-2.module_el8.1.0+209+03b9a8ff, but none of the providers can be installed
  - cannot install both php-cli-7.4.3-1.el8.remi.x86_64 and php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64
  - problem with installed package php-devel-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64
  - cannot install the best candidate for the job
  - package php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-devel-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-devel-7.3.5-3.module_el8.1.0+252+0d4e049c.x86_64 is excluded
  - package php-devel-7.2.27-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.2.27-1.el8.remi.x86_64
  - package php-devel-7.2.28-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.2.28-1.el8.remi.x86_64
  - package php-devel-7.3.14-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.3.14-1.el8.remi.x86_64
  - package php-devel-7.3.15-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.3.15-1.el8.remi.x86_64
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.4.2-1.el8.remi.x86_64
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.4.3-1.el8.remi.x86_64
 問題 2: problem with installed package php-pecl-apcu-devel-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64
  - package php-pecl-apcu-devel-5.1.17-5.el8.remi.7.4.x86_64 requires php-devel(x86-64), but none of the providers can be installed
  - package php-pecl-apcu-devel-5.1.18-1.el8.remi.7.4.x86_64 requires php-devel(x86-64), but none of the providers can be installed
  - package php-devel-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 requires php-cli(x86-64) = 7.2.11-2.module_el8.1.0+209+03b9a8ff, but none of the providers can be installed
  - package php-pecl-apcu-devel-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64 requires php-pecl-apcu(x86-64) = 5.1.12-2.module_el8.1.0+209+03b9a8ff, but none of the providers can be installed
  - package php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 requires php-common(x86-64) = 7.2.11-2.module_el8.1.0+209+03b9a8ff, but none of the providers can be installed
  - package php-pecl-apcu-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64 requires php(api) = 20170718-64, but none of the providers can be installed
  - package php-pecl-apcu-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64 requires php(zend-abi) = 20170718-64, but none of the providers can be installed
  - cannot install both php-common-7.4.3-1.el8.remi.x86_64 and php-common-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64
  - cannot install the best candidate for the job
  - package php-cli-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-common-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-devel-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-devel-7.3.5-3.module_el8.1.0+252+0d4e049c.x86_64 is excluded
  - package php-pecl-apcu-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-pecl-apcu-devel-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64 is excluded
  - package php-pecl-apcu-devel-5.1.17-1.module_el8.1.0+252+0d4e049c.x86_64 is excluded
  - package php-common-7.2.27-1.el8.remi.x86_64 is excluded
  - package php-common-7.2.28-1.el8.remi.x86_64 is excluded
  - package php-devel-7.2.27-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.2.27-1.el8.remi.x86_64
  - package php-devel-7.2.28-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.2.28-1.el8.remi.x86_64
  - package php-devel-7.3.14-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.3.14-1.el8.remi.x86_64
  - package php-devel-7.3.15-1.el8.remi.x86_64 is excluded
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.3.15-1.el8.remi.x86_64
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.4.2-1.el8.remi.x86_64
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.4.3-1.el8.remi.x86_64
  - package php-pecl-apcu-devel-5.1.17-1.el8.remi.7.2.x86_64 is excluded
  - package php-pecl-apcu-devel-5.1.17-2.el8.remi.7.3.x86_64 is excluded
  - package php-pecl-apcu-devel-5.1.18-1.el8.remi.7.2.x86_64 is excluded
  - package php-pecl-apcu-devel-5.1.18-1.el8.remi.7.3.x86_64 is excluded
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を 追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使 用しないでください)

まぁ、そうなるな。

# dnf module install -y php:remi-7.4 --allowerasing

## 略

アップグレード済み:
  php-cli-7.4.3-1.el8.remi.x86_64               php-common-7.4.3-1.el8.remi.x86_64     php-gd-7.4.3-1.el8.remi.x86_64
  php-mbstring-7.4.3-1.el8.remi.x86_64          php-mysqlnd-7.4.3-1.el8.remi.x86_64    php-pdo-7.4.3-1.el8.remi.x86_64
  php-pecl-apcu-5.1.18-1.el8.remi.7.4.x86_64    php-process-7.4.3-1.el8.remi.x86_64    php-xml-7.4.3-1.el8.remi.x86_64

インストール済み:
  php-fpm-7.4.3-1.el8.remi.x86_64                                            php-json-7.4.3-1.el8.remi.x86_64
  nginx-filesystem-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch             oniguruma-6.8.2-1.el8.x86_64

削除しました:
  php-devel-7.2.11-2.module_el8.1.0+209+03b9a8ff.x86_64  php-pecl-apcu-devel-5.1.12-2.module_el8.1.0+209+03b9a8ff.x86_64

完了しました!

置き換わったっぽいですね。

# php -v
PHP 7.4.3 (cli) (built: Feb 18 2020 11:53:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

OK。

エラーログ設定

# mkdir /var/log/php
# chown apache /var/log/php
# chmod 755 /var/log/php

ディレクトリを作成、権限設定。

# vi /etc/php.ini

;expose_php = On
expose_php = Off

;date.timezone =
date.timezone = 'Asia/Tokyo'

;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_DEPRECATED

;error_log = syslog
error_log = "/var/log/php/php_errors.log"

設定変更。

# systemctl restart httpd
#

OK。

10. MySQL

# dnf info mysql
メタデータの期限切れの最終確認: 0:27:25 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
利用可能なパッケージ
名前         : mysql
バージョン   : 8.0.17

MySQLのバージョン確認。そのまま行けそうなので行ってみます。

# dnf install @mysql:8.0

## 略

完了しました!
# mysql --version
mysql  Ver 8.0.17 for Linux on x86_64 (Source distribution)

OKです。

# systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
# systemctl start mysqld

起動・自動起動もOK。

# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

MySQLの初期設定。パスワードも設定。

# vi /etc/my.cnf

[mysqld]
slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1.0
log_timestamps=SYSTEM
skip-character-set-client-handshake

設定変更。

# systemctl restart mysqld
#

OK。

11. Webmin

# dnf -y install perl-Net-SSLeay
CentOS-8 - AppStream                                                                     8.0 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                                                          7.0 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                                                        2.9 kB/s | 1.5 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64                                   8.0 kB/s | 5.1 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                            28 kB/s |  10 kB     00:00
Remi's Modular repository for Enterprise Linux 8 - x86_64                                3.0 kB/s | 3.5 kB     00:01
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64                               1.4 kB/s | 3.0 kB     00:02
Remi's test RPM repository for Enterprise Linux 8 - x86_64                               2.8 kB/s | 3.0 kB     00:01
パッケージ perl-Net-SSLeay-1.88-1.el8.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!

あら、入っているのね。

# dnf -y install http://download.webmin.com/download/yum/webmin-1.941-1.noarch.rpm

## 略

完了しました!
# vi /etc/webmin/miniserv.conf

## 末尾に追加

allow=127.0.0.1 XXX.XXX.XXX.XXX/24

設定変更。

# /etc/rc.d/init.d/webmin restart
Stopping Webmin server in /usr/libexec/webmin
Starting Webmin server in /usr/libexec/webmin
Failed to bind to port 10000 : Address already in use
Could not listen on any ports

なん……だと……。

仕方ないのでポート変更。

# vi /etc/webmin/miniserv.conf

port=11000

## 略

listen=11000
# /etc/rc.d/init.d/webmin restart
Stopping Webmin server in /usr/libexec/webmin
Starting Webmin server in /usr/libexec/webmin
#

OK。

# firewall-cmd --add-port=11000/tcp --permanent
success
# firewall-cmd --reload
success

Firewallを開けて、接続テスト。

Webminのログイン画面にアクセスできることを確認
Webminのログイン画面にアクセスできることを確認

OK。

  • 「Dashboard」タブ
    • Webmin
      • Webmin configurations
        • Language and Locale

Japanese(JA_JP.UTF-8)を選択。

  • 「ダッシュボード」タブ
    • Webmin
      • Webmin設定
        • Webmin テーマ
          • ナビゲーションメニューオプション
            • Color pallete

Midnight Blueを選択。

12. postfix

# less /etc/postfix/main.cf
/etc/postfix/main.cf: そのようなファイルやディレクトリはありません

最小限構成だと存在しない。パス。

13. vsftpd

# dnf -y install vsftpd

## 略

完了しました!

OK。

# vi /etc/vsftpd/vsftpd.conf

## 匿名ユーザ無効化

anonymous_enable=NO #デフォルトのまま

## タイムアウト時間変更

#idle_session_timeout=600
idle_session_timeout=600

#data_connection_timeout=120
data_connection_timeout=60

## ASCIIモード有効

#ascii_upload_enable=YES
ascii_upload_enable=YES

#ascii_download_enable=YES
ascii_download_enable=YES

## ホームディレクトリより上へのアクセス制限

#chroot_local_user=YES
chroot_local_user=YES

#chroot_list_enable=YES
chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd/chroot_list
chroot_list_file=/etc/vsftpd/chroot_list

## IPv4有効

#listen=NO
listen=YES

## IPv6無効化

#listen_ipv6=YES
listen_ipv6=NO

## アクセスユーザ制御

userlist_deny=NO

## ユーザごとの設定ファイルを指定

user_config_dir=/etc/vsftpd/user_conf

## ローカル時間有効

use_localtime=YES

## パッシブモード有効

pasv_promiscuous=YES
pasv_min_port=50000
pasv_max_port=50030

## .htaccessをFTPソフトから見られるようにする

force_dot_files=YES

設定変更。

# firewall-cmd --add-service=ftp --permanent
success
# firewall-cmd --reload
success

ポートを開ける。

# vi /etc/vsftpd/chroot_list

## 空ファイル作成

## root以外参照できないように権限変更

# ls -al /etc/vsftpd/chroot_list
-rw-r--r-- 1 root root 0  2月 22 16:48 /etc/vsftpd/chroot_list

# chmod 600 /etc/vsftpd/chroot_list

# ls -al /etc/vsftpd/chroot_list
-rw------- 1 root root 0  2月 22 16:48 /etc/vsftpd/chroot_list

FTPユーザ作成・ルートディレクトリ指定

# useradd dummyuser

# passwd dummyuser
ユーザー dummyuser のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。


# vi /etc/vsftpd/user_list

## 末尾に追加したユーザを追記

dummyuser


# mkdir /etc/vsftpd/user_conf

# vi /etc/vsftpd/user_conf/dummyuser

## 以下の1行を記述

local_root=/var/www/dummy/

設定変更。

# systemctl start vsftpd.service
# systemctl enable vsftpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

起動・自動起動OK。

仮想サイト

とりあえずサーバ名がない場合に代理で応答する仮想サイトを作る(参考: Apacheで存在しない仮想サイトを指定すると意図しないサイトが表示される|Ewig Leere(Lab))。

ディレクトリ作成
# mkdir /var/www/dummy
# mkdir /var/www/dummy/web
仮想サイト作成

以降、Webminから設定。

  • 仮想ホストの作成
    • アドレス: 全てのアドレス
    • ポート: 80
    • ドキュメントのルート: /var/www/dummy/web
    • サーバ名: dummy.example.com
    • 仮想サーバの追加: 選択したファイル: /etc/httpd/conf.d/1.conf
    • ディレクティブのコピー元: どこにもない
#Options None ##コメントアウト

## 以下を追加

AllowOverride All
Options FollowSymLinks

ディレクティブの編集を実施。.htaccess用。

# systemctl restart httpd
#

OK。

仮想サイトにアクセスできることを確認
仮想サイトにアクセスできることを確認

仮想サイトにアクセスできることを確認。

FTPユーザでログインできることを確認
FTPユーザでログインできることを確認

さらに、FTPソフトでログインできること、ルートディレクトリから上に遡れないことを確認。OKです。

ひとまずここまで。

参考

基本

Apache

PHP

MySQL

vsftpd

Cockpit

ヘッドレスCMSのCockpitではない。

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。