鍵認証方式の仕組み/パスワードとパスフレーズの違いについて

SSHでログインする方法には、パスワード認証方式と鍵認証方式があります。
パスワード認証方式は、クライアントからサーバへユーザ名とパスワードを送信して認証するものであり、これらの情報はネットワーク上を流れます。 鍵認証方式は公開鍵暗号方式を利用した認証であり、パスワードがネットワーク上を流れる事はありません。

鍵認証の仕組み

  1. 鍵認証の準備(鍵の作成)をします。公開鍵と秘密鍵のペアを作成し、公開鍵はサーバ側に、秘密鍵はクライアント側に暗号化して保管します。
    ※サーバにて鍵を生成しクライアントへ鍵を渡す方法と、クライアントで鍵を生成し、サーバへ鍵を渡す方法があります。

    秘密鍵を生成する際には、暗号化して保管される秘密鍵を復号して使用可能にするためのパスフレーズを設定します。
    ※パスワード認証方式のパスワードとは全く別のものです。

  2. クライアントがサーバに接続するため接続要求を行います。(ユーザ名を送信します)
  3. サーバは乱数を生成し、公開鍵で暗号化してクライアントへ返します。またサーバは生成した乱数を使用して、サーバ側でハッシュ値を作成します。
  4. クライアントは、サーバから受け取った乱数を保管していた秘密鍵で復号化(※)します。 秘密鍵を使用する際に事前に設定したパスフレーズによって暗号化して保管されている秘密鍵を復号化します。
  5. クライアントは復号化された乱数からハッシュ値を計算します。
  6. クライアントは計算して得られたハッシュ値をサーバへ送信します。
  7. サーバは自分で生成したハッシュ値と、クライアントから受信したハッシュ値を比較して、一致していたら認証します。

各ステップにおける設定・登録方法などは別ページにてまとめます。

mysqlnd

※このコンテンツは以下の資料の内容を参考に記載しています。

http://derickrethans.nl/talks/andrey-mysqlnd.pdf

MySQLを利用する方法

PHPアプリケーションからMySQLを利用する方法(MySQLのクライアントライブラリ)はたくさんあります。
例)

  • mysql_connect
  • mysqli
  • PDO (MySQL ドライバ)
  • Doctirne
  • Zendquent
  • ADOdb
  • PEAR_MDB2
  • PEAR_DB

これらのライブラリがMySQLを呼び出すためには、最終的には前述のうちmysql拡張、mysqli拡張、PDO拡張(MySQLドライバ)のいずれかを呼び出しています。

  • mysql 拡張:php4の時代から使えた古くからある拡張
  • mysqli 拡張:mysql 拡張を刷新する形でphp5から利用可能なモジュール
  • PDO 拡張:それ自身がDB 抽象層であり、配下に多くの DBMS に対応したドライバが存在、そのなかのひとつがmysql

さらにこれらがMySQLと直接やり取りしているのではなく、
mysqlnd / libmysql → アクセスやプロトコル判断など
mysql / mysqli / pdo → 実際に接続
を行っています。

Screenshot-2014-10-13-at-02.46.30[1]

libmysqlとmysqlnd

さらにApplicationとMySQL Server の間には前述のライブラリの他に

  • libmysql
  • mysqlnd

という2つのライブラリが存在しています。

libmysqlは、MYSQL側が用意しているライブラリで、MySQL 利用者に対してC言語レベルでのAPIを提供するものです。
MySQLは、phpのみならずperl、python、rubyなどといった動的言語から利用可能なため、それらの言語からMySQLを利用するにあたり、このlibmysqlを呼び出しています。

mysqlndは、PHPの拡張モジュールとして実装された、MySQLのネイティブクライアントです。
libmysqlを介さないため、 MySQLサーバから受け取ったデータをそのままPHPの変数として表現することができ、オーバヘッドが減り、メモリも節約できることが特徴です。

※php5.4移行はmysqlndがデフォルトとなり、libmysqlはオプションとなりました。

CDNとは

CDNの目的

世界中に張り巡らされたサーバを通して、コンテンツにアクセスしようとするエンドユーザに最も近いサーバから効率的に配信する仕組みのことです。インターネット利用における「表示できない」「表示が遅い」「表示が止まる」を解決するためのサービスです。

コンテンツデリバリネットワーク(Contents Delivery Network, CDN)とは、Webコンテンツをインターネット経由で配信するために最適化されたネットワークのことである。コンテンツ配信網とも。

