カテゴリー
Linux

初めての VPS-#7 (自分用のリポジトリの使い方)。

The same article in English

 前回作ったリポジトリの使い方を書こうと思う。

 リポジトリを利用しようと思う CentOS7 にログインする。例えば, VPS とか,開発用の VM とか。

  1. ‘yum-plugin-priorities’ をインストールする。
    Base, Updates, Extras リポジトリの優先度が高いので,この 3 つが有効で,なおかつ同じパッケージがこれらの中にあると,デフォルトのままでは自前リポのパッケージは使ってもらえない。この件は,その都度マニュアルで対処することもできるのだが,よく使うリポについては, ‘yum-plugin-priorities’ を利用するほうが,面倒がなくていい。
    $ sudo yum install yum-plugin-priorities
     
    よく使うリポについては,プライオリティをセットしておくべきだが,どのリポジトリを有効にしているかという情報が必要になる。忘れちゃっていることも多いもんネ。そんなときは,下記で調べる。
    $ yum repolist
     
    ‘yum repolist all’ とやれば,有効・無効にかかわらずすべてのリポジトリが,列挙されまっさ。
  2. /etc/yum.repos.d に myrepo.repo を作成する。
    $ sudo vi /etc/yum.repos.d/myrepo.repo
    中に書くのは,下記のようなこと。
    [myrepo]
    name=o6asan’s original RPM packages
    baseurl=http://www17130ue.sakura.ne.jp/~myrepo/x86_64/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-o6asan
    priority=1
  3. /etc/yum.repos.d/CentOS-Base.repo の[base], [updates], [extras] の各エリアの最終行に ‘priority=2‘ を追記する。
  4. $ wget http://www17130ue.sakura.ne.jp/~myrepo/x86_64/RPM-GPG-KEY-o6asan
    $ sudo mv RPM-GPG-KEY-o6asan /etc/pki/rpm-gpg/

 準備完了。自前リポジトリの 1 回目の使用時に, CentOS7 が RPM-GPG-KEY-o6asan をインポートしていいか聞いてくるので, ‘y’ を入力する。

注) クライアント PC から公開鍵を削除する方法。
 クライアント PC には秘密鍵はないので, ‘gpg --delete-key <email@address>’ をやっても, ‘Unknown system error’ が戻ってくるだけで,削除はしてくれなかった。下記を使うとうまくいった。
  $ sudo rpm -e [package]

 当然ながら,正確なパッケージ名がいるが,それは下記で調べることができる。
  $ rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}n'

 例えば, CentOS-7 Key については,下記が戻ってくる。
  gpg-pubkey-f4a80eb5-53a7ff4b –> gpg(CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>)
なので,
  $ sudo rpm -e gpg-pubkey-f4a80eb5-53a7ff4b
とやると,削除することができる。

追記:
 あとで気付いたが, Apache の rpm を作ったときの記述だと,秘密鍵なしの状況でも gpg --delete-key RSA鍵ID で公開鍵を消せたと書いてある。今回はできなかったんだが,なんでだろ。バグだったりして。

カテゴリー
Linux

初めての VPS-#6 (自分用のリポジトリを作る)。

