内部統制の基本的要素

  • 統制環境
  • リスクの評価と対応
  • 統制活動
  • 情報と伝達
  • モニタリング
  • ITへの対応

www.search-firm.co.jp

MySQLに対して特定の条件下でインポートを行うと文字化けが発生する

事象

特定の条件下でインポートを行うと文字化けが発生していた。
(同じサーバーに対して別の人がインポートした処理は文字化けが発生していなかった)

原因

WindowsCLI(DOSプロンプト)でmysqlSQLをインポートすると文字化けが発生していた。

詳解

利用しているサーバーにMySQL Workbenchで接続し文字コードを確認した。

MySQL Workbenchで接続した結果

その後、WindowscliMySQL Workbench内にあるmysql.exeを用いて、同じサーバーで同様の確認を行った。

DOSプロンプトでCLI接続した結果

結果、同じSQLを実行しているのに、別の結果が返ってきた。
WindowsDOSプロンプトの文字コードはCP932である。
そのため、どうもmysqlCLIモードで実行すると、character_set_clientをCP932で送っているからと思われる。
(なお、パケットの観察までは行っていない)

対応方法

案1:skip-character-set-client-handshakeをサーバー側で設定する。
案2:DOSプロンプトの文字コードをchcp 65001で変更してから接続する。その際、mysql.exeで接続する際にdefault-character-setで文字コードのパラメータを付与する。

chcp 65001実行後のコンソールで実行した結果(それ以外何も変更点無)

my.cnf/my.iniの優先順位とオプショングループ

my.cnf/my.iniの優先順位

マニュアルにきちんと記載してくれている。
dev.mysql.com

表 4.1 Windows システムで読み取られるオプションファイル
もしくは
表 4.2 Unix および Unix-Like システムで読み取られるオプションファイル
に記載されている順番を参照すれば良い。

なお、my.cnfに全ての設定が定義できる訳ではない。
どのパラメータが設定できる/できないは以下を参考にすれば良い。
dev.mysql.com
また、MySQL8.0ではSET PERSIST句という機能が新しく用意されており、
my.cnfよりも更に優先順位高く設定が行われる上に、
当機能を利用すればmy.cnfで定義できないパラメータも指定可能である。
但し、mysqld-auto.cnfという別の場所に定義されるため管理が猥雑になる欠点もある。
blog.s-style.co.jp

オプショングループ

my.cnfの[mysqld]や[client]という記述はオプショングループという定義である。

4.2.2.2 オプションファイルの使用
(中略)
オプションファイル構文
(中略)
[group]
group はオプションを設定するプログラムまたはグループの名前です。 グループ行のあと、すべてのオプション設定行は、オプションファイルが終了するか、または別のグループ行が指定されるまで、名前を指定したグループに適用されます。 オプショングループ名では、大文字と小文字は区別されません。

そのため、ここの記述無視して書いてると痛い目をみる。
(AmazonRDSのパラメータグループとか普段利用していて、dockerとかで利用する時に忘れてるとやらかす)
よって、同じ定義をしているのは、意味がある。

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock

なお、オプショングループは以下の特性がある。
・オプショングループ名は同じプログラム名に適応される。
・clientオプショングループは、mysqlだけでなくMySQLクライアント全体に適応される
・client、mysqlみたいな包括関係がある場合は、オプショングループで同じ値を指定すると後勝ちになる
【関連リンク】
yoneyore.hatenablog.com

Linuxのスワップをクリアする方法

前提条件

スワップで利用している量が実メモリに移動してもメモリ不足にならないか計算しておくこと
 (実メモリ足りない時に当コマンド投入しても意味が無い)
・キャッシュも勘案して問題ないか確認しておくこと
 (最悪食い潰すことは可能であるが、結局遅いだけである)

コマンド

swapoff -a && swapon -a

注意事項

・実行前に前処理は不要だが、実行すると処理が終わるのにしばらく時間がかかる
 swapoffコマンドが徐々にスワップで利用していた分を実メモリに移していく。
 (topと眺めていると少しずつスワップのとこが、実メモリに移っているのが観測できる)
 swaponコマンドは領域割当を数回で実施するので、すぐにスワップ領域が生成される。
・当コマンドを投入するとCPUリソースもそれなりに利用される
・そのため、実行する際には出来るだけサーバーが落ち着いた状態で実施すること
 (メモリ足りなくてトラブってる最中に投入するコマンドではない)

その他

キャッシュをクリアするコマンド
sync;sync;sync;sleep 3;echo 3 > /proc/sys/vm/drop_caches

Amazon CorrettoにおけるJMC・JFRの利用方法

前提

