本家のお世話-#112。(PHP5.6.5へアップデート)

 Windows 版の PHP5.6.5 が Jan-22 03:24:41UTC に出た。結構な数のバグフィックスと CVE-2015-0231 (bug #68710), CVE-2014-9427 (bug #68618), CVE-2015-0232 (bug #68799) へのパッチが含まれているようだ。
 PHP5.6.5 ChangeLog には “Fixed bug #68799″ が見つからなかったんだが,書き忘れかな。 5.5.21 のにはあったんだが……。まっ,とにかく,アップデートした。(サーバ OS : Windows7HP+SP1(x86)).

 インストールについて詳しい情報が必要な場合は,「PHP 5.5.16 から PHP 5.6.0 への移行」をご覧ください。

初めての VPS-#5 (php.rpm のリビルド)。

 当初の予定では, suEXEC サポートの話を書くはずだったのだが,ちょっと困ったことが。今回,さくらの VPS には, event + suEXEC + FPM のシステムを構築しようとしているのだが, CentOS7 標準の php.rpm はビルド時に ‘--enable-fpm‘ オプションが付与されていないみたいなのだ。 Apache httpd 上での event + suEXEC については,標準で動きそうなんだけどね。 php.rpm のビルドオプションは, ‘php-devel’ パッケージをインストールすると,下記のコマンドで参照できる。 CentOS の rpm においては ‘php -i’ では,ビルドオプションは見えないようだ。
$ php-config --configure-options
 
 そんなわけで, ‘--enable-fpm’ オプション付きの php.rpm をリビルドすることにした。本当に必要なんかね,これ?まっ,いいけど!!
 VPS に開発系のパッケージは入れたくないので,そこでは rpm を作れない。で, NJ2100 上に開発用仮想環境を作ることにした。仮想マシンには, VMware(R) Player 6.0.4 build-2249910 と CentOS7 (「開発およびクリエイティブワークステーション」を選択し,「開発ツール」にチェックを入れた)を使用。やり方は,「CentOS6の練習-#13(仮想マシンとして使う)」と大体一緒。
 
 大体一緒だったんだけどね,今回の仮想マシンは,イーサネットデバイスを認識してくれなかった。これ,困るじゃん。 NJ2100 には SiS Ethernet Controller がついてる。「どうすりゃいいんじゃ」と思ったが,ネット上にたくさん解決方法のページがあった。私としては,その中のこちらのページをおすすめする。
 
 みーんな,同じこと書いてある。曰く「vmnetcfg.exe と vmnetcfglib.dll をお使いなさい。 VMware-workstation-full-10.0.x-xxxxxxx.exe のような VMware Workstation の無償評価版を展開すれば,手に入るよ。」と。ところがさ,ベンダーさんから,評価版を落として調べてみたけど,入ってなかった。評価版は,すでに ‘VMware-workstation-full-11.0.0-2305329.exe’ になっていて, 64 ビット版に変わっており,どうも仕様が違うようだ。ウェーン。
 
 どっかに, VMware Workstation 10 がないかって探した探した。だって,今,公式からバージョン 10 を落とすとなると,製品版を買うしかないわけだが,それは「なんじゃそれっ?」状態しょっ。結局, filehorse.com で見つけて,ダウンロードした。みんなも問題の 2 ファイルほしいかしらん?一応, zip にしてみたよ。これって,グレーゾーンかな?何はともあれ,ネットにつながる開発用仮想マシンが手に入った。
 
 さて,実際のリビルド作業。当然ながら,すべて仮想マシン上で行う。参考ページとしては,公式のここを見た。

  1. リビルド用の非特権ユーザー (rpmbuilder) を作る。 mockbuild という no logon ユーザも作る。 mockbuild って, ‘rpm’ コマンドがつかうようで,どうも IUS に起因してるようだ。
    $ sudo useradd rpmbuilder
    $ sudo passwd rpmbuilder
     
    $ sudo useradd -s /sbin/nologin mockbuild
  2. rpmbuilder のホームディレクトリに, RPM ビルド用のディレクトリを作る。
    $ sudo su - rpmbuilder
    $ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
    $ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
  3. vault.centos.org から src.rpm をダウンロードする。
    $ wget http://vault.centos.org/7.0.1406/updates/Source/SPackages/ \
    php-5.4.16-23.el7_0.3.src.rpm
  4. インストール。
    $ rpm -ivh php-5.4.16-23.el7_0.3.src.rpm
  5. php.spec の編集
    $ $ cd ~/rpmbuild/SPECS/
    $ vi php.spec
    869 行に ‘--enable-fpm \’ を追加。
  6. $ rpmbuild -ba php.spec
     
    依存関係で,いろいろ足りないよと言われるので,素直に全部インストールののち,再挑戦。
    $ rpmbuild -ba php.spec
     
    ‘--enable-fpm’ オプション付きの php.rpm 入手完了。

 ところで,仮想マシンは, GUI で使っている。ここで, FileZilla を FTP クライアントとして使いたかったんだが,標準のリポジトリにはなかったので, filezilla.rpm も作った。このビルドのときに, wxGTK3-devel を要求されて, epel リポを有効にした。

  1. $ sudo yum install epel-release
  2. $ wget ftp://fr2.rpmfind.net/linux/fedora/linux/development/rawhide/source/ \
    SRPMS/f/filezilla-3.10.0-1.fc22.src.rpm

    $ rpm -ivh filezilla-3.10.0-1.fc22.src.rpm
    $ cd ~/rpmbuild/SPECS/
    $ rpmbuild -ba filezilla.spec

 こんなとこかな。

あけましておめでとうございます。

おめでとう! あけましておめでとうございます。
 皆様,本年もよろしくお願いいたします。

 新しい年が皆様にとって素晴らしい年でありますように!

 おかげさまで、昨年も1月のトンデモ風邪を除いては,元気に過ごせました。今年も,生きているわが身を素直に喜べる年であることを祈っております。

初めての VPS-#4 (CentOS7 上に WordPress のインストール)。

 さくらの VPS のお試し期間は, 12/2 までだったのだが,まだやりたいことを残しているので,続けて使っている。月払いで,しばらく続けてみるつもりである。

 今回は,「WordPress のインストール」について書く。試される場合は,当然ながら,前もって,初めての VPS #1初めての VPS #2初めての VPS #3 は完了していないといけないです。まずは Wheel Group User (うちの場合は centos )として―言い換えると root 権限のユーザということ―インストールする。

注)||SELinux と WordPress||httpd_selinux(8) 参照)

  1. ダッシュボードからプラグインをインストールしようとしたら,「FTP サーバー VPS_DomainName への接続に失敗しました」が出た。 Http デーモンがネットワークにアクセスできないせいらしい。解決策は, “httpd_can_network_connect –> on”。
    $ sudo setsebool -P httpd_can_network_connect on
  2. ダッシュボードからメディアファイルをアップロードしようとしたら,「ディレクトリ wp-content/uploads/year/date を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか?」が出た。親ディレクトリのパーミッションは 707 だったんだけとさ。 Httpd デーモンが context のせいで,ディレクトリの読み書きができないらしい。 context を ‘httpd_user_content_t’ から ‘httpd_sys_rw_content_t’ に変えたら,できるようになった。しかし,別の問題が発生。 FTP クライアントから見えない。メディアファイルに関しても FTP クライアント経由でバックアップすることが多い私には,これは問題である。
     
    解決策を探してみた。
    context を ‘httpd_sys_rw_content_t’ ではなく, ‘public_content_rw_t’ にする。メディアをアップロードするためには, ‘httpd_anon_write –> on’ も必要だった。
    $ sudo setsebool -P httpd_anon_write on
    $ sudo semanage fcontext -a -t public_content_rw_t \
    "/path/to/wp-content/uploads(/.*)?"

    $ sudo /sbin/restorecon -RF /path/to/wp-content/uploads
     
    参考 URL: 5.7.2. 永続的な変更: semanage fcontext
    上記には ‘restorecon -R’ で変更可能にと書いてあるのだが,なんでだか ‘restorecon -RF’ と F(force)を付けないとうまくいかなかった。