90年代以降ネットが一般に普及するにつれ、大手サイトからのリンクやテレビといった他メディアからのリンクにより、通常想定されていない大量のユーザーがサイトへ集中し、反応が遅くなったり、まったく応答不能になること(フラッシュクラウド効果)が多くなってきた。このような現象に対処する場合、サーバを一ヶ所だけに置くのではなく、地理的・バックボーン的に分散させるのが効果的である。

wikipediaより

通常、ユーザーがインターネット上のWebサイトへアクセスする際、Webサイト運営者のサーバへ直接アクセスします。
しかし突発的にアクセスが増加するとサーバへの負荷が増大し、サーバがダウンしてしまうことがあります。これを避けるための施策としてCDNの利用があげられます。

CDNの仕組み

CDNで利用されている多くはキャッシュサーバです。動作としては下記のようになります

  1. オリジンサーバに代わり、ユーザーからのリクエストを受ける
  2. ユーザーからリクエストされたコンテンツをオリジンサーバから取得する
  3. コンテンツをユーザーに返し、内部にコンテンツをキャッシュする
  4. キャッシュしたコンテンツはオリジンサーバから独立してキャッシュサーバが配信する。

CDNの主なメリット

CDNの主なメリットは高速化とピーク対策です。

サイトの高速化

Web通信はサーバとクライアント間の距離により、配信速度が制限されてしまうという特徴(弱点)があります。物理的に距離が離れているとそれだけ時間がかかります。そしてそれはコンテンツがリッチなページや動的なコンテンツの多いページでとなるほど、その違いが顕著に現れます。

そこで世界中に配置されたCDNを利用することで、オリジンサーバから取得したデータをキャッシュしておきアクセスしてきたユーザーにそれぞれ適したサーバからコンテンツを配信します。

ピーク対策

一度に多くのユーザがアクセスすると、サーバの応答に時間がかかることがあります。これはアクセス数がサーバの処理能力を超過したために発生します。
そのためにはアクセスに応じたサーバの増強を行う必要がありますが、突発的なアクセス増を予測してそれに備えることは難しいものです。

そこで世界中に配置されたCDNを利用することで、突発的なアクセス増においてもオリジンサーバにアクセスを集中させることなく、データをキャッシュしておいたCDNがコンテンツを配信することができます。

主要CDNサービス

Aakamai

世界最大手のCDN事業者「アカマイ・テクノロジーズ」が提供するCDNサービス。
世界102カ国以上、900以上の都市、1320以上のネットワーク、2700以上の拠点、170000台以上のサーバ群によって地球規模の負荷分散サービスをに提供しています。
Yahoo!、LINE、Apple、IBMといった名だたる企業がこの「Akamai」を利用しており、世界中のWebトラフィック全体の15~30%を配信していると言われています。

Amazon CloudFront

AWSを運営するAmazon社が提供するコンテンツ配信ウェブサービスです。
「Cloud Front」は、AWSのサーバーを使って画像や動画などの静的コンテンツを配信することで、高速表示させることが目的です。
料金体系は完全な「従量課金制」で、データ転送量とHTTPリクエスト回数による課金制になります。
設定に関する情報が豊富であることや価格体系が明らかになっている点はわかりやすいです。

Azure CDN

Azure Content Delivery Network (CDN) は、Microsoft社が提供するコンテンツ配信ネットワークサービスです。
東京にもエッジサーバが配置されており、日本のユーザーは世界中のAzureコンテンツ配信元のサーバーが、あたかも東京にあるかのように利用できます。
下記URLから料金予測を行えます。
http://azure.microsoft.com/ja-jp/pricing/details/cdn/

cloud flare

cloud flareはcloud flare社が提供するCDNで無料で利用することが可能です。
転送量に関しても「無制限」なので、無料版でも十分すぎるほどのクオリティです。
なお「Pro版」や「Business版」といった有料版もあり、無料版との違いは、
1,SSL通信対応
2,プリロードが可能
3,WAFのような仕組みで、SQLインジェクションや、XSSを試みるリクエストに対しての対策
などが行えます。
※「Pro版」では1ドメインにつき、「$20 / 月」の固定費用

地域分散・地域冗長

地域分散、地域冗長について調べていたのですが、
・冗長化(障害発生時でもシステムが止まらないための対応)
・コンテンツ配信の高速化、高品質化(CDNなど)
が混在してしまい、いったん整理のために切り分けて考えたいと思います。

※整理ができたらこのページを改めてまとめページとします。(ページタイトルも変わるかもしれません)

CPU