AWS Correttoで調べた内容にて記載
但し、他のOpenJDKにおいても殆ど同じ(はず)

概要

JVMのヒープの状況やスレッドの情報などを確認するためのツール
JMCとJFRの主な違いは以下の通り

JMC[JDK Mission Control]
  • GUIで確認するためのツール
  • リアルタイムで観測可能
  • JFRで取得した結果を可視化
JFR[JDK Flight Recorder]
  • 指定した期間イベントを記録するためのツール
  • 低負荷で観測することが可能

JMC、JFR共にJava7で提供されていたが、当時は本番利用はサブスクリプションが必要だった。
しかし、Oracle社がOpenJDKに寄贈してくれたので、Java11で本番でも無償利用可能になった。
また、Java8でも利用できる様にバックポート対応してくれた。
Amazon Corretto 8u262 と Corretto 11.0.8 が利用可能に
そのため、古いブログの記事とかでは本番ではライセンスが必要とか、
起動する際にUnlockCommercialFeaturesみたいなオプションが必要だったのは上記背景がある。

入手方法

JMC

Correttoには2021年6月時点では同梱されていない。
別途配布が行われているので、こちらから取得可能である。
(以下のページのDownloadに記載しているrelease pageから取得可能)
GitHub - corretto/corretto-jmc: A build of JDK Mission Control (JMC) by the Corretto team.

JFR

Correttoに同梱されている。

起動方法

JMC

JMC自身はjmc.exeを起動すれば良い。
JMC8.0.0.1 Windows版においては、ようこそ画面は文字化けして起動する。
(jmc.iniでfile.encodingをUTF8を指定したが変わらずであった)

f:id:yoneyore:20210606011959p:plain
閉じるとそれ以降は文字化けしていない

接続対象に関しては、ローカルとそれ以外で接続方法が異なる。

[ローカル]
勝手にJMCが検出してくれる。
(JDP[Java Discovery Protocol ]という機構で検出してくれている)

[ローカル以外]
JMXを有効化しておく必要がある。

(Javaプロセス起動時)

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=ポート番号
-Dcom.sun.management.jmxremote.rmi.port=ポート番号(上と同じで可)
-Dcom.sun.management.jmxremote.authenticat=false
-Dcom.sun.management.jmxremote.ssl=false

(Javaプロセス起動後)

jcmd Javaプロセス番号 ManagementAgent.start jmxremote.port=ポート番号 jmxremote.rmi.port=ポート番号 jmxremote.authenticate=false jmxremote.ssl=false

jcmdの上記オプションを忘れてしまった場合、以下の手順で確認できる。
1.jmc上で任意のプロセス(jmc自身でもOK)を選択
2.右クリックし、リモートJMXエージェントの制御を選択
3.以下の様なコンソールが現れる。
  オプションなど変更すると、一番下にjcmdでどの様なコマンドを発行するのか確認可能

f:id:yoneyore:20210606234635p:plain
なお、JMXの稼働状況確認や起動・停止することも可能
JFR

[jmc経由]
予めJMCでJFRを実行したいJavaプロセスと接続を行っておく必要がある。
その後、対象プロセスを選択した状態で右クリックを行い、フライト記録の開始を選択する。
するとフライト記録の開始というウィザードが表示される。
内容に従いながら設定することで記録が開始される。

[jcmd経由]
例) 1分録画する場合

jcmd Javaプロセス番号 JFR.start name=test maxage=1m filename=c:\temp\hogehoge.jfr

オプション詳細はJavaコマンドマニュアルのAdvanced Runtime Options for Java当たりから記載有
(但し、他のオプションも入り乱れている)

利用方法

他のサイトやYoutube上で沢山解説してくれている。

公式、英語だけど字幕&翻訳機能使えばだいたい追える
www.youtube.com
RedHatさんの公式ブログ
OpenJDK 8uでJDK Flight Recorderの入門 - 赤帽エンジニアブログ

P26~P39当たりに記載有
それ以外の部分もMTAやGC Viewerなど聞いたこと無いという人は是非見るべき資料
Javaの障害解析に関する道しるべ的良い資料
speakerdeck.com

その他

リモート接続がうまくいかない

どうもリモート接続するとうまくいかないケースがある。
原因としては、rmi接続する時の名前解決がうまくいかない場合に発生する模様である。
(IPv4で解決するところと、IPv6で解決するところが混在した場合に起きている?)
加えて、com.sun.management.jmxremote.local.onlyがtrueになっていた。
最適解では無いであろうが、以下の方法を行う事で接続できる様になった。

  • 接続対象のJava起動時に、 java.rmi.server.hostname=接続対象のIPv4アドレス を指定する
  • 接続対象のJavaJMX起動時に、 jmxremote.host=接続対象のIPv4アドレス を指定する