||Wheel Group User として WordPress をインストール||

  1. phpMyAdmin に root としてログイン。
  2. WordPress 用の database (wordpressdb とか) を照合順序 ‘utf8_general_ci’ で作成する。
  3. WordPress 用の user (wordpressuser とか) を localhost かつ passphrase ありで作成する。
    GRANT USAGE ON *.* TO wordpressuser@localhost IDENTIFIED BY PASSWORD ‘passphrase';
     
    特権を編集する。データベース ‘wordpressdb’ について GRANT 以外のすべての特権を与える。グローバル特権は一切付与しないことに注意!!
    GRANT ALL PRIVILEGES ON wordpressdb.* TO wordpressuser@localhost;
  4. ログアウト

——————–

  1. VPS に SSH 経由で centos としてログオン。直後は, /home/centos にいるはず。
  2. $ mkdir tmp
    $ chmod 707 tmp

    tmp はダウンロードファイル用である。

  3. $ cd tmp
     
    ‘wget’ が入っていない場合は,下記でインストール。
    $ sudo yum install wget
     
    WordPress をダウンロードし,解凍後当該個所にコピーする。
    $ wget https://ja.wordpress.org/wordpress-4.0-ja.tar.gz
    $ tar xzvf wordpress-4.0-ja.tar.gz
    $ rsync -avP ~/tmp/wordpress/ ~/www/html/wp/
  4. uploads フォルダを作成。
    $ mkdir ~/www/html/wp/wp-content/uploads
    $ chmod 707 uploads
     
    context type を変更する。
    $ sudo semanage fcontext -a -t public_content_rw_t \
    "/home/centos/www/html/wp/wp-content/uploads(/.*)?"

    $ sudo /sbin/restorecon -RF /home/centos/www/html/wp/wp-content/uploads