※このコンテンツは以下の書籍の内容をもとに記載しています。
・「PC自作の鉄則!2015」
・「買う 組む 強化する 自作PCバイブル2015」

CPUとは

CPUはパソコン全体の処理や計算を行う重要な役割を担い、パソコンの処理性能を大きく左右するパーツです。
CPUの基本的な特性は「マイクロアーキテクチャー」によって決まります。マイクロアーキテクチャーとはCPUにおける命令の取り込み(フェッチ)、解釈(デコード)、実行など各機能の実装の形式です。同時にデコードできる命令の数や内部で実行状態にしておける命令の数、命令実行ユニットが何個あってキャッシュの接続がどうなっているかなどはマイクロアーキテクチャーによって決まります。「CPU設計を新しくした」というときはマイクロアーキテクチャーを改良した場合と、周辺機能を強化したり、組み合わせを変えたりした場合のどちらか、あるいは両方の意味があります。
単純にCPUの性能といった場合、通常はマイクロアーキテクチャーに依存している演算の能力を指すことが多いです。

CPUの性能について

実際にCPUを選ぶ際に注意したいポイントは以下の3つです。

  1. 動作周波数
  2. コアの数
  3. スレッドの数

これらはCPUの性能に直結するため、必要なスペックの製品を購入します。処理能力が高く、高性能なモデルは消費電力が大きく発熱量も大きいです。さらに価格も高くなることに注意が必要です。

動作周波数

CPUの性能に表記されている「○GHz」の部分を動作周波数(クロック)といいます。この数値はコアの性能を示しており、大きいほど処理が速いことを示しています。
※他の要素が同じ場合、動作周波数が2倍なら2倍速いと考えてよい

コア数

計算を行う「コア」は多いほどプログラムを効率的に動かすことができ、パソコンの処理能力がアップします。(複数あれば同時処理が可能になる)
ただし処理によって同時には処理できないことがあるため、4コアのCPUの性能が2コアの2倍になるとは限りません。

スレッド数

スレッド数は仮想的に存在するコア数も含めたトータルのコア数を示しており、多いほうが処理能力が高いことを示しています。
Intel社の「Hyper-Threading」技術(※)を搭載した製品は、1個のコアにふたつの処理を実行させ、スレッド数を増やしています。
(※)Hyper-Threading
1つの演算コアを2つに見せかけてスレッドを同時に実行し、性能を向上させるIntelの独自技術

CPUの型番

CPUはさまざまな種類のものが発売されており、名前を見ただけではどんな製品なのかわからないこともあります。
そこで型番のルールを理解しておくことで、シリーズ名に続く数字やアルファベットを確認しスペックや対応規格をチェックすることができます。
基本的に数字の大きいほうが新しく高スペックな製品です。
ここではIntelのCPUの型番について説明します。

基本

基本的に型番は下記のような規則でつけられています。

[シリーズ名]-[4ケタの数字][アルファベット(ない場合も)]
例)Core i7-5960X

まず先頭にシリーズ名が明記されます。現在のシリーズ主流は2013年6月に登場した第4世代Core iシリーズです。
続く4ケタの数字の最初の1つがアーキテクチャの世代を示し、後ろの3ケタが型番を示します。(型番は大きいほど新しく性能が良い)
最後のアルファベットは規格を示します。下記にその一例をまとめます。

何もついていない場合

普通のCPU

K

最大クロック数を調整できる

S/T

電力性能のよいモデル。TはSよりもさらに省電力

M

mobileの略。ノートパソコン向け商品

X

ハイエンドモデル

R

ハイパフォーマンスグラフィックス内蔵のパッケージを搭載

 

今回購入した製品

今回はサーバでの使用用途のため一定程度の処理能力が必要であることなどからCore i3シリーズ 4170を購入。(4160シリーズが在庫切れということとお店の方のおすすめということで選択)

IMG_20150718_180206[1]

INTEL CORE i3-4170

マザーボードへの取り付け

IMG_20150718_180219[1]

1.CPUを取り付けるためマザーボード上にあるソケットのふたを開けます。黒いプラスチック製の保護カバーはこの時点ではまだ外さない。細い金属製のレバー先端付近を押し込みながら外側にずらしてロックを外します。

2.ロックを外したら、レバーをそのまま上に持ち上げます。レバーを後ろに倒していくと、途中からふたも一緒に持ち上がります。レバーを最後まで倒すとふたも後ろに倒れて完全に開きます。

