今更ながらCentOS7になって色々変わったみたいなので、インストールして使ってみることにしました。
サーバ用途で考えた場合に、Ubuntu serverなど他のLinux OSとどちらが良いのかも検討してみましたが、日本ではCentOSについて説明しているサイトが多く、また多くのレンタルサーバで採用されているようなので今回はCentOS(7.1)を選びました。
※ 世界的なユーザ数ではUbuntu の方がかなり多いようですが、日本のレンタルサーバ会社ではCentOS6系(Red Hat含む)が多いようです
自分でインストールや設定した方が後から設定を変更しやすく、色々と理解しやすいためGUIはインストールせずminimal(最小構成)インストールした方が良いかもしれません。(時間がない方はパッケージインストールしてしまうのが良いでしょう)
CentOSのイメージファイル(iso)は下記のサイトからダウンロードが可能です。
centos.orgへ
USBブートなどはインストールで躓くことあるので、DVDメディアにイメージを焼いてインストールディスクにする形式をお勧めします。
スムーズにいけばインストールは迷うことなくできます。
最小構成+PHPの所1つだけチェックを入れています。
「ソフトウェアの選択(s)」 → 「ベーシック Web サーバー」 → 「PHP サポート」
後からもっといろいろチェックしておけばよかったかもしれないと思いましたが、必要なものは手動でインストールした方が理解が深まるので気にしないことにします。
インストールが完了したらまずrootでログインし、ネットワークの設定だけはやっておかないと不便なので最初に設定することにします。
が、CentOS 7 になって色々と操作のコマンドが変更されたようなので、よく使いそうなところを最初におさらいしておきます。
ifconfig → ip addr
route → ip route
netstat → ss
chkconfig → systemctl list-unit-files
service → systemctl [start/restart/stop/reload/….] xxxxx.service (httpd.service などを指定)
だいたいのコマンドは今まで通り利用可能ですが、今後のバージョンアップで今までのコマンドが利用できなくなるかもしれません。※ chkconfig は利用できなくなりました
コマンドの使い方については –help や詳しく解説しているサイトなどでご確認ください。
・ その他サービスの変更点(一部)
MySQL → MariaDB
iptables → firewalld
以後のコマンドでは、sudo を利用していませんので、お使いの環境に合わせてsudo コマンドをお使いください。
ネットワークの設定
CentOS7 からはネットワークの設定ファイルを直接書き換えず、nmcli コマンドを介して設定することが推奨されています。
設定ファイルは1字ミスしたら致命傷になりますからね…安全性ということでは良いのかもしれません。
設定ファイルは従来通り、/etc/sysconfig/network-script/ifcfg-xxxxxxx というファイルが対象ファイルとなります。
ここではIPV4の固定IPでクラスC(192.~)を想定します。
※ DHCPはそのままに、固定IPを割り振ります
> nmcli device デバイス タイプ 状態 接続 enp6s0 ethernet 接続済み enp6s0 enp5s0 ethernet 利用不可 -- lo loopback 管理無し --
nmcli device は nmcli d でも代用可能です。
通常[接続済み] は [connected] 、[利用不可] は [unavailable]、[管理無し]は[unmanaged]と(、disconnected は 未接続?と)表示されます。
接続デバイス名は環境によっていろいろ変化しますので、enpxs0 のようなデバイス名が対象だと思われますので、コマンドでデバイスを確認しておきましょう。
後から変更を反映するため再起動しますが、とりあえずメインで利用するネットワークがconnected になっていない場合(disabled)は有効にしておきます。
> nmcli connection up enp6s0 または > nmcli c up enp6s0
固定IPアドレス(192.168.1.80 の場合)とルータのIPアドレス(192.168.1.1 の場合)、DNSのIPアドレスを割り当てます。
> nmcli connection modify enp6s0 ipv4.addresses 192.168.1.80 > nmcli connection modify enp6s0 ipv4.gateway 192.168.1.1 > nmcli connection modify enp6s0 ipv4.dns 192.168.1.1
これで固定IPアドレスとゲートウェイの設定ができたので、ひとまずの設定は完了です。
ネットワークの設定を有効にするため再起動します。
> systemctl restart NetworkManager
設定ファイルを直接書き換えて記述ミスがあると、上のrestartを実行すると外部からの接続ができなくなるので注意しましょう。
設定を更新したら以下のようなコマンドで設定を確認します。
> nmcli c show enp6s0 > nmcli show enp6s0 > ip addr > ip addr show > ip addr show enp6s0
ホスト名を変更する場合は以下のコマンドから設定が可能です。
> hostnamectl set-hostname 【ホスト名】
設定の確認は hostnamectl コマンドを実行することでも確認することができます。
/etc/hostsname ファイルを直接修正することもできます。
(/etc/hosts と /etc/hostsname は別ファイルとして存在)
MariaDB のインストールと設定
MySQLに慣れてしまっているので初めて触るにはちょっと戸惑いがありますが、インストールから設定まで進めてみようと思います。
yum で簡単インストール!
とりあえずパッケージを確認してみます。
> yum list | grep maria*
mariadb(サーバ)をインストールします。
> yum install mariadb-server または > yum -y install mariadb-server
以後 -y オプションは省略しています。
mariadbのサーバをインストール指定すると必要なもの(クライアント)は全部インストールされていると思います。
MariaDB(データベースサーバ)のサービスを起動・自動起動設定します。
CentOS7ではchkconfigは使わず、systemctl コマンドで設定します。
httpdも一緒に自動起動設定後、起動します。
※ minimalインストールでhttpd がインストールされていない場合は同じようにyumでインストールしておきます
> systemctl enable mariadb.service > systemctl enable httpd.service > systemctl start mariadb.service > systemctl start httpd.service
※ .service の部分は省略可
MariaDBの設定ファイルを変更します。
MariaDBはもともとMySQLをフォークして立ち上げられたプロジェクトのため、使い勝手は殆どMySQLと同じのようです。
/etc/my.conf ファイルの設定ファイルを使いやすいように変更します。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd character-set-server=utf8 max_allowed_packet=200M max_heap_table_size=256M tmp_table_size=256M query_cache_size=128M query_cache_type=1 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
基本的に設定するのは10行目の「character-set-server=utf8」だけで良いかもしれません。
ヒープサイズやキャッシュなどの設定は必要に応じて設定してください。
設定を更新するためMariaDBを再起動します。
> systemctl restart mariadb.service
ここで設定ファイルにミスがあると再起動に失敗しますので、設定ファイルの記述でパラメータ名のミスやスペルミスの確認を行いましょう。
mysql_secure_installation コマンドでMariaDBの初期設定を進めますが、うまく進まない場合は設定ファイルが正しくない可能性があるので、設定ファイルを確認してMariaDBのサービスが正常に起動しているかどうかを確認しましょう。
> mysql_secure_installation /usr/bin/mysql_secure_installation: 行 379: find_mysql_client: コマンドが見つか りません → 気にしない NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): → そのままEnter OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] → y を押してEnter New password: → パスワードを入力 Re-enter new password: → パスワードを入力 Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB 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? [Y/n] → y を押してEnter(anonymous ユーザは不要) ... 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? [Y/n] → ここでは n を入力(rootのリモートログイン許可) ... skipping. By default, MariaDB 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? [Y/n] → y を入力してEnter(テストDBの削除) - 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? [Y/n] → y を入力(テーブル権限のリロード) ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
以上で設定は可能です。
※ y は入力しなくても空のEnterでYesとして扱われるようです。
MariaDBのコマンドは・・・なんと mysql だそうで、
ログイン時は
mysql -u xxxx -p
みたいな感じで行うようです。
コマンドも同じとは・・・中身もほとんど同じなのでとりあえずはここまでで設定は終了とします。
※ ユーザの作成等はMySQLと同じようなので、必要に応じて設定
PHP のライブラリインストール
さて、PHPは初期インストールしましたが、mysql クライアントがまだ入っていません。
最低限必要なライブラリとMariaDBに接続するための必要なライブラリをインストールします。
# マルチバイト処理に関するライブラリ yum install php-mbstring # 画像処理に関するライブラリ (初期インストール済み) yum install php-gd # xml に関するライブラリ (初期インストール済み) yum install php-xml # データベース接続に関するライブラリ (初期インストール済み) yum install php-pdo # MariaDB に関するライブラリ yum install php-mysql
インストールが完了したらサービスを再起動しておきます。
> systemctl start httpd.service
FTPの設定
あと少しでWebが見れる最低限の設定が完了するので、このまま進めていきます。
デフォルトではSELinuxが有効になっていてFTPでの転送ができないため、SELinuxを無効に設定するか、設定を変更します
SELINUX=disabled # SELinuxを無効に設定
以下のコマンドでも設定可能です(setenforce は再起動後またもとに戻るので注意)
setenforce 0
SELinuxを有効のまま、FTPの接続を許可する場合は以下の設定で転送が可能となります。
setsebool -P ftp_home_dir 1 #
インストールするFTPサーバはvsftpdを利用します。
> yum install vsftpd
ASCIIモードでの転送はほぼ不要かと思われるため有効にしていません。
初期状態の設定ファイル(/etc/vsftpd/vsftpd.conf)を編集します
# 匿名アクセスの禁止 YES → NO anonymous_enable=NO # ディレクトリのアクセス制限を設けます ※コメントアウトを解除 chroot_local_user=YES chroot_list_enable=YES # ディレクトリ毎の削除を許可します ※コメントアウトを解除 ls_recurse_enable=YES # IPアドレスをv6 → v4 に設定します # NO → YES listen=YES # YES → NO listen_ipv6=NO # 行を追記します パッシブモードを有効にします。 # allow_writable_root は chroot_list_enable=YES にした際に接続ではまる可能性があるため設定を追記していますが、セキュリティ上ちょっと問題があるようです。ローカル内での運用なら問題ないでしょう。 local_root=public_html use_localtime=YES pasv_promiscuous=YES pasv_min_port=50000 pasv_max_port=50029 allow_writeable_chroot=YES # バージョンにより、allow_writable_root、allow_writeable_root と異なるようなのでスペルに注意
変更が必要な個所が減り、少しシンプルになったようですね。
さて、ログインするユーザはあらかじめ作成しておかなければいけませんので、
ユーザがすでに作成されているものと想定してFTPで接続できるようにリストを更新します。
設定ファイルで追記したように、ユーザのホームディレクトリにpublic_html フォルダが存在していることが前提です。
(ユーザの追加は useradd コマンドにて可能)
ファイルがないとエラーが出てログインすることができないため、空ファイルだけ作成しておきます(適当にコメントアウトだけ記述)
#
親ディレクトリへのアクセスを許可する場合はここにユーザ名を記載します。
※ 複数ある場合は改行して1行に1名ずつ表記
root ユーザでのFTPログインを許可する場合は、次のファイルの設定も変更しておきます
#root ※ rootのコメントアウト追加
#root ※ rootのコメントアウト追加
設定ファイルの変更がすべて終了したらサービスを起動して自動起動設定しておきます。
> systemctl start vsftpd.service > systemctl enable vsftpd
これだけではFirewallにより外部から接続できないため、Firewall の設定を行います。
HTTPの80番ポート、HTTPSの443番ポート、SMTPの25番ポート、POPの110番ポート、FTPのポート(21番、20番)、Passiveモードで指定したポート 50000-50029番
# サービス名でポートを開放 > firewall-cmd --add-service=http --zone=public --permanent > firewall-cmd --add-service=https --zone=public --permanent > firewall-cmd --add-service=smtp --zone=public --permanent > firewall-cmd --add-service=pop3s --zone=public --permanent > firewall-cmd --add-service=ftp --zone=public --permanent # ポート番号を直接指定する場合 > firewall-cmd --zone=public --add-port=50000-50029/tcp --permanent > firewall-cmd --reload
firewall で直接ポートを許可してしまうのはどうなのだろうと思いますが、これをしないとFTP接続時にfirewallにブロックされて接続できないため、応急処置的な感じでPASVモードでのポートを許可してみました。
通常どのような設定が適切なのかが現状では不明なため、このあたりをもっと調べないといけないかもしれません。
わりとはまりました、SELinuxでFTPに接続できてもファイルが見えなかったりアップロードできなくなってしまうようです。
SELinuxが有効なままvsftpdを運用する場合は専用に何かしらの設定をする必要があるようなので、
とりあえず無効化してしまいます。
> setenforce 0
> getenforce
Permissive
あと行っておくとしたらFTPのIPアドレス制限でしょうか。
/etc/hosts.allow
と
/etc/hosts.deny
で記述します。
allow 側には下のような
vsftpd : 192.168.1. 127.0.0.1
deny 側には下のような設定をしておけば良いでしょう
vsftpd : ALL
これで最低限の設定は完了しました。
時間があるときに整理したり追加、補足したりしたいと思います。
○ メモ
ライブラリがないのでCentOS6 のパッケージからインストール
yum localinstall -y http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
○ 参考にさせていただいたサイト
Server world さんの記事:ホスト名を設定する
UnixPower on Networking さんの記事: CentOS7 ネットワークの設定変更
UnixPower on Networking さんの記事: CentOS7 MariaDBの設定
Qiita 投稿記事:CentOSでftpsをセットアップ(vsftpd)
Create Fieldさんの記事: CentOS7にnkfをインストールする方法