——————–

  1. ブラウザから, http://VPS_DomainName/wp/ にアクセスする。
  2. ブラウザからのインストール時, wp-config.php が自動生成されないので,表示される情報をもとに,テキストエディタで作成し, FTP クライアントでアップロードして,パーミッションを 404 にする。
    それ以外は,順当に進む。
     
    注)WordPress が FTP account 情報を自動取得できないようで,アップテートやプラグインインストール時に,一々入れてやらないといけないので, wp-config.php の /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */ より前に下記の 3 行を追加した。
    参考 URL: WordPress Upgrade Constants
     
    define('FTP_USER', 'username');
    define('FTP_PASS', 'password');
    define('FTP_HOST', 'VPS_DomainName');

 
 この時点で, PHP は DSO (Apache 2.0 Handler) で動いている。で,上の手順後,大部分の WordPress のファイルのオーナー/グループは ‘centos:centos’ になっているが,ダッシュボードからアップロードしたメディアファイルだけは, ‘apache:apache’ である。このせいで, FTP クライアントから,メディアファイルの編集ができない。バックアップはできるんだが。まあ, ‘centos‘ としてなら, SSH 経由で ‘chown’ が使えるけどね。
 
 このことは,一般ユーザの場合に,より問題となると思う。続いて,一般ユーザとして,インストールする話を書く。
 
||一般ユーザとして WordPress をインストール||
 当然ながら,サーバサイドの作業は,一般ユーザではできない。 centos として行う。

    [サーバサイド]——

  1. centos として, SSH 経由で VPS にログインし,一般ユーザを作成。
    $ sudo adduser normuser1
    $ sudo passwd normuser1
    Changing password for user normuser1.
    New password:
    Retype new password:
    $ sudo chmod 701 /home/normuser1
  2. /etc/httpd/conf.d/userdir.conf を編集する。
    $ sudo vi /etc/httpd/conf.d/userdir.conf 参考 URL: UserDir ディレクティブ
    • UserDir disabled の次行に UserDir enabled normuser1 を追加。
    • #UserDir public_html の次行に UserDir www/html を追加。
    • <Directory "/home/*/public_html">
      —>> <Directory "/home/*/www/html">
    • Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      —>> Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
  3. $ su - normuser1
    $ mkdir www
    $ cd www
    $ mkdir html
     
    normuser1 id の属性をチェック。
    $ id -a normuser1
    uid=1001(normuser1) gid=1001(normuser1) groups=1001(normuser1)
    $ exit
    $ sudo systemctl restart httpd.service
  4. $ sudo gpasswd -a sennari apache
    normuser1 id の属性をチェック。
    $ id -a normuser1
    uid=1001(normuser1) gid=1001(normuser1) groups=1001(normuser1),48(apache)
  5. ブラウザから root として phpMyAdmin にログイン。
     
    WordPress 用の database (normuser1db とか) を照合順序 ‘utf8_general_ci’ で作成する。
    WordPress 用の user (normuser1wp とか) を localhost かつ passphrase ありで作成する。
    GRANT USAGE ON *.* TO normuser1wp@localhost IDENTIFIED BY PASSWORD ‘passphrase';
     
    特権を編集する。データベース ‘normuser1db’ について GRANT 以外のすべての特権を与える。グローバル特権は一切付与しないことに注意!!
    GRANT ALL PRIVILEGES ON normuser1db.* TO normuser1wp@localhost;
     
    ログアウト。
    [クライアントサイド]——

  1. FTP クライアントで, normuser1 の DocumentRoot にアクセスする。
    テストとして, index.html をアップロードしてみる。ブラウザから http://VPS_DomainName/~normuser1/ にアクセスして確認。
     
    余談だが,この index.html に base64 encoded in-line image scheme を使ってみた (^^)。
  2. FTP クライアントで, DocumentRoot に wp フォルダを作成。
    解凍した WordPress のファイルを wp に FTP 経由でアップロード。
  3. ブラウザで, http://VPS_DomainName/~normuser1/wp/ にアクセスし, WordPress のインストールを続ける。
     
    ブラウザからのインストール時, wp-config.php が自動生成されないので,表示される情報をもとに,テキストエディタで作成し, FTP クライアントでアップロードして,パーミッションを 404 にする。それ以外は,順当に進んだ。
     
    注)WordPress が FTP account 情報を自動取得できないようで,アップデートやプラグインインストール時に,一々入れてやらないといけないので, wp-config.php の /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */ より前に下記の 3 行を追加した。
    参考 URL: WordPress Upgrade Constants
     
    define('FTP_USER', 'username');
    define('FTP_PASS', 'password');
    define('FTP_HOST', 'VPS_DomainName');

 上記終了後, WordPress 4.0 を 4.1 にアップグレードした。問題なし。ところが, uploads フォルダは作成済みでパーミッションを 707 にしてあったにも関わらず,メディアのアップロードができなかった。そんなわけで,下記のような手直しをした。

  1. FTP クライアントで, uploads フォルダのパーミッションを 775 に変更。どうやら, Http デーモンがここにフルアクセスできないといけないようなので。
  2. 以下の 3 つは centos として SSH 経由でやった。これらは,一般ユーザの権限ではやれない。そんなわけで,複数ユーザのサイトを運営する場合,この件はとても不便ではないかと思った。何しろ, ‘fcontext -a -t’ 以外は uploads フォルダ作成後でないとできなかったから。
    • $ sudo chown -R normuser1:apache \
      /home/normuser1/www/html/wp/wp-content/uploads
    • $ sudo semanage fcontext -a -t public_content_rw_t \
      "/home/normuser1/www/html/wp/wp-content/uploads(/.*)?"
    • $ sudo restorecon -RF /home/sennari/www/html/wp/wp-content/uploads

 さて,いまひとつの疑問がある。どうして WordPress は upgrades と メディアアップロードで違う方法をとっているのだろうか。メディアについても upgrades と同じ方法でやってくれれば,こんなことは起こらないと思うのに。 PHP に詳しくないのでよくわからないが,おんなじ方法を使うとなんかまずいことがあるんかいな?
 
 そんなこんなで, suEXEC サポートに取り組んでみようかという気になっている。

