さくらのクラウドでSSH周りの設定を行う

さくらのクラウドにサーバーを追加する」で作成したサーバーにSSHの設定をしていきます。

設定内容は
・指定されたユーザーのみrootに昇格できる
・rootで直接ログインは不可
・ログインには公開鍵認証が必要
です。

それぞれ設定していきましょう。

さくらのクラウドなら手順を間違えたり、途中でコンソールを落としても大丈夫ですが、他クラウドや物理サーバーで手順を間違えると、二度とそのサーバーにログインできなくなる可能性があります。
さくらのクラウド以外の方はご注意ください。

指定されたユーザーのみrootに昇格できる

まず「指定されたユーザー」を追加しなくてはなりません。
今回は「sato」というユーザーを追加し、rootに昇格できるようにしてみます。

satoを追加
$ useradd sato

satoのパスワードを設定、入力したパスワードは表示されませんが、同じものを二度打って下さい
$ passwd sato

New password:
Retype new password:
passwd: all authentication tokens updated successfully.

satoを管理者グループに設定
$ usermod -G wheel sato

rootに昇格できるのは管理者グループのみとする
$ vi /etc/pam.d/su
コメントアウトを外す
#auth    required    pam_wheel.so use_uid
↓
auth     required    pam_wheel.so use_uid

これで、管理者グループに所属しているユーザーのみ、rootに昇格できるようになりました。
ターミナルをもう1つ開いて、satoでログインしrootに昇格できるか試してみましょう。

rootで直接ログインは不可

$ vi /etc/ssh/sshd_config

コメントアウトを外し、内容を変更します。
#PermitRootLogin yes
↓
PermitRootLogin no

保存したらsshdの再起動
systemctl restart sshd.service

これでrootで直接ログインできなくなりました。
ターミナルをもう1つ開いて、rootでログインを試してみましょう。

ログインには公開鍵認証が必要

ユーザー名とパスワードだけだと、総当りで突破されてしまう可能性があります。
セキュリティレベルを上げるために、特定の文字がかかれた「鍵」というファイルを持っているユーザーのみログインできるように設定しましょう。

公開鍵、秘密鍵を作成する
satoユーザーで作業します。
$ cd
$ ssh-keygen -t rsa
パスワード等入力求められるので、手順に従って作業していきましょう。

ここに鍵のペアが出来ます。
公開鍵:/home/sato/.ssh/id_rsa.pub
秘密鍵:/home/sato/.ssh/id_rsa
秘密鍵は今後自分のパソコンで使いますので、手元に転送しておきましょう。

公開鍵を作成しただけじゃ使えませんので、もう少し設定を入れていきます。

authorized_keysへ追加
cat /home/sato/.ssh/id_rsa.pub >> /home/sato/.ssh/authorized_keys

パーミッションを0600に変更
chmod 0600 /home/sato/.ssh/authorized_keys

ここまで設定できれば、公開鍵を使ったログインができるようになっています。
先程入力したパスフレーズと鍵を使って、ログインしてみましょう。

次に通常のパスワード認証でログインできないようにします。

$ vi /etc/ssh/sshd_config

PasswordAuthentication yes
↓
PasswordAuthentication no

保存したらsshdの再起動
systemctl restart sshd.service

通常のパスワード認証でログインを試してみましょう。
ログインできなくなっていれば成功です!

さくらのクラウドにサーバーを追加する

今回は「さくらのクラウド」にサーバーを追加してみます。

リージョンの選択

まず左上のセレクトボックスから「リージョン」と言われる、データセンターの拠点を選択します。
「東京第1ゾーン」「石狩第2ゾーン」「Sandbox」とありますが、今回は「東京第1ゾーン」を利用します。

サーバー追加

「サーバー」→「追加」と進み、細かい条件を入力していきます。

ディスクイメージ:CentOS7.3 64bit
サーバープラン:1GB / 1仮想コア
ディスクプラン:20GB SSDプラン
接続先のネットワーク:インターネット

サーバープランは気軽に変更できるので、まずは安いものにしておいたほうが良いと思います。
ディスクイメージは変更できませんので、最初にしっかりと決めましょう。
ディスクプランも変更は可能ですが、サーバープランほど簡単ではないので、こちらもどれくらいの容量使用するのか、SSDにして速度を求めるのか等、きっちりと決めておいたほうがよいです。
接続先のネットワークは「インターネット」を選びます。 複数台構成になってきた場合は「スイッチ」を選んで内部ネットワークを組みますが、今回は1台追加するだけですので。
こちらも後から変更は容易です。

サーバーの設定「管理者のパスワード」はrootのパスワードです。
推測されないよう、ランダムな文字列と12文字以上の長さで設定しましょう。
公開鍵は「なし」にします。 このサーバーの運用方針として
・指定されたユーザーのみrootに昇格できる
・rootで直接ログインは不可
・ログインには公開鍵認証が必要
とします。 上記設定に関しては「さくらのクラウドでSSH周りの設定を行う」をご覧ください。

ホスト名はサーバーに設定されるホスト名となります。
この項目はあとから変更可能ですが、PostfixなどのMTAが参照しますので、実際のサービスに合わせた名前が良いと思います。
サイトのホスト名に合わせて「takashina.net」とします。
作成数は「1」にしましょう。

