メールを書くときに使う文法はRFC 5322です。
- 前回の勉強内容
- メールのざっくりした流れ図
- メールを書くときにRFC 5322を使います。
- ヘッダ情報は、「フィールド名:フィールド本文CRLF」で構成されます。
- はてなブログからもらったメールを土台に見てみます。
- 次回の勉強内容
前回の勉強内容
メールのざっくりした流れ図
メールを書くときにRFC 5322を使います。
インターネット標準 RFC 5322(旧 RFC 822)に準拠した電子メールにおいて,ヘッダと本体を区別する方法はどれか。
ア. <header>と </header>で囲まれた部分をヘッダ,
とで囲まれた部分を本体とする。
イ. 1個のピリオドだけから成る行の前後でヘッダと本体を分ける。
ウ. Subjectフィールドがヘッダの最後であり,それ以降を本体とする。
エ. 最初に現れる空行の前後でヘッダと本体を分ける。>>>正解
平成26年秋期問20 メールヘッダと本体を区別する方法|情報処理安全確保支援士.com
RFC 5322とは、メールのフレームワークにおいてコンピュータ利用者間で送信されるテキストメッセージの文法です。
RFC 5322とは、IETFが発行するRFCという文書の一つで、電子メールのフレームワークにおいてコンピュータ利用者間で送信されるテキストメッセージの文法、インターネットメッセージフォーマット(IMF)を規定しています。
いつもメーラーによろしくやってもらっているけどちゃんと決まりがあるんです!
IETFとは、インターネット技術の標準を定める団体です。
IETFは、インターネット技術の標準化を推進する任意団体です。 コンピュータシステムを相互接続するため、 共通の技術仕様策定を議論するグループから発展したものです。
インターネット用語1分解説~IETFとは~ - JPNIC
RFCとは、インターネットの標準を定めた文書です。
RFC 【Request For Comments】
RFCとは、インターネット技術の標準化などを行うIETF(Internet Engineering Task Force)が発行している、技術仕様などについての文書群。TCP/IP関連のプロトコル(通信規約)の標準仕様などが記されたもので、インターネット上で公開されており誰でも入手・閲覧することができる。
RFC(Request For Comments)とは - IT用語辞典 e-Words
- (旧 RFC 822)って書いてあるのは、いろいろ改訂してきたからなんです。
- 1982年 : RFC 822: Standard for the Format of Arpa Internet Text Messages
- 2001年 : RFC2822(Internet Message Format) : RFC 822の改訂版
- 2008年 : RFC5322(Internet Message Format) : RFC 2822の改訂版
ヘッダ情報は、「フィールド名:フィールド本文CRLF」で構成されます。
メールの情報は、フィールドを定義して書かれています。
ヘッダフィールドは、フィールド名の次にコロン(":")、次にフィールドの本文、最後に CRLF で終了する行である。フィールド名は(コロンを除く)印刷可能な US-ASCII 文字で構成されなければならない。フィールド本文は CR と LF とを除く任意の US-ASCII 文字のほかに、空白・水平タブの各文字で構成されてよい。<省略>
必須のヘッダフィールドは発信日付フィールドと発信元アドレスフィールドだけである。それ以外のすべてのヘッダフィールドは文法的にはオプションである。
2.2. ヘッダフィールド | RFC5322(Internet Message Format)
発信日付フィールドには、メール配送システムへの投入準備ができたことをメッセージ作成者が示した日付と時刻を書きます。
Date: Sat, 24 Feb 2018 12:59:20 +0900
発信元フィールドには、メッセージの送信元のメールボックスを書きます。
発信元フィールド | 書く内容 |
---|---|
From: | メッセージの作者のアドレス |
Sender: | メッセージの実際の送信に責任を持つ代理人のメールボックス(実際に送った人的な) このフィールドがない時は送信者が作者と同一ということ。 |
Reply-To: | メッセージの返信先 このフィールドがない場合の返信先はFrom:にあるアドレス |
From: "はてなブログ " < noreply+blog-anniversary_mail@hatena.ne.jp>
宛先アドレスフィールドには、メッセージの受信者を書きます。
宛先アドレスフィールド | 書く内容 |
---|---|
To: | メッセージの主要な受信者 |
Cc: | メッセージの内容はその人たちに向けられたものではないかもしれないが、それを受け取るべき人のアドレス |
Bcc: | メッセージの受信者を表すが、他の受信者に公開されないアドレス |
To: hoge@hoge.com
識別フィールドは、必須じゃないんだけど「書くべき」とされています。
「Message-ID:」フィールドには、ユニークなメッセージ識別子を書きます。
Message-Id: <20180224035920.A26A21B80B9@smtp01.hatena.ne.jp>
「Message-ID:」フィールドを書くことで、特定のメッセージの特定のバージョンを表しユニーク性はそれを生成したホストによって保証されます。
メッセージ識別子は機械的に読み取られることを目的としており、その後に修正されたメッセージはそれぞれ新しいメッセージ識別子を持つことになります。
識別フィールド | 書く内容 |
---|---|
Message-ID: | ユニークなメッセージ識別子 |
In-Reply-To: | 返信元メッセージの「Message-ID:」フィールドの内容 |
References: | 返信元メッセージの識別フィールドの値 |
情報フィールドには、メッセージに関して人が読むことのできる情報を書くけど必須ではありません。
「Subject:」には、メッセージの見出しを表す短い文字列、件名を書きます。
Subject: はてなブログ/ponsuke_tarou(id: ponsuke_tarou) さま、ponsuke_tarou’s blogを開設して1年が経ちました
返信では、「Re:」の後に元のメッセージの "Subject:" フィールドの内容を続けてもいいです。必須ではありません。
他の文字列や二つ以上の "Re: " が使用されるのは望ましくないため、文字列 "Re: " をひとつだけ使うのが好ましいそうです。
そういえば、社会人なり立ての十数年前にメーラの件名では見切れるぐらい「Re:」が連続しているメールをちょいちょい見かけて「わかりずらいよ」と思ったことがありました。
情報フィールド | 書く内容 |
---|---|
Subject: | メッセージの見出しを表す短い文字列、件名 |
Comments: | メッセージボディに関する任意の追加コメント |
Keywords: | 受信者にとって役に立つかもしれない重要な単語や語句のカンマ区切りリスト |
再送フィールドには、メッセージの特定の再送に関連する情報を書きます。
再投入のたびに個別の再送フィールドの集合が追加されるべきである(SHOULD)。メッセージの特定の再送に関連するすべての再送フィールドはひとまとめにして置かれるべきである(SHOULD)。再送フィールドの新しい集合はメッセージの先頭に追加される。したがって、もっとも新しい再送フィールドがメッセージの前方に現れる。再送フィールドが追加されるとき、そのメッセージの他のフィールドは変更されない。<省略>
再送フィールドは、そのメッセージがユーザーによって配送システムに再投入されたことを識別するために使用される。再送フィールドを使用する目的は、最終受信者に対してそのメッセージが元の送信者から(元のフィールドはすべて同じままで)直接送られたかのように見せることである。
RFC5322(Internet Message Format)
返信の時に欲しいフィールド | 対応する再送フィールド | 内容 |
---|---|---|
MUST | Resent-Date: | メッセージの再送信者がその再送メッセージを発信した日付と時刻 |
MUST | Resent-From: | メッセージを再送した人またはシステムのメールボックス |
「Resent-From:」と同じ場合、使用されないべき(SHOULD NOT)。 | Resent-Sender: | 一人または複数の人に代わってメッセージを再送した個人 |
SHOULD | Resent-Message-ID: | 再送メッセージのためのユニークな識別子 |
※. 他にもフィールドはあります。
トレースフィールドは、情報提供用です。
- このフィールドの詳しい文法は、RFC 5321 - Simple Mail Transfer Protocolに定義されているそうです。
Received: by 10.100.164.108 with SMTP id h99csp1614716pje; Fri, 23 Feb 2018 19:59:21 -0800 (PST) Return-Path: <noreply+blog-anniversary_mail@hatena.ne.jp> Received: from smtp01.hatena.ne.jp (gw.hatena.ne.jp. [59.106.108.66]) by mx.google.com with ESMTP id a21sixxxxxxxpgw.xxx2018.02.23.19.59.20 for <hoge@hoge.com>; Fri, 23 Feb 2018 19:59:21 -0800 (PST)
はてなブログからもらったメールを土台に見てみます。
Delivered-To: hoge@hoge.com Received: 一番上の Received が受信側メールサーバ X-Google-Smtp-Source: 「X-」始まりで、Gmailがつけている X-Received: by 「X-」で始まる項目は、メール送信者やサーバ側で任意に設定できる ARC-Seal: i=1; a=rsa-sha256; t=.................................. ARC-Message-Signature: i=1; a=rsa............................ ARC-Authentication-Results:.......................................... Return-Path: <noreply+blog-anniversary_mail@hatena.ne.jp>送信先のメールアドレスに届けられない場合、サーバが自動的に送信者へ通知するための宛先 Received: 経由したサーバのIPアドレスやドメイン名、送信元のIPアドレスやドメイン名などで、経由したサーバの数だけ Received が記録される Received-SPF: SPF認証情報とドメイン送信元サーバーを照合した結果 Authentication-Results: 送信ドメイン認証の結果。RFC 5451にて標準化 Received: from ヘッダ一番下の Received が送信元 From: "はてなブログ " < noreply+blog-anniversary_mail@hatena.ne.jp> To: mana.ukigaya.opentone@gmail.com Subject: はてなブログ/ponsuke_tarou(id: ponsuke_tarou) さま、ponsuke_tarou’s blogを開設して1年が経ちました Date: Sat, 24 Feb 2018 12:59:20 +0900 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="メールを情報を区切る文字" Message-Id: <20180224035920.A26A21B80B9@smtp01.hatena.ne.jp> --メールを情報を区切る文字 Date: Sat, 24 Feb 2018 12:59:20 +0900 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 メッセージ本文の部分 メッセージのボディは単純な US-ASCII 文字からなる行である。ボディに課される制限は以下の二つだけである: CR と LF とは CRLF としてのみ現れなければならず(MUST)、ボディ内にそれらが独立して現れてはならない(MUST NOT)。 ボディ内の各行は CRLF を除いて 998 文字までに制限されなければならならず(MUST)、78 文字までに制限されるべきである(SHOULD)。 [http://srgia.com/docs/rfc5322j.html#p2.3:title] --メールを情報を区切る文字 Content-Type: MIME-Type; name="添付ファイルの名前" Content-Disposition: attachment; filename="添付ファイルの名前" Content-Transfer-Encoding: base64 添付ファイルを文字にしたもの --メールを情報を区切る文字--
次回の勉強内容
プログラムの気持ちを理解したいから逆ポーランド表記法
- 前回の勉強内容
- 逆ポーランド表記法とは、コンピュータが理解しやすい記述方法です。
- 「逆」じゃないポーランド表記法とは、演算子を数値の前に置く記法です。
- 人がよく使うのは、中置記法です。
- 次回の勉強内容
逆ポーランド表記法とは、コンピュータが理解しやすい記述方法です。
- 別名 : Reverse Polish Notation / 後置記法
- 数式やプログラムを記述する方法の一種。
- コンピュータで処理するのに都合のいい形の、数式の書き方。
ポーランド記法をコンピュータでの利用に適した形に改変したものである。
逆ポーランド記法 - Wikipedia
コンピュータのプログラミングにおいて、算術式を表記する手法の一つである。
逆ポーランド記法とは何? Weblio辞書
コンピュータで数式を計算する時、逆ポーランド法が都合が良い方法ため利用します
数式を逆ポーランド法に変換するための事柄
逆ポーランド記法で記述された数式x 1 2 - 3 + =は、「xに1から2を引いた(-)ものに3を足して(+)代入する(=)」と読むことができます。 より機械的な表現にすれば「xに、1に2を-して、それに3を+して、それを=する」と読むこともできます。 つまり、この表記においては、演算対象と演算処理が処理順に記述されることになります。 プログラミングなどではx = 1 - 2 + 3;といった式を書きますが、実は実行時にはスタックというものを使って逆ポーランド記法的に計算しています。
二分木を使った数式の逆ポーランド記法化と計算 - Programming/Tips - 総武ソフトウェア推進所
「A+B×C」の逆ポーランド表記法はどうなるでしょう?
式A+B×Cの逆ポーランド表記法による表現として,適切なものはどれか。
ア. +×CBA イ.×+ABC ウ. ABC×+ エ.CBA+×
平成23年秋期問1 逆ポーランド表記法|情報処理安全確保支援士.com
演算子を被演算子の後に記述します。
逆ポーランド記法の利点
- カッコが不要
- 左から順に処理していけば計算結果が得られる
ここでは、Y=(A+B)×(C-(D÷E))という式をポーランド表記法で表現する例を説明します。 木で表現し、節から上に出るときにそこの記号を書いていくと以下のようになります。
ポーランド表記法―逆ポーランド記法の利点や欠点、例など
「逆」じゃないポーランド表記法とは、演算子を数値の前に置く記法です。
- 別名 : Polish notation / 前置記法
ポーランド記法とは、数式表現の表記法の一つで、演算子を数値の前に置く記法のことである。考案者がポーランド人の論理学者であったことからこのように呼ばれる。
ポーランドきほうとは何? Weblio辞書
次回の勉強内容
MacにHomebrewでPostgreSQLをインストールしてデータベースを作る
環境
OS : macOS Hight Sierra v10.13.2
Homebrew : 1.5.2
HomebrewでPostgreSQLをインストールして起動する
Homebrewを最新化してインストールする準備をする
# 異常がないか確認する $ brew doctor Your system is ready to brew. # アップデートする $ brew update Updated 5 taps (homebrew/science, homebrew/core, homebrew/php, homebrew/versions, caskroom/cask). ==> New Formulae amber kallisto <省略> # バージョンを確認する $ brew -v Homebrew 1.5.2 Homebrew/homebrew-core (git revision 5c4df; last commit 2018-01-25)
HomebrewでPostgreSQLをインストールする
# どんなバージョンがあるか確認する $ brew search postgresql ==> Searching local taps... postgresql postgresql@9.4 postgresql@9.5 postgresql@9.6 ==> Searching taps on GitHub... caskroom/cask/navicat-for-postgresql caskroom/cask/photo-supreme-postgresql ==> Searching blacklisted, migrated and deleted formulae... # 今回はv9.6をインストールする $ brew install postgresql@9.6 <省略> ==> Caveats If builds of PostgreSQL 9 are failing and you have version 8.x installed, you may need to remove the previous version first. See: https://github.com/Homebrew/legacy-homebrew/issues/2510 To migrate existing data from a previous major version (pre-9.0) of PostgreSQL, see: https://www.postgresql.org/docs/9.6/static/upgrading.html To migrate existing data from a previous minor version (9.0-9.5) of PostgreSQL, see: https://www.postgresql.org/docs/9.6/static/pgupgrade.html You will need your previous PostgreSQL installation from brew to perform `pg_upgrade`. Do not run `brew cleanup postgresql@9.6` until you have performed the migration. This formula is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula. If you need to have this software first in your PATH run: echo 'export PATH="/usr/local/opt/postgresql@9.6/bin:$PATH"' >> ~/.bash_profile For compilers to find this software you may need to set: LDFLAGS: -L/usr/local/opt/postgresql@9.6/lib CPPFLAGS: -I/usr/local/opt/postgresql@9.6/include To have launchd start postgresql@9.6 now and restart at login: brew services start postgresql@9.6 Or, if you don't want/need a background service you can just run: pg_ctl -D /usr/local/var/postgresql@9.6 start ==> Summary 🍺 /usr/local/Cellar/postgresql@9.6/9.6.6: 3,273 files, 36.8MB
環境変数を設定する
# PATHを設定する $ echo 'export PATH="/usr/local/opt/postgresql@9.6/bin:$PATH"' >> ~/.bash_profile $ source .bash_profile $ printenv PATH /usr/local/bin:/Users/mana/.phpenv/shims:/Users/mana/.phpenv/bin:/usr/local/bin:/Users/mana/.phpenv/shims:/Users/mana/.phpenv/bin:/usr/local/opt/postgresql@9.6/bin:/usr/local/Cellar/ant/1.10.0/libexec/bin:/usr/local/bin:/usr/local/sbin:/Users/mana/.nodebrew/current/bin:/Users/mana/bin/Sencha/Cmd/6.0.2.14/..:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin # デフォルトのデータディレクトリの場所を設定する $ echo 'export PGDATA="/usr/local/var/postgres"' >> ~/.bash_profile $ source .bash_profile $ printenv PGDATA /usr/local/var/postgres
PostgreSQLのデータベースクラスタを作成する
$ pg_ctl initdb -o "-E utf8 -U postgres" The files belonging to this database system will be owned by user "mana". This user must also own the server process. The database cluster will be initialized with locale "ja_JP.UTF-8". initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8" The default text search configuration will be set to "simple". Data page checksums are disabled. creating directory /usr/local/var/postgres ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: /usr/local/Cellar/postgresql@9.6/9.6.6/bin/pg_ctl -D /usr/local/var/postgres -l logfile start
概要
pg_ctl init[db] [-s] [-D datadir] [-o initdb-options]
説明
initまたはinitdbモードはPostgreSQLの新しいデータベースクラスタを作成します。 データベースクラスタとは、単一のサーバインスタンスで管理されるデータベースの集合です。 このモードはinitdbコマンドを呼び出します。 詳しくはinitdbを参照して下さい。
オプション
-D datadir
データベース設定ファイルのファイルシステム上の場所を指定します。 これが省略された場合、環境変数PGDATAが使われます。
-o initdb-options
initdbコマンドに直接渡すオプションを指定します。
このオプションは、確実にひとまとめとして渡すために、通常は単一引用符または二重引用符で囲まなければなりません。
pg_ctl
initdb — PostgreSQLのデータベースクラスタを新しく作成する
概要
initdb [option...] [ --pgdata | -D ] directory
オプション
-E encoding
テンプレートデータベースの符号化方式を選択します。
-U username
データベースのスーパーユーザのユーザ名を選択します。 initdbを実行している実効ユーザの名前がデフォルトです。 スーパーユーザの名前はあまり重要ではありませんが、慣習的に使われているpostgresを(オペレーティングシステムのユーザ名と異なっていても)使っても良いでしょう。
initdb
PostgreSQLサーバを起動してみてみる
$ pg_ctl status pg_ctl: no server running # 起動する $ pg_ctl -D /usr/local/var/postgres -l logfile start server starting $ pg_ctl status pg_ctl: server is running (PID: 68826) /usr/local/Cellar/postgresql@9.6/9.6.6/bin/postgres "-D" "/usr/local/var/postgres" # バージョンをみてみる $ psql -V psql (PostgreSQL) 9.6.6 # データベース一覧をみてみる $ psql -l -U postgres List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows) # ユーザ一覧をみてみる $ psql -c 'select * from pg_user' -U postgres usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+----------+----------- postgres | 10 | t | t | t | t | ******** | | (1 row) # ロール一覧をみてみる $ psql -c 'select * from pg_roles' -U postgres rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid -------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------ postgres | t | t | t | t | t | t | -1 | ******** | | t | | 10 pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200 (2 rows)
psql — PostgreSQLの対話的ターミナル
概要
psql [option...] [dbname [username]]
オプション
-c command
psqlに対し、指定のコマンド文字列commandを実行するよう指示します。 このオプションは繰り返すことができ、また-fオプションと任意の順序で組み合わせることができます。 -cまたは-fが指定されると、psqlは標準入力からコマンドを読み取りません。 その代わりに、すべての-cオプションおよび-fオプションを順に処理した後、終了します。
-l
利用可能な全てのデータベースを一覧表示し、終了します。 この他の接続に関連しないオプションは無視されます。
-U username
デフォルトのユーザではなくusernameユーザとしてデータベースに接続します (当然、そうする権限を持っていなければなりません)。
-V
psqlのバージョンを表示し、終了します。
psql
pg_user
pg_userビューはデータベースユーザに関する情報へのアクセスを提供します。 これはパスワードフィールドを隠蔽したpg_shadowを公に読めるようにしたビューです。
50.81. pg_user
pg_roles
pg_rolesビューはデータベースのロールに関する情報を提供します。 これは単に一般に公開されているpg_authidのビューですが、パスワード列が空白になっています。
50.72. pg_roles
データベースを作ってつなげる
PostgreSQLのユーザを作成する
$ createuser -d -e -P mana -U postgres Enter password for new role: Enter it again: CREATE ROLE mana PASSWORD 'md5a6747d5690695f2d69c556af98aca23b' NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN; # ユーザ一覧で確認する $ psql -c 'select * from pg_user' -U postgres usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig ----------+----------+-------------+----------+---------+--------------+----------+----------+----------- postgres | 10 | t | t | t | t | ******** | | mana | 16384 | t | f | f | f | ******** | | (2 rows) # ロール一覧で確認する $ psql -c 'select * from pg_roles' -U postgres rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid -------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------- postgres | t | t | t | t | t | t | -1 | ******** | | t | | 10 pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200 mana | f | t | f | t | t | f | -1 | ******** | | f | | 16384 (3 rows)
createuser — 新しいPostgreSQLのユーザアカウントを定義する
概要
createuser [connection-option...] [option...] [username]
オプション
username
作成するPostgreSQLユーザの名前を指定します。
-d
新しいユーザに対してデータベースの作成を許可します。
-D
新しいユーザに対してデータベースの作成を禁止します。 これはデフォルトです。
-e
createuserが生成しサーバに送信するコマンドを出力します。
-U username
接続に使用するユーザ名です(作成するユーザの名前ではありません)。
-P
このオプションが指定されると、createuserは新しいユーザのパスワードのプロンプトを表示します。 もしパスワード認証を使う予定がなければ、これは必要ありません。createuser
データベースを作成する
$ createdb -e -O mana first-db "はじめてのPsgreSQLのDB" -U postgres CREATE DATABASE "first-db" OWNER mana; COMMENT ON DATABASE "first-db" IS 'はじめてのPsgreSQLのDB'; # データベース一覧で確認する $ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- first-db | mana | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)
createdb — 新しいPostgreSQLデータベースを作成する
概要
createdb [connection-option...] [option...] [dbname [description]]
オプション
dbname
作成するデータベースの名前を指定します。 この名前はクラスタ内の全てのPostgreSQLデータベースの中で一意でなければなりません。 デフォルトでは、現在のシステムユーザと同じ名前でデータベースを作成します。
description
新しく作成されるデータベースに関連付けるコメントを指定します。
-e
createdbが生成し、サーバに送信するコマンドをエコー表示します。
-O owner
新しいデータベースの所有者となるデータベースユーザを指定します。 (この名前は二重引用符で囲まれた識別子として処理され
createdb
データベースに繋いでみる
$ psql -U mana -d first-db psql (9.6.6) Type "help" for help. # データベース一覧をみてみる first-db=> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- first-db | mana | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows) # ロール一覧をみてみる first-db=> \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- mana | Create DB | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} # テーブル一覧をみてみる(まだ何もない) first-db=> \d No relations found. # 終了してみる first-db=> \q
psql — PostgreSQLの対話的ターミナル
概要
psql [option...] [dbname [username]]
オプション
-d dbname
接続するデータベースの名前を指定します。 コマンドラインでオプション以外の最初の引数としてdbnameを指定するのと同じ効力を持ちます。
-U username
デフォルトのユーザではなくusernameユーザとしてデータベースに接続します (当然、そうする権限を持っていなければなりません)。
psql
思い出の一枚
EclipseでMavenプロジェクトを作成する方法
Mavenは、Project Object Modelに基づいたJavaのプロジェクト管理ツールです。
ビルドやテスト、依存ライブラリ追加は自動化できる!:Eclipseプラグインq4eでカンタンMaven入門(前編)(1/3 ページ) - @IT
Maven Project を作ります。
- 環境
聞いたことはあるけどよく知らないMyBatisにちょっと近づいてみる
- MyBatisは、O/Rマッパーです。
- ということでMyBatisは、リレーショナルデータベースとJavaプログラムを手軽につなげてくれるフレームワークです。
- Eclipseを使う場合の便利なプラグイン
- MyBatisでエラーになって困った事例集
MyBatisは、O/Rマッパーです。
O/Rマッパーっていうのはオブジェクト指向のプログラムとリレーショナルデータベースをつなげてくれます。
O/RマッパーはObject/Relationalマッパーの略で、オブジェクト指向のプログラムと、RDBをライブラリで橋渡ししようという考え方です。
cfm-art.sakura.ne.jp
ということでMyBatisは、リレーショナルデータベースとJavaプログラムを手軽につなげてくれるフレームワークです。
MyBatis はカスタム SQL、ストアドプロシージャ、高度なマッピング処理に対応した優れた永続化フレームワークです。 MyBatisを使うことで、直接 JDBC を扱うコードを書いたり、クエリ引数やクエリ結果を手動で設定する必要がほとんどなくなります。 MyBatis の設定やデータベースレコードと Java オブジェクトの関連付けは、XML またはアノテーションを使って行うことができます。
MyBatis – MyBatis 3 | イントロダクション
JDBCは、リレーショナルデータベースにアクセスするための標準Java APIです。
Java Database Connectivityの省略という噂はありますがホントの名称はわからないっぽいです。
JDBCを使って「データベースへの接続」「SQLの実行」「データベースからの結果取得」ができます。
このJDBCを直接使うよりもMyBatisをJDBCの手前に置いて使うほうがカンタンにデータベースとプログラムをつなげることができます。
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation
設定やSQLはXMLに書けばMyBatisが頑張ってくれます。
XML 形式の設定ファイルを使って SqlSessionFactory を生成する
XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。
XML 形式の設定ファイルの詳細については後ほど改めて説明しますが、ここでは簡単なサンプルを挙げておきます。<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>Mapped SQL Statements について
以下は、先ほどの例で SqlSession のメソッドを呼び出したときに実行されることを想定した XML ベースの Mapped Statement です。<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>BloggerMapper のような Mapper クラスなら、実は XML を使う必要はありません。 代わりに、Java アノテーションを使って下記のように Mapped Statement を記述することができます。
public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation
Eclipseを使う場合の便利なプラグイン
MyBatis Generatorは、オブジェクトを自動生成してくれます。
- 構成ファイルを作成する
- [実行] > [実行構成] > [MyBatis Generator] > 構成ファイルを選択 > 実行
MyBatisでエラーになって困った事例集
クライアントサーバの3階層システムの基本
3階層システムとは
別名 : 3層システム / 3層クライアントサーバシステム / 3階層アーキテクチャ / 3-tier system
クライアントサーバシステムを
- プレゼンテーション層(ユーザインターフェース部分)
- アプリケーション層(ビジネスロジック部分)
- データ・アクセス層(データベース部分)
の3層に分割して構築したシステム。
クライアントおよびサーバの処理を複数の階層に分離して配置することで、ある階層へ変更を加える必要が生じた際にも柔軟に対応できるようなっている。
3階層システムでは、クライアント側にはユーザインターフェース部分のみを残し、あとはサーバ側に実装する。クライアントはユーザからの操作を受け付け、アプリケーション層からの処理結果を表示することのみを行う。
アプリケーション部分をクライアントから分離してサーバに実装することにより、ビジネスロジックが変更された場合でもサーバ側のアプリケーションを変更するだけでよく、変更がシステム全体に及ぶことは無い。また、大量のデータを扱うシステムでは、ネットワークを通じてクライアントとサーバの間で大量のデータのやり取りをする必要が無くなる。
各層の役割
プレゼンテーション層(ユーザインターフェース層 / UI層)
- ユーザーに情報を表示したり、ユーザーからの入力を受け付けたりする機能を担当するレイヤ
- 細かな変更や拡張が発生しやすい
- 使い勝手を向上させるためのインターフェイスの改善
- 新デバイス対応など(PDAや携帯電話対応など)
などなど
プログラムは、ユーザー・インターフェイスの実装なので、ほかの層に比較すれば、実装やテストにかかるコストはそれほど大きくない
アプリケーション層(ビジネス・ロジック層 / ファンクション層)
- アプリケーションの実際の情報処理を担当するレイヤ
- 業務フローや各種データ処理など、ビジネスで必要な情報処理をソフトウェアとして実装するレイヤ
- 本質的な部分は比較的長期にわたって変わりにくい
- ビジネスの処理そのものをプログラムとして表現したもの
- ユーザー認証やトランザクション処理など、プログラム実装やテストには多大な工数が必要になることが多い
データ層
- データベース・システムへのアクセス・保存機能を組み込むレイヤ
- データベースの構造を変更することはそれほどない
- 本質的なデータ構造自体は何十年も変わらず使い続けられるというケースも少なくない
- ただ・・・
- あらかじめ業務分析をきちんと実施してデータ構造を決定しておく必要はある
- アクセス効率や可用性、セキュリティ性能向上など、運用面からデータベース構造の見直しが発生することはある
- 利用するデータベース・システム(例えばSQL Serverか、Oracleかなど)によって内容が大きく影響を受ける
- 逆に考えると・・・
- データ層を独立させることで、データベース・システムの違いから、ビジネス・ロジック層を分離できるというメリットがある
- 逆に考えると・・・
3層構造はMVCと一緒のものでしょうか?
層構造をお勉強していて思った、「MVCモデルと似てない?」「一緒?」
- プレゼンテーション層 - View
- アプリケーション層 - Controll
- データ層 - Model
な感じ?
「3層構造」「MVC」なんかでググるとすぐにわかります。それは間違いです。
違い : 3層構造は直線でつながる
MVCは三角でつながる -> プレゼンテーション層とデータ層はつながらないが、ViewとModelはつながる
違い : 表しているものが違う
- 3層構造 : データベース〜ユーザーの間の情報経路
- MVC : ユーザインタフェースにおける画面上のコンポーネントの管理方法
という訳で違う、その違うものを対応させようとしたのがおかしいという結果です。
思い出の一枚
NetBeansにGlassFishを設定する方法
NetBeansをインストールしたのでGlassFishを設定します。
ponsuke-tarou.hatenablog.com
GlassFishが設定できました。
MacにNetBeansをインストールする方法
dmgをダウンロードします
- NetBeansのサイトをブラウザで表示します。
- 言語とOSを選択します。
- .dmgをダウンロードします。
NetBeansをインストールします
- NetBeans8.2.pkgを押下します。
- [Continue]ボタンを押下して進みます。
- ライセンスの説明を読んで[Agree]を押下します。
- [Install]を押下します。
- 使い終わったものはゴミ箱へ。
NetBeansを起動します
Tera TermでRAS鍵を作ってWindowsからCentOS7へ接続できるようにする
CentOS7にWindows10(ネットワーク内のPC)からもPuttyでログインできるようにしたので、TeraTermでログインできるようにします。
ponsuke-tarou.hatenablog.com
- 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
- 環境
- ホストOS : macOS Sierra Version10.12.6
- VirtualBox : 5.1.26 r117224 (Qt5.6.2)
- ネットワーク内のPC : Windows10 64bit
- Tera Term : Version 4.96
Tera Termで公開鍵と秘密鍵を作成します。
Tera Termをインストールして鍵を作ります。
秘密鍵のフォーマットを見てみます。
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,7C930B26ED8CEE374948185658236DAC 3mhBszzfw+uMRFWQIX4FK0TGsnrjHxnhRFVZDzDuPozcuCeh9mWU8HaSYP4TEcwM 5KNPU5lyQehA5QlhGF0DSnSjvMzGUjtkJTdtehKtUi9Gdgpe7QY0WM3IxZbcRQwi zYduHjRp9ew07bbQ2rWZ8lY16Du+k0GyZcJzoyZLTKN0R/rCnttbOjKcSEQYTJeq fPf6dgtfugA6gR2+sfdVY14QDRLvDIlkykvgCx7rtv96gaVBXA6g76ml4GHQTG4s 6M9ujC8xtY3YIzQc9TCrJ8QK9KEGZ66PmWTnpkXBFX/9SJWweauka1VmNwq1I2cN 6M/YJnVumg3yXDqVryI4Oqw+GlreyARaxXSvyhzXgT1G7penPFUkFZixNW5SMtbv LL71sO4aDfF4NIK3I2Xu85id7f1RSacHNzhDRrhOhmTpkpIujQaMmOtzDgylJTfR c6QjXbsoMNLkcHxchCqWoFQ/PR4XJdxMofckrZ4RNSZOYT2j65ukgm835Q6ueC83 bRp0GxgZGbyn3HXe1VCpPfVVToOliTiUAnHOKKO5bozNKZ+rKff3I14LFeIYVOOC OmwUaAAX8soonxsk6jj34+PuXLe7TCPduRwBy8iCLUnq+MCOmPn07S4xi18sJB2K KHawK0WD+aOKQCbTHayGvx7e+h5Zz5/2ZWFU4OOBGxnkPO2escJPVvnk+wB8jw2d UjSTCC3YLG1OkpP/aNwgeEDhr75G0OCzW7P5byxlhIRukt/Z0h+HPcDrKxJpzz9H KciO2Rz6O7E2xEvAAxOB6r5ljwSzELdWWy9NScCt3s9RpPdjwPYgjmgp/QNf2kzc s1cMeoim0EodCikkWlToK6bbPqfwMObSNMVkell++G4G1G7yyZBFq8iN/aY4s4H6 ANAyvNH63oY1A58onbbz3Qa6UvjwwyQIZk1mivimZ5QJ/n3UtFalNHa+0YrBNv+I +wmQBAg+jQXivHi881raj3eck1ASQqrtftpkLuMKJRMo7QvGYe+UfcbbCPyr2TbH CCnPu5oUeTf3bpn1ai4pD3KImNBSykeNRisjDihbmcbxtR+dp2b7CrZ7T0+QuTUE murML94QvzuS/CQL65mXePxjDrf27gNw+Ij/tyURTYGBd6TEEQYOyfBE5m32vygI jY5wd4h+CGMqvFaTMZBuECmjK8b6dCPqGG4bLhGRoI0vdCE2PcEOicKwNvjiNpQ4 P91X+rQTQuQdIbOu3u+IwRI+eIsLE10xrvhz5pyUeoVG5/A94XbMRQLSAttvsFPm EX7NDwItVX/H2FYoee1mfF/EL7sEPGEp5YVDB2MQ4rCJEcwPfSgSnwDVk5cXRi/p 038FTkfWb1U7c7JIglV4/d0+gaocbRfozjKo8ZIVyP1oBVomwh+PJ3v/Jq1v1Noq IQfCAOhPEdrabEvbSCdxsv48jixfS0ZU05T1E/YtiuEPZ3LwHrYjGjY51ao15Z+e GZcMB11QGMJitD26x7MnJ4PX5g9JVxNdJi5TQ2sh+LlZWo3AGsEhfeul8O8aTKZH aVcgU+OwvzNXPmJaNseiT2nrS7oVUH4m6Tt8/xlEpJRVH104np/ftRWiESHAUvR0 -----END RSA PRIVATE KEY-----
公開鍵のフォーマットを見てみます。
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnpGby/8AS8d22UX5SR0t89ijvFQ6Yp/A1eTcIbpwk/SuiSonmXY53jCAZ/3//teGNAfHxwPOklaGqwwlQR/GNdl+6uba7nFoXCUiuwoBSPHRbT1aiNWHEwt/IF7zyFmid/AxZzi3FMbTIMF+Ga9iT+NrgMsguo+PEPhFbwUXHA7Udqh23cioPHd5Al/klkonW+iBQBC4zn4/IvpdUGj3li1YwDcZSHj/uR3t7d5MaBA4LzefV83v/mx1SsSonU6YIDitEwzF4vVtb52a+0x4FuYwNSfybsDIXfmIpvQc2h0Sl1oBxZEdcUkVQAufebw9i5a8p4+sCWM4gZq7xQaEUw== m-uki@DESKTOP-KM1J7OI
CentOSに公開鍵を配置します。
Tera Term接続用のユーザを作ります。
# rootでログインします。 $ ssh root@192.168.0.6 root@192.168.0.6s password: Last login: Wed Oct 25 01:20:50 2017 from 192.168.0.4 # ユーザを作ります。 $ useradd chovin # パスワードを設定します。 $ passwd chovin ユーザー chovin のパスワードを変更。 新しいパスワード: #<------------------------ パスワードの文字数が少いと怒られますが、このまま行きます。 よくないパスワード: このパスワードは 8 未満の文字列です。 新しいパスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。 # 作ったユーザを確認します。 $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash <省略> mana:x:1000:1000:mana:/home/mana:/bin/bash ponsuke:x:1001:1001::/home/ponsuke:/bin/bash vboxadd:x:996:1::/var/run/vboxadd:/bin/false chovin:x:1002:1002::/home/chovin:/bin/bash
CentOSに接続するためにTera Termを設定します。
CentOSで公開鍵を配置する準備をします。
# rootでログインします。 $ ssh root@192.168.0.6 root@192.168.0.6s password: Last login: Wed Nov 1 21:15:19 2017 from 192.168.0.7 # 公開鍵を配置用ディレクトリを作成します。 $ mkdir /home/chovin/.ssh # ディレクトリと中身の所有者を変更します。 $ chmod 700 /home/chovin/.ssh/ $ chown -R chovin:chovin /home/chovin/.ssh/ # 権限を確認します。 $ ls -la /home/chovin/ 合計 12 drwx------. 3 chovin chovin 74 11月 1 21:17 . drwxr-xr-x. 5 root root 47 11月 1 21:15 .. -rw-r--r--. 1 chovin chovin 18 9月 7 01:25 .bash_logout -rw-r--r--. 1 chovin chovin 193 9月 7 01:25 .bash_profile -rw-r--r--. 1 chovin chovin 231 9月 7 01:25 .bashrc drwx------. 2 chovin chovin 6 11月 1 21:17 .ssh # ログアウトします。 $ logout Connection to 192.168.0.6 closed.
公開鍵を配置します。
- Tera Termを起動して作ったユーザでCentOS7に接続します。
- 公開鍵をTera Termのウィンドウにドラッグ&ドロップします。
- 配置先を指定して[SCP]ボタンを押下します。
# 配置した公開鍵を確認します。 $ ls -la ./.ssh/ 合計 4 drwx------. 2 chovin chovin 52 11月 1 22:27 . drwx------. 3 chovin chovin 95 11月 1 21:27 .. -rw-r--r--. 1 chovin chovin 403 10月 31 23:42 CentOS7inMacCreatedTeraTerm_id_rsa.pub # 公開鍵をリネームします。 $ mv ./.ssh/CentOS7inMacCreatedTeraTerm_id_rsa.pub ./.ssh/authorized_keys # 確認します。 $ ls -la ./.ssh/ 合計 4 drwx------. 2 chovin chovin 29 11月 1 22:33 . drwx------. 3 chovin chovin 95 11月 1 21:27 .. -rw-r--r--. 1 chovin chovin 403 10月 31 23:42 authorized_keys # ログアウトします。 $ logout
PuttygenでRAS鍵を作ってWindowsからCentOS7へ接続できるようにする
VirtualBoxに作ったCentOS(ゲストOS)にMac(ホストOS)からRAS鍵認証でログインできるようにしたので、Windows(ネットワーク内のPC)からもRAS鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com
Puttygenで公開鍵と秘密鍵を作成します。
Puttygenで鍵を作成します。
秘密鍵のフォーマットを見てみます。
PuTTY-User-Key-File-2: ssh-rsa Encryption: aes256-cbc Comment: rsa-key-20171029 Public-Lines: 6 AAAAB3NzaC1yc2EAAAABJQAAAQEAxAEme5H2xppEXco7GFXkThnD7Fg+NDmeFbD6 bk3FleItQr7g7jlCrk8Rlg5T280g8d1o/Qp7Y3SLoOJHd0Vi/I0MtITJpqnW4sKQ wPvLSrq3bgDe5wXAzNwh78sy8U4KqOLlJPHvLmCZ1tJE89KNMH4q145/ReyJZwAP 3U8t5RM5XSg1oByDPW7FL9TifABB4ZToRGx6Fmsfyb0r+wMjN3Ui0zNTcWFHDjw+ UcoAlqjBWIpZGqju3ZztdJuHZ8Ed2EMrxmjJkqh6yfu1ek5yPMdSLlPC/autU/JF YR12HGmkBGI/QB8V0YPWHdzP3y2KaSeeJ9sowB9dzc8Iaw1JUw== Private-Lines: 14 itvpHd9uLhrzfNbOwAsOiFjVUDQwJT8xwoN++LvwWzJd0s/X2ZyBHWGtgfFZbwTR a8b0cQ1Vd5ZcZmhnz09TPHGNjeELnJ0BNa7H+DDyHCBFuKyxvpb49v3brKp9HJBp JT/rCFMTJqMX02OpA5pKA4SbOThA/PMnLgRWXrryg8/pOXRdQ2ecVJeWlU+r8cJB hpR/2LkP4jTykNY9MR9pYD+nDGEsND8Q6hGTmnj8TgOYp3Mmy2uVXhGvbxdGdsGH iQxHR/jGwMseFZ+sZyM0URr/RvWTVexhBF72LQqWOhyweellHPoHrLpo2zFX+SvK lMjQHc3pVggSxD4WG7qtsKnu+H0WIUeaM0JjW+XJm4AXP8/zes8HTZr43VvaSbHz y3LseqFFlOliko3Iin/fyR08YkU+B+qPHKVmWjrHtV91PQHNhU1y83FWRHI0O+Gs 1ugjS3ZdTp3QpzOS+0zIpPBTU4zw+QjXMePgTrOAe1ZuS6z7Vlz7xAZ04upSoVUj XX8RyESYgGStqBy6cruoLkuCa+zDpXrnfb3FeYnHU+9kE5YRftmzdrnKKSSMzAtq twofymiMZ04Soqf/Zmvekspj7FiYQTj4QVpHKjKWeZMszv5zTsbG2DZ5kzK4JOv8 DOlyNqEQi/whps2qkLZlQKTubIAewj3bKfk4nXB4TlrAJZqY/CdddW0yi6jOC90s TvURd2R3sDCvGkM98zKPHi7FQ415Ei7mBkYC1VfZQxezx2AvH1x6PdEHidjNxiZa 2MTdlTEmzXX1/yxZuq0S/vRuTv4lK4HdnhiGeC35YUOrMSoBpcD5MiffroQF7Ie6 kGgnoWs210bRwNKAP9QEvNTWR91HotDCEgQim1JpqvPY8xd3C9yluGKut/pOWFL0 Private-MAC: 811871db936602fd5c01593aa7273dcc79eab6e2
公開鍵の中身を見てみます。
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20171029" AAAAB3NzaC1yc2EAAAABJQAAAQEAxAEme5H2xppEXco7GFXkThnD7Fg+NDmeFbD6 bk3FleItQr7g7jlCrk8Rlg5T280g8d1o/Qp7Y3SLoOJHd0Vi/I0MtITJpqnW4sKQ wPvLSrq3bgDe5wXAzNwh78sy8U4KqOLlJPHvLmCZ1tJE89KNMH4q145/ReyJZwAP 3U8t5RM5XSg1oByDPW7FL9TifABB4ZToRGx6Fmsfyb0r+wMjN3Ui0zNTcWFHDjw+ UcoAlqjBWIpZGqju3ZztdJuHZ8Ed2EMrxmjJkqh6yfu1ek5yPMdSLlPC/autU/JF YR12HGmkBGI/QB8V0YPWHdzP3y2KaSeeJ9sowB9dzc8Iaw1JUw== ---- END SSH2 PUBLIC KEY ----
CentOS7に公開鍵を配置します。
CentOS7に接続するためにPuttyを設定します。
CentOS7で公開鍵を配置する準備をします。
# CentOS7にログインします。 $ ponsuke@192.168.0.6 Using username "ponsuke". ponsuke@192.168.0.6s password: #<------------ まだこの時点では普通のパスワードでログインします。 # 公開鍵を配置用ディレクトリを作成します。 $ mkdir /home/ponsuke/.ssh $ ls -la 合計 12 drwx------. 3 ponsuke ponsuke 74 10月 30 22:24 . drwxr-xr-x. 4 root root 33 6月 8 21:27 .. -rw-r--r--. 1 ponsuke ponsuke 18 8月 3 2016 .bash_logout -rw-r--r--. 1 ponsuke ponsuke 193 8月 3 2016 .bash_profile -rw-r--r--. 1 ponsuke ponsuke 231 8月 3 2016 .bashrc drwxrwxr-x. 2 ponsuke ponsuke 6 10月 30 22:24 .ssh # ディレクトリと中身の所有者を変更します。 $ chown -R ponsuke:ponsuke /home/ponsuke/.ssh/ # 権限を確認します。 $ ls -la 合計 12 drwx------. 3 ponsuke ponsuke 74 10月 30 22:24 . drwxr-xr-x. 4 root root 33 6月 8 21:27 .. -rw-r--r--. 1 ponsuke ponsuke 18 8月 3 2016 .bash_logout -rw-r--r--. 1 ponsuke ponsuke 193 8月 3 2016 .bash_profile -rw-r--r--. 1 ponsuke ponsuke 231 8月 3 2016 .bashrc drwxrwxr-x. 2 ponsuke ponsuke 6 10月 30 22:24 .ssh # ログアウトします。 $logout
公開鍵を配置します。
# Puttyに同梱されているSCPツールを使います。 $ ls -la /c/app/putty/ total 3697 drwxr-xr-x 1 m-uki 197609 0 10月 30 22:04 ./ drwxr-xr-x 1 m-uki 197609 0 10月 30 22:35 ../ -rw-r--r-- 1 m-uki 197609 1338 7月 4 19:31 LICENCE -rwxr-xr-x 1 m-uki 197609 313912 7月 4 19:34 pageant.exe* -rwxr-xr-x 1 m-uki 197609 617048 7月 4 19:34 plink.exe* -rwxr-xr-x 1 m-uki 197609 626744 7月 4 19:34 pscp.exe* #<------------------- これです。 -rwxr-xr-x 1 m-uki 197609 643144 7月 4 19:34 psftp.exe* -rw-r--r-- 1 m-uki 197609 283045 7月 4 19:31 putty.chm -rwxr-xr-x 1 m-uki 197609 854072 7月 4 19:34 putty.exe* -rwxr-xr-x 1 m-uki 197609 407104 7月 4 19:35 puttygen.exe* -rw-r--r-- 1 m-uki 197609 1893 7月 4 19:30 README.txt -rw-r--r-- 1 m-uki 197609 104 7月 4 19:30 website.url # SCPで公開鍵をWindowsからCentOS7へ配置します。 $ /c/app/putty/pscp.exe /c/app/Dropbox/key/CentOS7ofVirtualBoxInMac.pub ponsuke@192.168.0.6:.ssh/ ponsuke@192.168.0.6s password: #<------------ まだこの時点でも普通のパスワードです。 CentOS7ofVirtualBoxInMac. | 0 kB | 0.5 kB/s | ETA: 00:00:00 | 100% # CentOS7にログインします(うっかりPuttyを使わずにログインしてしまいました)。 $ ssh ponsuke@192.168.0.6 The authenticity of host '192.168.0.6 (192.168.0.6)' cant be established. ECDSA key fingerprint is SHA256:j+mhEbwrkV5GaVU8gat34VZs2A4+q4q8HaKjOg9m33I. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.6' (ECDSA) to the list of known hosts. ponsuke@192.168.0.6s password: #<------------ まだこの時点でも普通のパスワードです。 Last login: Mon Oct 30 22:23:20 2017 from 192.168.0.7 # 配置した公開鍵を確認します。 $ ls -la .ssh/ 合計 4 drwxrwxr-x. 2 ponsuke ponsuke 42 10月 30 22:34 . drwx------. 3 ponsuke ponsuke 95 10月 30 22:27 .. -rw-rw-r--. 1 ponsuke ponsuke 477 10月 30 22:34 CentOS7ofVirtualBoxInMac.pub # 公開鍵をPuttygenの形式からLinuxで使えるOpen SSL形式に変換します。 $ ssh-keygen -i -f .ssh/CentOS7ofVirtualBoxInMac.pub > .ssh/authorized_keys # Open SSL形式に変換した公開鍵の中身を見てみます。 $ cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAxAEme5H2xppEXco7GFXkThnD7Fg+NDmeFbD6bk3FleItQr7g7jlCrk8Rlg5T280g8d1o/Qp7Y3SLoOJHd0Vi/I0MtITJpqnW4sKQwPvLSrq3bgDe5wXAzNwh78sy8U4KqOLlJPHvLmCZ1tJE89KNMH4q145/ReyJZwAP3U8t5RM5XSg1oByDPW7FL9TifABB4ZToRGx6Fmsfyb0r+wMjN3Ui0zNTcWFHDjw+UcoAlqjBWIpZGqju3ZztdJuHZ8Ed2EMrxmjJkqh6yfu1ek5yPMdSLlPC/autU/JFYR12HGmkBGI/QB8V0YPWHdzP3y2KaSeeJ9sowB9dzc8Iaw1JUw== # ログアウトします。 $ logout Connection to 192.168.0.6 closed.
WindowsからCentOSへPuttyを使ってRAS鍵認証で接続します。
- Puttyを起動します。
- [Connection] > [SSH] > [Auth] > [Private key file for authentication:]に秘密鍵を設定します。
- [Session] > [Save]ボタンを押下して設定を保存します。
- [Open]ボタンを押下して接続します。
Using username "ponsuke". Server refused our key ponsuke@192.168.0.6s password: #<---------------- 鍵作成時に設定したパスフレーズを使います。 Last login: Mon Oct 30 22:39:17 2017 from 192.168.0.7 # ログインできました。 $ pwd /home/ponsuke
次は、TeraTermでログインできるようにします。
ponsuke-tarou.hatenablog.com
ssh-keygenでRAS鍵をつくってMacからCentOS7へ接続できるようにする
MacのVirtualBoxに作ったCentOS(ゲストOS)にRSA鍵認証許可を設定したので、Mac(ホストOS)からRSA鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com
- 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
- 環境
- ホストOS : macOS Sierra Version10.12.6
- VirtualBox : 5.1.26 r117224 (Qt5.6.2)
Macで公開鍵と秘密鍵を作成する
鍵を作成する
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/mana/.ssh/id_rsa): # <-------- 特に指定がなければEnter Enter passphrase (empty for no passphrase): # <--------------- パスフレーズを入力 Enter same passphrase again: # <-------------- 確認用にもう1度パスフレーズを入力 Your identification has been saved in /Users/mana/.ssh/id_rsa. Your public key has been saved in /Users/mana/.ssh/id_rsa.pub. The key fingerprint is: SHA256:+OKA8zTBRkOH7shmT36jxXelsEek9RnRI69Xy8RzzB8 mana@mananoMacBookAir.local The keys randomart image is: +---[RSA 2048]----+ | ... .. | | ... ..o | | .o o .o.+ | | o.. . + . o.E=| | . o+ . S . +.o.*| | =ooo . + o. .o.| | oo++ + + + . | | +o=oo o | | oo.. | +----[SHA256]-----+ $ ls -la .ssh/ total 24 drwx------ 5 mana staff 170 Aug 1 22:44 . drwxr-xr-x+ 60 mana staff 2040 Jul 26 23:24 .. -rw------- 1 mana staff 1766 Aug 1 22:44 id_rsa #<--------------- 秘密鍵 -rw-r--r-- 1 mana staff 409 Aug 1 22:44 id_rsa.pub #<------------ 公開鍵 # 公開鍵に所有者のみ読み書き権限を付与します。 $ chmod 600 .ssh/id_rsa.pub # 権限を確認します。 $ ls -la .ssh/ total 24 drwx------ 5 mana staff 170 Aug 1 22:50 . drwxr-xr-x+ 60 mana staff 2040 Aug 1 22:50 .. -rw------- 1 mana staff 1766 Aug 1 22:44 id_rsa -rw------- 1 mana staff 409 Aug 1 22:44 id_rsa.pub
注意ポイント
パスフレーズが短いと↓怒られて↓鍵作成に失敗します。
Saving key "/Users/mana/.ssh/id_rsa" failed: passphrase is too short (minimum five characters)
鍵の強度(鍵長)を確認してみます。
$ ssh-keygen -l -f ~/.ssh/id_rsa.pub 2048 SHA256:+OKA8zTBRkOH7shmT36jxXelsEek9RnRI69Xy8RzzB8 mana@mananoMacBookAir.local (RSA)
秘密鍵のフォーマットを見てみます。
$ vi /root/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,8B5E34DBBBC0801DDDC2A5A241775435 c2ACE4A1dOR55tGA7ZmIJ4dUDaVTL3uMyi3OiPlZdYDdnTKKrDpw9hHMILiauoCV 46Njy+DiE1iqNgKJHMKFLm1Flr3iFzehPm+u97qjFubZ5vS5wqYRjI8nSaKpE2X4 DSLUCUMBRIx5uOMuEWxLF4NrL50vgM35WQjAXgPxqZhku7P7pYUEPDekbMP6rlVr W1kKRuXfIPNC18W40HUaUGnj+qjPm96wuj0TQSZww1k+aAOb+ngbLoXCELYg38WT rCpAHLOky/BRHQhNDyUbOsV4QZuCMRlSsNEHGC9FP0/dn0azabuNWo40UNhSEmjM C1zQh5zSP7LzGXo2DD1KfsKjAcfgRPidUD0GIjzqz/9mPDwXOorSOmXYwG9NXyAB +dljYkcJDyfxaZHR7lJMnm2hegFRmaqlW+eIYPt9S4TgGJ0OM6X3Hbo+jtZQa3/u DFauOVRj5wfXcSQxS+m9LIb+tuFghBOyAfdJbtFfO/dZDIDH6oB2gXQc6sklIQqU nnciusaHoRfhI+SM29lLkErwmZ7TARxDkKAUO2qYIczoCJwgYM3PvhTTzaqUj0cY 7PMVYrO5Rlh7kEDBsRr0mjfCV27JQ3B6mLuLwPlqwuk8w/Nlah1MkV+NqZwc4H2W EjTRls9gFm0jG9EotdfRy9EnRDoYLWWglhgZ0nIqDtfuF2nqFIxSV77/wQHY2cwc Lx0rRUj6dUhTPEM4ROdVfD6di6WVaNpvTe65kAweRItBf0c66jqJrollKx91xQGF T5XSLUD+iTOQu+wUM67wVjRVT7sjxYOm9IViBw2GpRD9E+9jEP+mw6FWL1adEony Vi9Bz1MqxcxEbCQp7uNBjCZjGk3lGnI5nrscfdRJLfWnBGVg9bCABKP+OvNGdKNr Wyi/TPvjatpBl83Z2b5Dpb/XAhq8IgaAwV973MsJPZzkc18+MMsbvU37RTj4UTL9 dl0rKvxgD6044328PZsEEX19tqQStWEN2JoWxZG//mbpMk+bAP7A9i1x/0cy3JOQ t0tcSI6vLBjbGD/mVfX49Bl29h/e92p+fioxuNoqvm0K+GSJoJ9VMV6wweI0o2AY 4LMqOxXd/KSg0uixep0zY4QndxvT1uspTDb9JCPA6M5aIi7MMrt/l8amHNNhWco3 c3Tt1bbXhukhMECI5jEPI6SOXobHhr2m6gp78G7Kpcm+X7boAl+cLDtiHZSkeUIJ CO1cZLsto7xzkqyu7cee5tTW69tBGjTklrGm6LhohV0myKq2I/VCmS7mMLzBNDHj +5P1qpwhxv+zGgjQg3n+v1rIxilSaah+2Kp7MoGHgQZOD73xw/81KCP77/xoREOJ QXuCsqk0uGAdTjef/OTUlMCZp1uJro0hrQW8S2pLgKS/t+6F/lzX0qM7HemaKTzi rDxjhG2fR+hwcjokgw/8PtXjcYAn/CuD3/8to+0D8e+ZQrEwj5rLfSwKk7QmsVmQ af6R+5iWHVjfLPhtnjyEi1rVyvplheTV7TPqUEx6x3Bt74fYIW9uKttNxO/BiVmE 28GkLxdacwcGRtqDKIgHnBvZz9Z8TRyis66mnd/onZq7QE8gzJXAqtPJVGBpPGsK -----END RSA PRIVATE KEY-----
公開鍵のフォーマットを見てみる
$ vi /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCunPJl+yHM3LWrufikAFXYMlTaLt7azQ8ciPY8YHKxTXHQtunkFkfazDFJ/8GpU3W9vgNAP2n8XBs41NhjlAl6bi6Ouncs8tJOdNrCOAftX+R2KRI5/S3LuE3wGo411yGNn0MXOl5PFCJLLyRFZG4roD7J6f+hl6Jett8TLIyE1TsFrdVAtzPf0nvs7XHnNc2YU+kK5F0MmPpGpFv5k2mqle8VpxrH0MOu714e8sr7yxBbQpMGmqvJ8Lye/i2P0DSuamBTTMKsw6HUwh9yvKTB7IIKlqYuPJqtZ1otEMiGQOh1tGSKO1x7xHJqcSQ++qaG4F75s9ddWW2AzFMdtLel mana@mananoMacBookAir.local
ゲストOSに公開鍵を配置します。
# rootでログインします。 $ ssh root@192.168.0.6 root@192.168.0.6s password: # 公開鍵を配置用ディレクトリを作成します。 $ mkdir /home/mana/.ssh # 所有者に読み書き実行権限を付与します。 $ chmod 700 /home/mana/.ssh # ディレクトリと中身の所有者を変更します。 $ chown -R mana:mana /home/mana/.ssh/ # 権限を確認します。 $ ls -la /home/mana/ 合計 40 drwx------. 4 mana mana 121 8月 1 23:00 . drwxr-xr-x. 4 root root 33 6月 8 21:27 .. -rw-------. 1 mana mana 20968 10月 25 01:20 .bash_history -rw-r--r--. 1 mana mana 18 8月 3 2016 .bash_logout -rw-r--r--. 1 mana mana 193 8月 3 2016 .bash_profile -rw-r--r--. 1 mana mana 231 8月 3 2016 .bashrc drwx------. 2 mana mana 29 8月 1 23:18 .ssh -rw-rw-r--. 1 mana mana 218 7月 12 00:37 err.txt drwxrwxr-x. 3 mana mana 19 7月 7 00:15 mnt # ログアウトします。 $ logout Connection to 192.168.0.6 closed. # SCPで公開鍵をMacからゲストOSへ配置します。 $ scp .ssh/id_rsa.pub mana@192.168.0.6:~/.ssh/authorized_keys mana@192.168.0.6s password: id_rsa.pub 100% 409 311.1KB/s 00:00
Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro
Linuxコマンド集 - 【 chown 】 ファイルやディレクトリの所有者を変更する:ITpro
webkaru.net
MacからゲストOSへRAS鍵認証で接続してみます。
接続方法はパスワード認証と同じですが、入力するのがパスワードではなく鍵のパスフレーズとなります。
$ ssh mana@192.168.0.6 # <------------- 鍵作成時に入力したパスフレーズを入力 Enter passphrase for key '/Users/mana/.ssh/id_rsa': Last login: Wed Oct 25 01:20:33 2017 from 192.168.0.4
接続できました。
次は、Windows10(ネットワーク内のPC)からもRAS鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com
クロスサイトスクリプティングの脅威を学ぶ。
勉強のきっかけになった問題
クロスサイトスクリプティングの手口に該当するものはどれか。
クロスサイトスクリプティング(CSS / XSS)とは、エコーバックするサイトの脆弱性を使って悪いスクリプトを閲覧者に送信します。
ウェブページの部分をユーザからの入力をそのままエコーバック(オウム返し)することによって生成しているアプリケーションのセキュリティ上の不備を利用して、サイト間を横断して悪意のあるスクリプトを注入する攻撃のことをいう。また経緯上、それを許してしまう脆弱性についても、このように呼ばれている。
クロスサイトスクリプティング|ITパスポート試験ドットコム
- 例えば・・・
- Webアプリケーションに用意された入力フィールドに,悪意のあるJavaScriptコードを含んだデータを入力する。
- Webページに,ユーザの入力データをそのまま表示するフォーム又は処理があるとき,第三者が悪意あるスクリプトを埋め込むことでクッキーなどのデータを盗み出す。
電子掲示板のように、閲覧者から送信されたデータをコンテンツの一部として他の閲覧者に見せるようなプログラムがあるWebサイトで生じる脆弱性および攻撃手法で、攻撃者が外部のサイトに用意した悪意のあるスクリプトをターゲットのサイトに注入して閲覧者に送信する
(省略)
攻撃者はターゲットとなる脆弱なサイトへのリンクを設置した罠サイトを設け、閲覧者がリンクをクリックするよう仕向ける。その際、リンクのURLのパラメータ部分にスクリプト(JavaScriptコード)やHTMLタグの断片を埋め込み、閲覧者が脆弱なサイトを開くとページ内に自動的にそれらの悪質なスクリプトが埋め込まれ、即座に閲覧者のWebブラウザで実行される。
e-words.jp
エコーバックとは、送信した文字をそのまま返信してくる機能です。
セキュリティ対策は、入出力をエスケープすることです。
次回の勉強内容
心の隙間に攻撃するソーシャルエンジニアリングとフィッシング
- 前回の勉強内容
- 勉強のきっかけになった問題
- ソーシャル・エンジニアリングとは、心の隙間やうっかりミスにつけ込んで情報を盗むことです。
- フィッシング(phishing)とは、フィッシングサイトへのリンクやURLを嘘メールに書いてアクセスさせる手法です。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
電子的な方法を用いないで、緊急事態を装って組織内部の人間からパスワードや機密情報のありかを不正に聞き出して入手する行為は,どれに分類されるか。
ア. ソーシャルエンジニアリング
イ. トロイの木馬
ウ. パスワードクラック
エ. 踏み台攻撃
ソフトウェア開発技術者平成17年春期問75 ソーシャルエンジニアリング|応用情報技術者試験.com
ソーシャル・エンジニアリングとは、心の隙間やうっかりミスにつけ込んで情報を盗むことです。
ソーシャル・ワークともいいます。
技術的な方法ではなく人の心理的な弱みに付け込んで、パスワードなどの秘密情報を不正に取得する方法の総称。
ソーシャルエンジニアリング|ITパスポート試験ドットコム
- 例えば・・・
- パスワードを入力するところを後ろから盗み見る
- オフィスから出る書類のごみをあさって手がかりとなる個人情報の記されたメモを探し出す
- ネットワークの利用者や顧客になりすまして電話で管理者にパスワードの変更を依頼して新しいパスワードを聞き出す
- 電話に出た子どもに対して、両親に関する個人情報を聞き出す
- 緊急事態を装って組織内部の人間からパスワードや機密情報を 入手する
- システム管理者などを装い,利用者に問い合わせてパスワードを取得する。
標的型攻撃メールといって、件名や本文にターゲットの業務に関係がありそうな内容を書いてメールするものもあるのです。
フィッシング(phishing)とは、フィッシングサイトへのリンクやURLを嘘メールに書いてアクセスさせる手法です。
ちまたでよく言う「フィッシング詐欺」です。
メールで個人情報を確認されたら要注意です。URL先では銀行のホームページに表示されているメニューから操作を始めたりして安易な入力はさけなきゃだめです。
金融機関 (銀行やクレジットカード会社) などを装った電子メールを送り、住所、氏名、銀行口座番号、クレジットカード番号などの個人情報を詐取する行為です。電子メールのリンクから偽サイト (フィッシングサイト) に誘導し、そこで個人情報を入力させる手口が一般的に使われています。
www.antiphishing.jp
- 例えば・・・
- 偽のホームページにアクセスさせるために,金融機関などを装い無差別に送信される。
- "本人情報の再確認が必要なので入力してください"という電子メールで示されたURLにアクセスし,個人情報を入力したところ,詐取された。
- 電子メールを発信して受信者を誘導し,実在する会社などを装った偽の Web サイトにアクセスさせ,個人情報をだまし取る。
- 電子メールを介して偽のWebサイトに誘導し,個人情報を盗み出す。
次回の勉強内容
大切なセキュリティ対策の方針について学びます。
- 前回の勉強内容
- 勉強のきっかけになった問題
- セキュリティ対策の方針は1つではありません。
前回の勉強内容
勉強のきっかけになった問題
JIS Q 27001では,情報セキュリティは三つの特性を維持するものとして特徴付けられている。それらのうちの二つは機密性と完全性である。残りの一つはどれか。
ア. 安全性
イ. 可用性
ウ. 効率性
エ. 保守性
応用情報技術者平成24年春期問42 情報セキュリティの三要素|応用情報技術者試験.com
セキュリティ対策の方針は1つではありません。
情報セキュリティポリシーとは、どんな脅威からどんなふうにシステムを守るか決めた方針です。
情報セキュリティポリシーの策定
(1)組織・体制を確立
(2)基本方針を策定
(3)守るべき情報資産を把握、分類
(4)その情報資産のリスクアセスメントを行い、それにより自身の情報セキュリティにおける脅威と脆弱性とリスクを見極め
(5)それに応じた導入対策(管理策)を取捨選択
(6)対策基準を策定
(7)対策基準の周知徹底
(8)実施手順を策定
https://www.ipa.go.jp/security/manager/protect/pdca/policy.htmlwww.ipa.go.jp
情報セキュリティとは、機密性・完全性・可用性を維持して改善し続けることです。
組織が保護すべき情報資産について機密性・完全性・可用性(CIA)をバランスよく維持し改善すること。
- 機密性(Confidentiality):アクセスを認可された者だけが情報に確実にアクセスできること
- 完全性(Integrity):情報資産が完全な状態で保存され、内容が正確であること
- 可用性(Availability):情報資産が必要になったとき、利用できる状態にあること
ISMSとは、技術対策だけではなく組織としてセキュリティレベル・プラン・資源配分を決めてシステムを運用していくことです。
Information Security Management Systemの略で、日本語では情報セキュリティマネジメントシステムと言います。
ISMSとは、個別の問題毎の技術対策の他に、組織のマネジメントとして、自らのリスクアセスメントにより必要なセキュリティレベルを決め、プランを持ち、資源を配分して、システムを運用することである。
ISMS(情報セキュリティマネジメントシステム)とは - 情報マネジメントシステム認定センター(ISMS-AC)
リスクアセスメントとは、リスクを洗い出して撲滅したり低減させていくことです。
IT世界だけのことではありません。
リスクアセスメントは、職場の潜在的な危険性又は有害性を見つけ出し、これを除去、低減するため手法です。
中災防:リスクアセスメントとは なぜリスクアセスメントが必要か
ISMS認証基準には、実施状況の確認や見直しについても定められています。
■第3 ISMS の要求事項
(2)マネジメント枠組みの確立
各項目について、定期的もしくは必要に応じて見直しすること。
(3)管理策の実施
管理策を講ずるために採用された手続きについて、第 4 10(2)に従いその有効性を確認すること。
(5)文書管理
(ア) ISMS 文書の利用者が文書を容易に利用することができる
(イ) ISMS文書の定期的な見直しを行い、情報セキュリティポリシーに対する準拠性を維持しながら必要に応じて改訂する
(エ) ISMSを運用するために必要なすべての事業所等において ISMS文書が閲覧可能である
■第4 詳細管理策
(2)セキュリティポリシー遵守状況の確認
① すべての手続きが情報セキュリティポリシーに準拠して実行されていることを定期的に見直すこと。
② 情報システムが情報セキュリティポリシー及び関連する対策基準や手順書等に準拠していることを定期的に確認すること。
ISMSの基になっている規格は、国際版がISO/IEC 17799で日本版はJIS X5080です。
これらは異なる2つの基準ではなく、英国規格である「BS7799」という規格を基に策定されており、ISO化された(国際基準化された)ものがISO/IEC17799である。そしてISO/IEC17799が日本語に翻訳され、日本工業規格(JIS化)として策定されたものが、JIS X5080である。
ISMSの基盤となるISO/IEC 17799とJIS X5080:情報セキュリティマネジメントシステム基礎講座(1) - @IT
JIS Q 27002とは、企業などの組織における情報セキュリティマネジメントシステムの仕様を定めた規格です。
国際規格ではISO/IEC 27002になります。
JIS Q 27002において対象としている脅威は、悪い人々からの攻撃だけではありません。
住環境を共有する者(例えば,家族,友人)による,情報又は資源への認可されていないアクセスの脅威
(省略)
潜在的な物理的及び環境的脅威[例えば,盗難,火災,爆発,ばい(煤)煙,水(又は給水の不具合)(省略)
システムセキュリティ又はサービスに脅威をもたらすおそれのある,潜在的なあい(隘)路(bottlenecks)及び主要な要員への依存度合いを特定し,回避するために,管理者は,この情報を用いることが望ましく,また,適切な処置を立案することが望ましい。
JISQ27002:2014 情報技術-セキュリティ技術-情報セキュリティ管理策の実践のための規範
怖い人達から守れるか確認するペネトレーションテスト
勉強のきっかけになった問題
ペネトレーションテストの目的はどれか。
ペネトレーションテストとは、対象システムへ侵入してみるテスト技法です。
英語では、penetration test です。侵入テストとか侵入実験とも言います。
penetrationは和訳すると「侵入、進出」になります。
実際にネットワークの外部から内部へ侵入してみるテストで、ファイアウォール部分なんかのテストに使います。
通信ネットワークで外部と接続されたコンピュータシステムの安全性を調査するテスト手法の一つで、既に知られている手法を用いて実際に侵入や攻撃を試みる方式。
e-words.jp
目的は、テスト対象に侵入できないことを確認することです。
ネットワークに接続された情報システムは、外部からの攻撃にさらされる可能性があるので、対策をします。
例えば・・・
- セキュリティ用のソフトなどの導入
- ファイアーウォールの導入
とはいえ・・・
- 設定が十分じゃないかも
- 新たな脆弱性をついた攻撃手法が開発されるかも
そこで、ペネトレーションテストを実施して
- システムが攻撃に対して安全かな?
- 攻撃を受けた場合にどこまでセキュリティツールは耐えてくれるかな?
- 侵入されたらそこを踏み台にして他のネットワークを攻撃しないかな?
とかとか不安なことを観点にテストします。
例えば、「ネットワークへのアクセスコントロールが有効に機能しているか。」をチェックします。
侵入テストでは、セキュリティ強化を目指す管理者側が敢えてセキュリティホールの探査を攻撃を試みる。事前にあらゆる方法の攻撃を仕掛けてみることによって、セキュリティ上の問題を早期に発見し、対策を講じることができる。
www.sophia-it.com
近年インターネットの普及が目覚ましく、新たな技術がばりばり進出し・・・便利 VS 危険な状態です。
会社でもセキュリティのお話はよく出てきます。
labs.opentone.co.jp
labs.opentone.co.jp
labs.opentone.co.jp
labs.opentone.co.jp
labs.opentone.co.jp
造ったら使う前にちゃんとセキュリティの脆弱性をチェックしなきゃならない世の中です。