覚え書-#22。

群雀

群雀

 昨日,珍しくスズメの群れを見た。子供のころには田んぼにいやというほどいたスズメ,近頃では本当に珍しい。昨日のような群れとなるとめったとお目にかかれない。寂しいことだ。雀のお宿(舌切り雀ですな)などという話も,本当のスズメをあまり見たことのない子供たちに,話して聞かせる日が来てしまうのだろうか。
シロハラかな?

シロハラかな?

 
 でもって,今日は左図の鳥を見た。シロハラに似ている気がするが,どうだろうか。ちょっと,細身の気もするが,あってますかね?
 
 話は変わって,アップデートメモ。昨日,下記のソフトをアップデートした。サーバの OS は Win7 HP SP1 x86 である。
 

本家のお世話-#111。(phpMyAdmin 4.3.1へアップデート)

 12/5 に phpMyAdmin 4.3.0 が 12/8 に 4.3.1 が出た。で,昨日, 4.2.13.1 から 4.3.1 にアップデートした。 ChangeLog はこんな感じ。 4.3.0 はいろいろと改良されているみたいだが, 4.3.1 は単なる bugfix バージョン。

 いつも通り, phpMyAdmin-4.3.1-english.zip をダウンロードして解凍。古い config.inc.php を新しくできた phpmyadmin フォルダにコピーし,すべてをサーバにアップロードする。(「Windows7上にWamp系WebServerを建てる-#3。」参照。)

 古い config.sample.inc.php (=Ver.4.2.x) と新しいのを比べたら, 1 行減って, 1 行増えていた。

/* Storage database and tables */ のところ
 減った行
     // $cfg[‘Servers’][$i][‘designer_coords’] = ‘pma__designer_coords';

 増えた行
     // $cfg[‘Servers’][$i][‘central_columns’] = ‘pma__central_columns';

4.3.1 の警告

4.3.1 の警告

 しょっぱなにログインすると,「The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated. Find out why. Or alternately go to ‘Operations’ tab of any database to set up it there」が出た。前半は,いつもの環境保管領域に関しての注意書きだが,後半が増えている。要するに,手作業でセットアップをやってもいいよってことダネ。

 「Find out why」をクリックすると,右図のように問題点が表示される。また,対処法も書いてある。表題の日本語のみ,ちょっと,変だね。

     高度な機能の設定する簡単な方法:

     Create the needed tables with the ./examples/create_tables.sql.
     作ったテーブルにアクセスできる pma ユーザを作成します。
     設定ファイル (config.inc.php) で高度な機能を有効にします。 config.sample.inc.php に
     ある設定例をコピーするといいでしょう。
     更新した設定ファイルを読み込むために phpMyAdmin にログインし直します。

 下記のことをやった。

  1. 古い config.inc.php のままで,新バージョンに root として,ログオンする。
  2. phpmyadmin データベース上での, controluser(Default : pma) の特権に ALTER を追加する。
  3. 新しい, create_tables.sql をインポートする。データベース名 (Default : phpmyadmin) や controluser 名 (Default : pma) をいじっている場合は,インポート前に, create_tables.sql を編集しておく。(「phpMyAdmin 環境保管領域」参照。)
  4. ログアウト。
  5. 前の config.inc.php を編集する。
    • 削除する行
           $cfg[‘Servers’][$i][‘designer_coords’] = ‘pma__designer_coords';
    • 追加する行
           $cfg[‘Servers’][$i][‘central_columns’] = ‘pma__central_columns';
  6. 再度, root としてログオン。
  7. テーブル pma__designer_coords を削除する。

 以上。

 ところで, central columns についての説明が central_columns にあるが,読んでも使い方がよくわからない。どうやったら,記録できるのか???

はやぶさ 2 くん,無事,旅立ち。

 はやぶさ 2 くんの打ち上げ,無事,終わりましたね。昨日は,ずっと, YouTube にかじりついていました。皆さんは,どうなさってましたか。

 昨日の録画は, JAXA のチャンネルで視聴できます。「小惑星探査機「はやぶさ2」打ち上げ中継

 帰還は, 2020 年の予定です。はるかなる旅路です。今回は,あまりニュースにならないといいですね。エッと,思われるでしょうが,帰還まであまりニュースにならないということは,探査が滞りなく進むということですから。

 何事もなく探査を進め,元気に,オーストラリアの予定地に帰ってきてほしいものです。

初めての VPS-#3 (CentOS7 上に LAMP を構築)。

 はやぶさ 2 の打ち上げ,再延期になっちゃいましたねぇ。 12 月 3 日 (水) 13 時 22 分 04 秒の予定だそうです。三度目の正直で,今度こそ晴れてほしいなぁ。

 さて, SELinux を有効にしたままで, CentOS7 上に LAMP を構築しようと思う。
 LAMP 構築に先立って,以下の 3 4 つをやった。

  1. $ sudo vi /etc/pam.d/su
    下記の行をアンコメントする。
    #auth required pam_wheel.so use_uid –>> auth required pam_wheel.so use_uid
    これで, Wheel Group 外のユーザは ‘su’ コマンドを使っても, root にはなれなくなった。
  2. $ sudo vi /etc/aliases
    ファイルの最下行をアンコメントし,ユーザ名を変更する。
    #root: marc –>> root: centos
    $ sudo newaliases
    これで,ユーザ centos が root 宛てのメールを受け取れるようになった。
  3. タイムゾーンをチェックする。
    $ sudo timedatectl status
    特に,問題なし。
    $ sudo systemctl status chronyd.service
    結果に, “System clock wrong by 1.088336 seconds, adjustment started” というのがあったので, /etc/chrony.conf を編集した。
    $ sudo vi /etc/chrony.conf
    中に “# Use public servers from the pool.ntp.org project.” と書いてあったので, pool.ntp.org に行ってみたら,使い方があった。その指示に従って, ‘+’ の 4 行を追加し, ‘-’ の 4 行を削除した。
    +server 0.pool.ntp.org iburst
    +server 1.pool.ntp.org iburst
    +server 2.pool.ntp.org iburst
    +server 3.pool.ntp.org iburst
    -server 0.centos.pool.ntp.org iburst
    -server 1.centos.pool.ntp.org iburst
    -server 2.centos.pool.ntp.org iburst
    -server 3.centos.pool.ntp.org iburst
    サービスを再起動して,確認。
    $ sudo systemctl restart chronyd.service
    $ sudo systemctl status chronyd.service
    よくなった。
  4. パッチ自動更新用。
    $ sudo yum install yum-cron
    $ sudo vi /etc/yum/yum-cron.conf
     行番号 20: apply_updates = no –>> apply_updates = yes
    $ sudo systemctl start yum-cron.service
    $ sudo systemctl enable yum-cron.service

1 Apache Httpd のインストール   2 MariaDB のインストール   3 PHP のインストール
4 phpMyAdmin のインストール   5 vsftpd のインストール

 
||Apache Httpd のインストール||

  1. $ sudo yum install httpd
    インストールされたバージョンは, httpd.x86_64 2.4.6-18.el7.centos だった。
  2. /etc/httpd/conf/httpd.conf を編集する。
    $ sudo vi /etc/httpd/conf/httpd.conf
     
    :set nu’ で行番号を表示する。
    • 行番号 42: Listen 80 –>> Listen Server_global_IP:80
    • 行番号 86: ServerAdmin root@localhost –>> ServerAdmin My_email_address
    • 行番号 95: #ServerName www.example.com:80 –>> ServerName VPS_DomainName:80
    • 行番号 119: DocumentRoot "/var/www/html" –>> DocumentRoot "/home/centos/www/html"
    • 行番号 124: <Directory "/var/www"> –>> <Directory "/home/centos/www">
    • 行番号 131: <Directory "/var/www/html"> –>> <Directory "/home/centos/www/html">
    • 行番号 144: Options Indexes FollowSymLinks –>> Options FollowSymLinks
    • 行番号 151: AllowOverride None –>> AllowOverride FileInfo Indexes Limit
      うちの場合,この行の変更は, WordPress のためである。
    • 行番号 164: DirectoryIndex index.html –>> DirectoryIndex index.php index.html
  3. 注) exstra.conf の場所: /etc/httpd/conf.d
    デフォルトの exstra conf : autoindex.conf, userdir.conf, welcome.conf
  4. 注 2) module.conf の場所: /etc/httpd/conf.modules.d/
  5. 注 3) log ファイルのローテートの設定をしていないのだが, Apache Httpd が自動でやってくれているようだ。(サーバを 1 日以上稼働したのち, /var/log/httpd/ を見たら,日ごとの log になっていた)。いつからこうなったんだろう?それとも, CentOS7 固有の機能なのか?
  6. 通常,ユーザのホームディレクトリのパーミッションは 700 であるが, httpd のアクセスを許可するために, 701 にしておかなくてはいけない。このことは, userdir.conf に書いてあった。
    $ chmod 701 centos
  7. DocumentRoot をユーザホームディレクトリに割り当てたので, httpd がアクセスできるように, SELinux の設定を変更する。これについての情報は, httpd_selinux(8) にあった。しかし, CentOS7 で見ようとしたら httpd_selinux(8) が空だったんだが,どうしてだろう。
    この際,オンラインの httpd_selinux(8) をご覧あれ。
    $ sudo setsebool -P httpd_enable_homedirs on
    $ sudo systemctl start httpd.service
    サービスを起動したら,エラーメッセージ “Job for httpd.service failed. See ‘systemctl status httpd.service’ and ‘journalctl -xn’ for details.” が出ちゃった。ユーザディレクトリに ‘www’ と ‘html’ を作るのを忘れてた。ユーザ centos として,以下の作業をやった。
    [centos@localhost ~]$ mkdir www
    [centos@localhost ~]$ cd www
    [centos@localhost www]$ mkdir html
    ここで,両ディレクトリの context を確認しておく。
    $ ls -Z
    drwxrwxr-x. test test unconfined_u:object_r:httpd_user_content_t:s0 www
    $ ls -Z
    drwxrwxr-x. test test unconfined_u:object_r:httpd_user_content_t:s0 html
  8. 再度, $ sudo systemctl start httpd.service
  9. $ sudo firewall-cmd --permanent --zone=public --add-service=http
    Httpd テストページ

    Httpd テストページ

    $ sudo firewall-cmd --reload
    $ sudo systemctl enable httpd.service
    注 4) 各 Well-Known-Port の設定は,前もって済んでいるみたいだ。そんなわけでポート 80 についての firewall-cmd はいらない模様。
  10. http://VPS_DomainName/ にアクセスすると,右の図のようなページが見えるはずである。