The same article in English

 現在,さくらの VPS に event + suEXEC + FPM で WEB サーバを構築しようとしている。そのために,前回, ‘--enable-fpm’ 付きの php.rpm を作ったわけだが, ‘rpm -ivh’ でインストールするときの依存関係でうんざりしたので,自分用にリポジトリを作ることにした(爆)。

    VPS 上。

  1. $ sudo adduser --gid xxxx myrepo
    ‘myrepo’ はリポジトリ用のユーザで, ‘xxxx’ は httpd ユーザグループの gid である。
    $ sudo passwd myrepo
  2. $ sudo chmod 710 /home/myrepo
  3. $ sudo su - myrepo
  4. $ mkdir public_html
  5. $ cd public_html
  6. $ mkdir x86_64
  7. $ exit

 まだ,記事にしていないのだが,実はすでに Apache httpd で suEXEC サポート用の構築をしている。そんなわけで, User と Group はそれ用のものがあるわけだ。この記事に出てくる設定で,ご自分用のリポジトリを作る場合は,各自のシステムに合わせて,用語を読み替えていただきたい。
 
 httpd conf から ‘Options Indexes’ を削除してあるのだが,リポジトリのディレクトリについては,インデックスを表示したい。そのためには, .htaccess において, ‘Options Indexes’ が使えないといけないので,以下のところを変えた。

    VPS の httpd conf において。

  1. userdir.conf (/etc/httpd/conf.d/userdir.conf) の次のところを変えた。
    UserDir enabled normuser1 —>> UserDir enabled normuser1 myrepo
        ↑ これは .htaccess のためではなく, ‘myrepo’ を使えるようにするためである。
    AllowOverride FileInfo AuthConfig Limit Indexes
    —>> AllowOverride FileInfo AuthConfig Limit Indexes Options=Indexes
  2. $ sudo systemctl restart httpd.service
  3. $ sudo su - myrepo
  4. $ cd public_html/x86_64
  5. $ vi .htaccess
    中身は ‘Options Indexes’ の一行。
  6. $ chmod 640 .htaccess
  7. $ exit
    開発用 VM 上。

  1. ‘rpmbuilder’ としてログオンし, rpm ファイルをリビルドする。
     
    注 1) 「初めての VPS-#5」において php.rpm のリビルドについて書いたわけだが,あのままで yum をやると,「パッケージ PACKAGE_NAME.rpm は署名されていません」と言われる。 yum を使うためには, rpm に署名がいるらしい。署名なしの rpm をインストールするには, ‘--nogpgcheck’ オプションを使う。 filezilla.rpm については,その方法でインストールした。
  2. リビルドした rpm ファイルに署名する。
    $ rpm --addsign rpmbuild/RPMS/x86_64/*
     
    当たり前だが,この作業前に GPG キーを作っておかないといけないので,作り方。

    • root 特権のユーザで VM にログオンする。
      $ sudo gpg --gen-key
      $ sudo gpg --export -a 'o6asan' > RPM-GPG-KEY-o6asan
      RPM-GPG-KEY-o6asan は公開鍵のファイルである。これを VPS の myrepo のドキュメントルート内の /x86_64 に Filezilla クライアントでアップロードする。
      $ sudo gpg -o file.secret --export-secret-key o6asan
      file.secret が秘密鍵である。これは, rpmbuilder の ホームディレクトリに移動する。
      $ sudo mv /home/vmowner/file.secret /home/rpmbuilder/file.secret
    • ‘rpmbuilder’ として VM にログオンする。
      $ gpg --import file.secret
      このコマンドは,秘密鍵,公開鍵ともにインポートしてくれる。
       
      $ vi .rpmmacros
      以下の 2 行を追記する。
      %_signature gpg
      %_gpg_name <Owner name>
       
      注 2) 実のところ,リビルドは ‘rpmbuilder’ でやるので,鍵も ‘rpmbuilder’ として作ろうとしたのだが,蹴られた。鍵の作成作業には, root 特権が必要なようである。
  3. すべての rpm ファイルを VPS の myrepo のドキュメントルート内の /x86_64 にアップロードする。
  4. VPS 上。
    $ sudo yum install createrepo
    $ sudo createrepo /path to/x86_64

 やっと,リポができたワイ。 URL は http://www17130ue.sakura.ne.jp/~myrepo/x86_64/
 次回は,使い方を書くつもり。

カテゴリー
Linux

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

The same article in English

 当初の予定では, 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

 こんなとこかな。

カテゴリー
WordPress

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

The same article in English

 さくらの 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 サポートに取り組んでみようかという気になっている。

カテゴリー
Linux

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

The same article in English

 はやぶさ 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
カテゴリー
Linux

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

The same article in English

 昨日の朝, 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 はこんな感じ。

カテゴリー
Linux

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

The same article in English

 くりくりさんのコメントに触発されて,さくらの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」を,勘 + キー操作でやる羽目になった。ヤレヤレ。