認証やSSLの設定を行いたい

Windowsのがうまく設定できないので、実現出来た時に纏める
Linuxの場合の対応方法
www.programmersought.com

jcmdで良く利用するコマンド
# JMXの起動(上記解説の通り、別途オプションが色々必要)
jcmd Javaプロセス番号 ManagementAgent.start
# JMXの状態確認
jcmd Javaプロセス番号 ManagementAgent.status
# JMXの停止
jcmd Javaプロセス番号 ManagementAgent.stop
# 起動引数の確認
jcmd Javaプロセス番号 VM.command_line
# system.propertyの値の確認
jcmd Javaプロセス番号 VM.system_properties
# VMフラグの値を出力(-allで全量出力)
jcmd Javaプロセス番号 VM.flags
# スレッドダンプ取得(-lで詳細出力)
jcmd Javaプロセス番号 Thread.print
# ヒープダンプ取得(-allでファントム参照も含める、引数無の場合はフルGC後取得)
jcmd Javaプロセス番号 GC.heap_dump filename=c:\temp\hogehoge.dump

詳しく知りたい場合は、JavaSE11のマニュアル jcmdユーティリティを参照すれば良い。

参考資料

JDK11のJMCのマニュアル、今は分かりにくい
JDK Mission Control | Oracle 日本
JDK7のJMCのマニュアル、古いけど日本語で読みたいなら今はこっち
Java Platform, Standard Edition Java Mission Control ユーザーガイド
JFRに関する解説を記載してくれている
目次 · 入門: JDK Flight Recoder
JFR Event Streamingについて
【NADP】JFR Event Streamingについて(デモ解説その1) | インサイト - Natic | 日商エレクトロニクス
トラブルシューティングについてどうやってしていけばいいのか丁寧に解説してくれている
youtu.be
古い本であるが、現代においても体系的に学習するのにとてもいい本

現場で使えるデバック&トラブルシュートが理解できる様になってから買った方がいいかも基礎が身についてないと感じたらこの本がお勧め
ストレージやCPUで遅くなる理由などがイメージしやすくなる

認証・認可関連の本(2024年3月時点)

あまり認証や認可に関する本が無いので纏めてみた(随時更新中)。
この中でピンとくるのが無ければ、Web界隈を追い求める方が良さげ。
(なお、英語本、技術書典界隈などは当方追えてないですが…)

OpenID Connect/OAuth関連

OpenID Connect入門: 概念からセキュリティまで体系的に押さえる

Kindleでしか買えなさそう

Software Design (ソフトウェアデザイン) 2021年10月号

特集記事:挫折していないOAuth/OpenID Connect入門
認証・認可フローの仕組みを解説
Authleteの川崎さんが書かれている記事なので、かなりきめ細かく書いてくれている

【電子版】雰囲気でOAuth2.0を使っているエンジニアがOAuth2.0を整理して、手を動かしながら学べる本

今のところ電子版、booth経由の購入のみ
authya.booth.pm

【電子版】OAuth、OAuth認証OpenID Connectの違いを整理して理解できる本

今のところ電子版、booth経由の購入のみ
booth.pm

【電子版】OAuth・OIDCへの攻撃と対策を整理して理解できる本

今のところ電子版、booth経由の購入のみ
authya.booth.pm

Firebase Authentication で学ぶソーシャルログイン入門

Firebaseを題材に書かれているが、認証周りの実装を図を使って丁寧に解説されている。
ログイン画面などを初めて担当する際にとても参考になるかと。

SAML関連

SAML入門

表紙は可愛らしく描かれてるけど、中はしっかり書かれている
海外本除けば現状単独で書籍化されているのはこれ位では

認証全体

Software Design (ソフトウェアデザイン) 2020年11月号

特集記事:今更聞けない認証・認可
雑誌なので、最初に読むものとしてはとっかかりやすい

Software Design (ソフトウェアデザイン) 2024年2月号

特集記事:ゼロから学ぶWeb APIセキュリティ 設計から始める攻撃対策
第4章で認証・認可に関する記載有

日経ITエンジニアスクール 暗号と認証 最強の指南書

認証周りも含めた基礎知識固めるための本
この辺の知識が手薄、情報処理試験を真面目に受けてない人は読んだ方がいいかも

実践入門ユーザー認証 試して学ぶパスワードレス

oktaの画面キャプチャ多め
後半のFIDO書かれている書籍殆ど無いので、あるにこしたことない本

今さら聞けない暗号技術&認証・認可