||MariaDB のインストール||

  1. $ sudo yum install mariadb-server mariadb
    インストールされたバージョンは, mariadb.x86_64 1:5.5.40-1.el7_0 と mariadb-server.x86_64 1:5.5.40-1.el7_0 だった。
  2. $ sudo systemctl start mariadb
  3. $ sudo mysql_secure_installation
    Enter current password for root (enter for none): <<-- [Enter] キーを打つ。
    Set root password? [Y/n] <<-- [Enter] キーを打つ。
    New password: <<-- root のパスワードを設定。
    Re-enter new password: <<-- パスワードの確認 = もう一度打つ。
    以下の項目については, [Enter] キーを打つ⇩。
    Remove anonymous users? [Y/n]
    Disallow root login remotely? [Y/n]
    Remove test database and access to it? [Y/n]
    Reload privilege tables now? [Y/n]
  4. $ sudo systemctl enable mariadb.service

||PHP のインストール||

  1. $ sudo yum install php php-mysql php-mbstring
    インストールされたバージョンは, php.x86_64 5.4.16-23.el7_0.3 , php-mbstring.x86_64 5.4.16-23.el7_0.3 , php-mysql.x86_64 5.4.16-23.el7_0.3 だった。
    php.conf はインストール時に,自動的に /etc/httpd/conf.d に作られる。
  2. /etc/php.ini を編集する。
    $ sudo vi /etc/php.ini
     
    :set nu’ で行番号を表示する。
    • 行番号 243: output_buffering = 4096 –>> output_buffering = Off
    • 行番号 314: disable_functions = –>> disable_functions ="shell_exec, suexec, passthru"
    • 行番号 375: expose_php = On –>> expose_php = Off
    • 行番号 811: allow_url_fopen = On –>> allow_url_fopen = Off
    • 行番号 878: ;date.timezone = –>> date.timezone ="Asia/Tokyo"

    注 5) additional.ini の場所: /etc/php.d
    デフォルトの additional ini: curl.ini, fileinfo.ini, json.ini, mbstring.ini, mysql.ini, mysqli.ini, pdo.ini, pdo_mysql.ini, pdo_sqlite.ini, phar.ini, sqlite3.ini, zip.ini

  3. $ sudo systemctl restart httpd.service