3.CPUの外箱を開け、内箱からCPUの入った樹脂ケースを引き出します。(この時点ではまだCPUクーラーは出しません)
CPUを取り出すために樹脂ケースのふたをあけ、ケースの上下にスペースがあるのでそこに指をいれてCPUをつまみ、ケースから取り出します。

4.CPUをマザーボードに取り付けます。CPUは取り付ける向きが決まっており、左右の切り欠きと三角形の刻印の位置を確認しておきます。CPUを真上からCPUソケットにそっと載せます。
(上記の写真はCPUをCPUソケットにのせたところです)

5.CPUをソケットに正しくおさめたらあふたを指でつまみそっと閉じます。ふたの先端はマザーボード上の金具にひっかけます。

6.ふたを閉じたらゆっくりとレバーを下ろします。途中から力がかかるのでレバーを外側にずらしながら押し込みます。レバーを押し込むとふたについていた保護用カバーが外れるのでマザーボード上から取り出します。(保護カバーは保管しておきます)

CPUクーラーのとりつけ

パソコンが動作するとCPUは発熱します。CPUによって許容できる温度が決まっており。それを超えてしまうと本来の性能を発揮できなかったりパソコンが強制終了したりします。
CPUクーラーはピンが1つ外れているだけでも冷却効果が下がってしまうため、しっかり取り付けます。

IMG_20150718_180927[1]

1.CPUの内箱からCPUクーラーを取り出します。CPUクーラーに乗っている透明のふたを外します。

2.CPUクーラーを取り出したら、取り付ける前に向きを確認します。CPUクーラー用ファインの電源ケーブルがマザーボード上の電源端子に無理なく届くようにします。(CPUクーラー用ファンは「CPU_FAN1」と書かれた4ピンの電源端子につなぎます。最後につなぎます)

3.CPUクーラーを真上からCPUの上に載せます。この時、CPUクーラーの周囲にある4つのピンはCPUソケットの周囲にある穴に入れます。
4つのピンがすべて穴に入っていることを確認したら、ピンを真上から押し込んでCPUクーラーをマザーボードに固定します。(きちんと押し込むとパチンという感触がある)

4.最後に先ほどチェックした「CPU_FAN1」と書かれたマザーボード上の電源端子にCPUクーラー用のファンをつなぎます。

 

サーバ零号機の作成

IMG_20150718_172839[1]

約3か月前にサーバ初号機を組み立てました。しかしながら「とにかく動作させる」ことに汲々となりそれぞれのパーツの意義を考える余裕もなかったため、確認のためにもう1台作成することとしました。

零号機と名付けた今回のマシンの作成は、前回の初号機とはストレージをHDDからSSDに変更した以外は共通のパーツを利用します。確実に動作することを優先し1つ1つのパーツの意義を確認しながら進めます。

購入したパーツ

CPU

INTEL Core i3-4170

マザーボード

ASRock H81M-HG4

SSD

SUMSUNG 850EVO MZ-75E120B/CP(SATA6.0 120GB SDカード)

メモリ

DDR3-1600 4GB

電源ユニット

玄人志向 KRPW-L4-400W/A

PCケース

ENERMAX ECA3360B-GT(U3)(FulmoQ ATX)

findとxargsとgrepを使って、特定の文字列を含むファイルを見つける方法

find [ディレクトリパス] -name "検索したいファイル名" | xargs grep "検索したい文字列"

find

findは指定のディレクトリ以下の条件に合致したパスを検索し一覧を出力するコマンドです。
最初の引数には検索対象のディレクトリパスを記述します。

例)

現在いるディレクトリ以下のファイルの一覧を出力されます。

条件を加える事でその条件に合致したパスを絞り込むことができます。
-nameはファイル名の指定をすることができます。

例)

現在いるディレクトリ以下のファイルを参照し、「●●.php」ファイルの一覧を出力する

xargs

xargsは標準入力からファイルの一覧を受け取り、そのファイルの一覧を任意のコマンドに引数として渡すコマンドです。
※複数行をまとめてコマンドに渡す。
詳しくはxargsを参照

grep

標準入力からデータを受け取り、その中から指定された文字列を含む行を抜き出して出力する文字列を検索するコマンドです。

書式

対象のディレクトリ以下で、検索したいファイル名に含まれる検索したい文字列を出力します。
例)

※出力結果
は下記のような「ファイルパス:文字列が含まれている行の記述」となります。
例)

<備考>
前述のxargsを含めない場合は、標準入力の内容から指定された文字列を含むファイル名を抜き出して出力します。
例)

※出力結果はファイルパスが標準出力で表示されます。