ここまで入力して作成ボタンを押すと、課金確認が出てきて問題ないのなら「作成」を押します。
進捗画面が出てきて、全て「成功」になるとサーバー作成の完了です。

サイドメニューの「サーバ」をクリックすると先程追加したサーバーが表示されています。

これでサーバー作成は完了です。 作成するだけなら簡単にできますね。

KAGAWA Wi-Fiを利用する

香川県が提供している「KAGAWA Wi-Fi」というものがあります。
主に観光客と災害時の通信手段として提供されているサービスですが、香川在住の人もいつでも使うことが可能です。
スポットは県内に840箇所ほどあります。(2017/4/18現在)

使える場所はこのマークが目印です。 Wi-Fiマークにうどんが盛り込まれていて、いかにも香川らしいマークですね。

使い方は簡単。
Wi-Fiの使える施設に入ったら、Wi-Fiネットワーク一覧を表示し

KAGAWA-WiFi

のSSIDを選択します。 通信の暗号化はされていないため認証パスワードは求められません。 数秒で接続が完了します。 ただ、通信を利用するためにはもう少し手順が必要です。

ブラウザを起動&利用登録

ブラウザを起動して通信をすると以下のような画面が表示されます。
「インターネットを利用する」をタップして進みましょう。

利用規約に同意後、メールアドレス入力欄が出現します。
ここに自分のメールアドレスを入力しましょう。 特に確認メールなどは届きませんでした。

メールアドレスの入力が完了すると、インターネットが使えるようになります。
好きなサイトを閲覧したり、メールを送ったりすることが可能です。

KAGAWA Wi-Fiを使う上での注意事項

県内に接続ポイントが840箇所もあってとても便利なKAGAWA Wi-Fiですが、注意しなくてはならない点がいくつかあります。

1.利用時間と利用回数の制限
1回の接続で30分まで、1日8回接続することができます。
つまり1日240分(4時間)使うことができます。 普通の使い方ならこれで十分だと思いますが、いつでも無制限に使えるわけではないので注意しましょう。

2.通信は暗号化されていない
公衆Wi-Fiを使う上では必ず注意しないといけないことなのですが、KAGAWA Wi-Fiの通信は暗号化されていません。
認証されたお店などしかWi-Fiスポットにはなれませんが、「悪意のある管理者がゼロではない可能性がある」ということを覚えておいてください。
インターネットショッピングなどで個人情報やクレジットカード情報を入れる際には、ショッピングサイトがSSLに対応しているか(アドレスバーに鍵マークがついていればOK)。
ほぼ全てのメールは送信内容が受信内容が見られる可能性がある。
SSLに対応していないページの場合、閲覧や入力内容が全て見られる可能性がある。
SNSのアプリやソーシャルゲームアプリなどで、裏での通信がどうなっているかわからないものは多々ありますが、重要な情報を公衆Wi-Fiで送信するのは控えましょう。

PHP+Imagickで色の置換

環境

PHP:7.1.2
ImageMagick:6.7.8
PECL Imagick:3.4.3

いつの間にか

Imagick::paintOpaqueImage

が非推奨になっていた。

代替関数は

Imagick::opaquePaintImage

公式マニュアルはこちら

使い方はマニュアルの通りだけど、指定した画像(image.png)の「白色を黒色に置き換えたい」という場合は

$im = new Imagick('image.png');
$im->opaquePaintImage('#ffffff', '#000000', 0, false);
$im->writeImage('image.png');

のような感じ。

全てマニュアルに書いてあるが、
第一引数:置き換え元のカラーコード、今回の場合は白色
第二引数:置き換え先のカラーコード、今回の場合は黒色
第三引数:曖昧さを表す。 JPGなど白色といっても「#ffffff」のもあるし「#fffffe」もあるような場合。 0~100で指定。 0の場合は曖昧さは無し、#ffffffのもののみ置換する。 GIFやPNGなどの画像パーツっぽいものを置換する場合には0もしくは少なめ、JPGの場合は多めが良いと思う。
第四引数:false=白色を置換、true=白色以外を置換。 通常はfalseになるはず。
第五引数:有効なチャンネル数を指定するらしい。 画像形式には疎く、今回は全く必要なかったためスルー(デフォルト値を使用)

元の「Imagick::paintOpaqueImage」とは微妙に引数が変わっているので注意が必要です。

nginx+phpで404エラーページをカスタマイズする

WEBサーバーにnginxを使用している場合、カスタム404ページを出す場合には

error_page 404 /404.html;

のように設定し、カスタムした404ページを404.htmlとして作成すれば表示されます。

ですが、phpを使用している場合

File not found. 

と表示されてしまい、カスタムされた404ページを表示することができません。

原因としてはconfファイルで

location ~ \.php$ {
    fastcgi_pass  unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params;
}

のように、拡張子の末尾がphpの場合はどうする、という処理を書いているため、404検知ではなくfastcgi_passに渡って、そのパスにかかれているソフトウェアが入力スべきphpファイルがないよ、とエラーを吐いてしまう為です。

解決方法は単純で、

fastcgi_intercept_errors on;

という記述を足すだけです。

以下がphpファイルの場合でも、カスタムされた404を出す書式です。

location ~ \.php$ {
    fastcgi_pass  unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params;
    fastcgi_intercept_errors on;
}