||phpMyAdmin のインストール||

  1. phpMyAdmin がほしいんだが, base, extras, updates リポジトリにはなかったので, ‘epel’ を追加することにした。
    $ sudo yum install epel-release
  2. $ sudo yum install phpmyadmin
    インストールされたバージョンは, phpMyAdmin.noarch 4.2.11-1.el7 だった。
    phpMyAdmin.conf はインストール時に,自動的に /etc/httpd/conf.d に作られる。
  3. /etc/httpd/conf.d/phpMyAdmin.conf を編集する。
    $ sudo vi /etc/httpd/conf.d/phpMyAdmin.conf

    うちの phpMyAdmin.conf は下記のような感じ。
    # phpMyAdmin - Web based MySQL browser written in php
    #
    # Allows only localhost by default
    #
    # But allowing phpMyAdmin to anyone other than localhost should be considered
    # dangerous unless properly secured by SSL

    Alias /phpMyAdmin /usr/share/phpMyAdmin
    Alias /phpmyadmin /usr/share/phpMyAdmin

    <Directory /usr/share/phpMyAdmin/>
       AddDefaultCharset UTF-8

       <IfModule mod_authz_core.c>
         # Apache 2.4
         <RequireAny>
           Require ip my_global_IP
           Require host my_mobile_host
         </RequireAny>
       </IfModule>
    </Directory>

    <Directory /usr/share/phpMyAdmin/setup/>
       <IfModule mod_authz_core.c>
         # Apache 2.4
         <RequireAny>
           Require ip my_global_IP
           Require host my_mobile_host
         </RequireAny>
       </IfModule>
    </Directory>

  4. $ sudo systemctl restart httpd.service