Software Design の暗号技術、認証・認可に関連する記事を再編集した書籍
但し、発行月2023年3月以降の内容は含まれていない
当テーマのためだけにバックナンバー全部集める位なら、昔の分はこちら一冊買う方が良さげ

マスタリングTCP/IP 情報セキュリティ編(第2版)

暗号技術や認証技術について記載
情報系学部2~3年生程度の内容レベル

認証(メール)

サーバーを構築することが無いため拝読したことは無いが、どこかで読みたいと考えている本

暗号特化

Software Design(ソフトウェアデザイン) 2022年3月号

特集記事:今さら聞けない暗号技術
暗号技術何それ?みたいな状態であれば、ここから読み始めるのがいいかも

暗号技術入門

良書と言われている本
改版もされており図も意外と多め

暗号技術のすべて

IPUSIRONさんが書かれている本
こちらも難しい内容に対して読みやすい構成かと

暗号と認証

暗号化がメインテーマで、理論的な内容が多くを占める
基礎力高めるのにはとても良い本
但し、案件で認証とかでトラブル起こしてる時に読む本ではない

現代暗号技術入門

自身は未読
書いている人がこの道のプロなので筋は良さそう

製品関連

認証と認可 Keycloak入門

OAuth/OpenID Connectに準拠したAPI認可とシングルサインオンの実現
あまりこの手の本は売れないであろうに書いてくれたことに感謝
Keycloakの商用版であるRedHat SSOにも有効な書物と思われる

実践 Keycloak ー OpenID Connect、OAuth 2.0を利用したモダンアプリケーションのセキュリティー保護

Keycloakに関する動物本

ひと目でわかる Intune 改訂新版

Entra ID(旧AzureAD)・スマホという案件が来そうなら、とりあえずぽちっておくと助けになるかも

セキュリティ界隈

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版

通称徳丸本
Web開発してるのにまだ読んでない人は絶対読むべき本
見える風景が変わるはず
Web開発で良い本何?と聞かれたら必ず勧める1冊
但し、きちんと読むには時間が必要かつ基礎知識も必要

徳丸浩のWebセキュリティ教室

徳丸本では心が折れる、全く歯が立たない人に向けた本(という認識)

フロントエンド開発のためのセキュリティ入門

入社2~3年目位を想定して書かれている(とどこかでコメント見かけた)
徳丸本の一歩手前&フロント特化型という感じかと

セキュア・バイ・デザイン

かなり読むの疲れる内容ではあるが、色んなところで引用されているイメージ
なお、徳丸本読んでない人がこちらから読むのは心折れると思う

クラウドネイティブセキュリティ入門

未読(積んだまま今に至る)

物理セキュリティの実践(ハッカーの技術書)

USBや入館証など物理に対するハッキングに着目した本

ハッカー関連

ホワイトハッカーの教科書

この辺から興味を持っていくのもありかもと思い

ホワイトハッカーの教科書

ホワイトハッカーの教科書

  • 作者:IPUSIRON
  • シーアンドアール研究所
Amazon

ハッキング・ラボのつくりかた

多少事前知識は必要であるが、次のステップアップとかに良いのでは

Kali Linux ビギナーズガイド

Kali Linuxなるものを知った際に有効かも
(とはいえ最近はいろんな本で紹介はされているが)
[asin:B08544DVRT:detail]

サイバーセキュリティプログラミング

どうやってハッキングされるのか?という観点で書かれている
Pythonではあるが考え方は有用なことが多い

古そうなので下に移動させた本

OAuth徹底入門

かなりお堅い本、加えて古くなっている
OAuth自体を用いて基盤作る人向けかも
その分きちんと読み切ったら力は付くかと

「Auth0」で作る!認証付きシングルページアプリケーション

2018年8月と少し古い
初心者向け本の模様

今は理由無ければ買わないで良いと思う本

脱オンプレミス!クラウド時代の認証基盤 Azure Active Directory

過去の歴史まで把握しておきたいなら買ってもいいかもやろけど

バイナリレベルで再帰的にファイル群を比較したい

【前提条件】
・ファイルの構造が同一であるが、中身が多少異なるディレクトリ同士を比較したい
・仮に/tmp/aと/tmp/b配下の全てのファイルを比較したいとする

【コマンド】

cd /tmp/a
find . -type f -exec cmp '{}' /tmp/b/'{}' \;

【その他】
・テキストレベルで再帰的に比較したい

diff -r /tmp/a /tmp/b

・差異があるかどうかだけを比較したい

cd /tmp/a
find . -type f -exec sha512sum '{}' \; | sort > ../a.txt
cd /tmp/b
find . -type f -exec sha512sum '{}' \; | sort > ../b.txt
diff /tmp/a.txt /tmp/b.txt