||vsftpd のインストール||

  1. $ sudo yum install vsftpd
    インストールされたバージョンは, vsftpd.x86_64 3.0.2-9.el7 だった。
  2. Edit /etc/vsftpd/vsftpd.conf.
    $ sudo vi /etc/vsftpd/vsftpd.conf
     
    :set nu’ で行番号を表示する。
    • 行番号 12: anonymous_enable=YES –>> anonymous_enable=NO
    • 行番号 82: #ascii_upload_enable=YES –>> ascii_upload_enable=YES
    • 行番号 83: #ascii_download_enable=YES –>> ascii_download_enable=YES
    • 行番号 100: #chroot_local_user=YES –>> chroot_local_user=YES
    • 行番号 101: #chroot_list_enable=YES –>> chroot_list_enable=YES
    • 行番号 103: #chroot_list_file=/etc/vsftpd/chroot_list –>> chroot_list_file=/etc/vsftpd/chroot_list
    • 行番号 128: –>> local_root=www/html
  3. $ sudo setsebool -P ftp_home_dir on
    local_enable=YES をアンコメントしている場合は, on にするようにと, vsftpd.conf に書いてあった。
  4. $ sudo vi /etc/vsftpd/chroot_list
    chroot_list に ‘admin’ を追加した。
  5. “chroot_~” をアンコメントして,一般ユーザとして, FTP 経由でアクセスしたら, 500 OOPS: vsftpd: refusing to run with writable root inside chroot() が出た。
    で, allow_writeable_chroot=YES を vsftpd.conf に追加。この情報は, 500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed on debian からもらった。
    行番号 104: –>> allow_writeable_chroot=YES
  6. $ sudo systemctl start vsftpd.service
    $ sudo systemctl enable vsftpd.service
    $ sudo firewall-cmd --permanent --zone=public --add-service=ftp
    $ sudo firewall-cmd --reload

初めての VPS-#2 (SSH 接続)。

 昨日の朝, WordPress 4.0.1 になっていた。セキュリティ・アップデートということだが,主として, XSS 関連のようだ。自動でアップデートされると思うが,されない場合は,手動での早急なアップテートをお奨めする。 “An extremely unlikely hash collision could allow a user’s account to be compromised, that also required that they haven’t logged in since 2008 (I wish I were kidding).” というのを読んで,思わず笑っちゃったが,笑いごとじゃないよなあ(溜息)。

 CentOS7 は標準で SSH が使えるようだ。 OS 変更後, TeraTerm で接続してみた。もちろん,他の SSH クライアントでも構わない, PuTTY とか WinSCP とか。 SSH サーバの現時点のバージョンは 6.4p1-8 だった。

 標準の設定だと, root かつ パスワードでアクセス可能なので,ちょっと,不安。細かい設定は後回しとしても,最小限,これだけは変えておこう。

 設定いじりの前に, TeraTerm で 認証鍵ペアを作った。秘密鍵には, passphrase も設定した。サーバ上でも鍵は作れるが,それだと,秘密鍵のほうをネット経由でやり取りすることになる。これが嫌いなのだ。多人数相手だと,メールででもやり取りしないと仕方ないだろうが。

||その 1 Sudoers ファイルの編集||

  1. VPS コントロールパネルにログインし,「リモートコンソール」をクリック,続いて「VNCコンソールを開く」をクリック。
  2. 1 分以内に,「HTML5モードで開く」をクリックすると, QEMU が別窓で開く。
  3. # usermod -G wheel centos  <--- 「centos」というのは, sudo を使わせたいユーザ。
    # visudo
    ファイルが開く。
  4. ‘/wheel’ をやって,「wheel」のある行を探す。
    「%wheel ALL=(ALL) ALL」の行頭に「#」があったら,外して,アンコメントする。しかし,今回は,「#」はなかった。ということで,そのまま, visudo を閉じる。
    注)visudo の使い方は,基本的には, vi エディタのと同じである。
  5. # su - centos
  6. $ sudo shutdown -h now
  7. ‘sudo’ 使用の初回には,下記のメッセージが出る。

    We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

    パスワードを要求される。
    [sudo] password for centos:

  8. “VPS ホーム” で,サーバが停止しているのを確認できる。サーバを再起動しておこう。

||その 2 policycoreutils-python のインストール||

  1. QEMU に再度ログイン。後で SSH のポートを標準から変更するときに, ‘semanage’ コマンドを使うので, policycoreutils-python をインストールしておく。
    # yum install policycoreutils-python

||その 3 SSH の設定を変更||

  1. TeraTerm (ttermpro.exe) を起動。 VPS に「centos」として,パスワード認証でログイン。
  2. 公開鍵 (id_rsa.pub) を TeraTerm の窓にドラッグ&ドロップ。 TeraTerm は SCP(Secure Copy Protocol) に対応しているので,「SCP」ボタンをクリック。
  3. $ mkdir .ssh
    $ chmod 700 .ssh
    $ cat id_rsa.pub > .ssh/authorized_keys
    $ chmod 600 .ssh/authorized_keys
    $ rm -f id_rsa.pub
  4. $ su -
    Password:  <--- root のパスワードを入力。
  5. # vi /etc/ssh/sshd_config
    sshd_config が開く。
  6. #Port22  —>  Port****
    #PermitRootLogin yes  —>  PermitRootLogin no
    PasswordAuthentication yes  —>  PasswordAuthentication no
     
    変更した sshd_config を上書き保存。

    # systemctl restart sshd.service

    注)**** には well-known ports 以外の数値を使う。ただし,数値は 0 ~ 65535。

  7. # firewall-cmd --permanent --zone=public --add-port=****/tcp
    # firewall-cmd --reload
    # semanage port -a -t ssh_port_t -p tcp ****
  8. # exit
    $ exit
    TeraTerm が終了する。
  9. 再度, TeraTerm (ttermpro.exe) を起動。今度は,鍵認証方式で「centos」として,ログイン。新しい SSH ポート(****)を使う。今回は秘密鍵の passphrase も必要である。
  10. SSH 接続で ‘sudo’ を使ってみる。

    $ sudo firewall-cmd --list-all
    public (default, active)
      interfaces: eth0
      sources:
      services: dhcpv6-client ssh
      ports: ****/tcp
      masquerade: no
      forward-ports:
      icmp-blocks:
      rich rules:

 SSH の設定変更,おしまい!!

 ところで, 15 日に PHP5.6.3 にアップデートした。 ChangLog はこんな感じ。

初めての VPS-#1 (CentOS7 のインストール)。

 くりくりさんのコメントに触発されて,さくらのVPSCentOS7 を使ってみようと思い, 18 日に 2 週間お試しに登録した。

 日本語のサービスしかなくて,日本に住んでないと使えないようだが,英語ブログでも紹介した。

図 1 お申し込み

図 1 お申し込み

||さくらのVPS に仮登録||
  1. さくらのVPS にアクセスして,「お申し込み (図 1)」をクリック。
  2. 「さくら VPS のお申し込み」ページに進む。「利用規約の確認へ (図 2)」をクリック。
  3. 「以下の約款及び個人情報の取扱いについてよくご確認ください。」ページに進む。「基本約款」と「個人情報の取扱いについて」を印刷し,じっくり読む。「同意する」をチェックし,「つぎへ –>」をクリック (図 3)。
  4. 「お客様の情報をご入力ください」のページに進む。
    図 2 利用規約の確認へ

    図 2 利用規約の確認へ


    以下の項目を記入。 (*) は必須項目。
    • メールアドレス(*):
    • ご契約者の種別(*):
    • ご契約者名(*):
    • ご契約者名カナ(*):
    • 図 3 「約款」&「個人情報の取扱いについて」

      図 3 「約款」&「個人情報の取扱いについて」

      生年月日(*)
    • 性別(*):
    • 郵便番号(*):
    • ご住所(*):
    • 街区名・番地等(*):
    • 建物名等:
    • 電話番号(*):(※携帯可)
    • FAX番号:

    「つぎへ –>」をクリック。

  5. 「会員メニューへログインするためのパスワードを指定してください」ページに進む。
    • パスワード:
    • 「ひみつ」の質問 :
    • 「ひみつ」の答え:

    「つぎへ –>」をクリック。

  6. 「サービスプラン」のページに進む。
    • 「さくらのVPS 1G」を選択。
    • レジデンスを「石狩/東京/大阪」から選択。

    「つぎへ –>」をクリック。

  7. 「支払方法」のページに進む。
    • 「毎月払い/年払い」から選択。
    • 2 週間お試しの場合は,「クレジットカード」しか使えない。
    • 注意書きがいろいろあるが,特に朱書きのものは,大事。
      ・お申込から2週間後に自動で本登録になります。キャンセルの場合は、お客様にて行っていただく必要がございます。
      ・会員メニューから「本登録」をするとキャンセルが行えなくなります。

    「つぎへ –>」をクリック。

  8. 図 4 以下の通りお申込を受付いたしました

    図 4 以下の通りお申込を受付いたしました

  9. 「最終のご確認」のページに進む。
    必要に応じて,印刷しておこう。
  10. 「以下の通りお申込を受付いたしました」のページに進む。
    • 会員ID
    • プラン名
    • サービスコード
    • メールアドレス

    「会員メニューへお進みください」をクリックする (図 4)。

 「会員メニュートップ」に進む。ログアウト。これで,仮登録は,終わり。

||VPS コントロールパネルにログイン||

  1. VPSコントロールパネル からログイン。
    IPアドレスとパスワードは「[さくらのVPS] 仮登録完了のお知らせ」メールに記載されている。
  2. まずは, VPS コントロールパネルのパスワードを変更。

||CentOS7 をインストール||

  1. 標準の OS は CentOS6 なので, CentOS7 をインストールするために,「OS再インストール」をやる。
  2. 「OS再インストール」に進み,「カスタムOSインストールへ」をクリック。
  3. 「CentOS 7 x86_64」を選択し,「確認」をクリック。
  4. 「実行」をクリック。
  5. 1 分以内に,「HTML5モードで開く」をクリック。「QEMU」が別窓で開く。
  6. インストールについては, CentOS 7 を参照。
    インストール中に, root のパスワードの設定と一般ユーザの作成を行う。
  7. インストールは,かなり時間を食う。終わったら,「Server disconnected…」というメッセージが出るので,「VPSホーム」に戻って,サーバを起動する。「ステータス」が「停止」から「稼働中」に代わる。
  8. これで, VPS の OS が CentOS7 になった。

 インストール中に困ったのは, QEMU で最下部が全く見えなかったこと。おかげで,「Reclaim space」や「Begin Installation」を,勘 + キー操作でやる羽目になった。ヤレヤレ。