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をインストールして鍵を作ります。

qiita.com

秘密鍵のフォーマットを見てみます。

-----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

qiita.com

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を設定します。

  1. Tera Termを起動します。
  2. [ホスト]にCentOSIPアドレスを設定します。
  3. [OK]ボタンを押下します。f:id:ponsuke_tarou:20171101213358j:plain
  4. [続行]ボタンを押下します。f:id:ponsuke_tarou:20171101213404j:plain
  5. ユーザ名とパスワードを入力して[OK]ボタンを押下します。f:id:ponsuke_tarou:20171101214521j:plain

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 111 21:17 .
drwxr-xr-x. 5 root   root    47 111 21:15 ..
-rw-r--r--. 1 chovin chovin  18  97 01:25 .bash_logout
-rw-r--r--. 1 chovin chovin 193  97 01:25 .bash_profile
-rw-r--r--. 1 chovin chovin 231  97 01:25 .bashrc
drwx------. 2 chovin chovin   6 111 21:17 .ssh

# ログアウトします。
$ logout
Connection to 192.168.0.6 closed.

公開鍵を配置します。

  1. Tera Termを起動して作ったユーザでCentOS7に接続します。
  2. 公開鍵をTera Termのウィンドウにドラッグ&ドロップします。
  3. 配置先を指定して[SCP]ボタンを押下します。f:id:ponsuke_tarou:20171101214524j:plain
# 配置した公開鍵を確認します。
$ ls -la ./.ssh/
合計 4
drwx------. 2 chovin chovin  52 111 22:27 .
drwx------. 3 chovin chovin  95 111 21:27 ..
-rw-r--r--. 1 chovin chovin 403 1031 23:42 CentOS7inMacCreatedTeraTerm_id_rsa.pub

# 公開鍵をリネームします。
$ mv ./.ssh/CentOS7inMacCreatedTeraTerm_id_rsa.pub ./.ssh/authorized_keys

# 確認します。
$ ls -la ./.ssh/
合計 4
drwx------. 2 chovin chovin  29 111 22:33 .
drwx------. 3 chovin chovin  95 111 21:27 ..
-rw-r--r--. 1 chovin chovin 403 1031 23:42 authorized_keys

# ログアウトします。
$ logout

WindowsからCentOS7へTera Termを使ってRAS鍵認証で接続します。

  1. Tera Termを起動します。
  2. [キャンセル]ボタンを押下してダイアログを閉じます。f:id:ponsuke_tarou:20171101223824j:plain
  3. [設定] > [SSH認証]を選択します。f:id:ponsuke_tarou:20171101223827j:plain
  4. ユーザ名と秘密鍵の場所を設定して[OK]ボタンを押下します。f:id:ponsuke_tarou:20171101223835j:plain
  5. [ファイル] > [新しい接続]を選択してCentOS7へ接続します。f:id:ponsuke_tarou:20171101223840j:plain
  6. パスフレーズを入力して[OK]ボタンを押下します。f:id:ponsuke_tarou:20171101225512j:plain
# 接続できました。
Last login: Wed Nov  1 22:27:04 2017 from 192.168.0.7
$ pwd
/home/chovin

PuttygenでRAS鍵を作ってWindowsからCentOS7へ接続できるようにする

VirtualBoxに作ったCentOS(ゲストOS)にMac(ホストOS)からRAS鍵認証でログインできるようにしたので、Windows(ネットワーク内のPC)からもRAS鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境
    • ホストOS : macOS Sierra Version10.12.6
    • VirtualBox : 5.1.26 r117224 (Qt5.6.2)
    • ネットワーク内のPC : Windows10 64bit
      • Putty : Release 0.70
      • PuTTYgen : Release 0.70

Puttygenで公開鍵と秘密鍵を作成します。

Puttyをインストールします。

qiita.com

Puttygenで鍵を作成します。

  1. Pttuyに同梱されているPuttygenを起動します。
  2. [Parameters] > [Type of key to generate] で「RSA」を選択します。
  3. [Number of bits in generated key:]で鍵の強度を選択します。
  4. [Generate]ボタンを押下します。f:id:ponsuke_tarou:20171029234034j:plain
  5. スペースの部分でマウスをぐるぐるします。f:id:ponsuke_tarou:20171029234114j:plain
  6. 鍵が作成されます。f:id:ponsuke_tarou:20171029234157j:plain
  7. パスフレーズ*1を設定します。f:id:ponsuke_tarou:20171029234405j:plain
  8. [Save public key]ボタンを押下して公開鍵を任意の場所に保存します。
  9. [Save private key]ボタンを押下して秘密鍵を任意の場所に保存します。

秘密鍵のフォーマットを見てみます。

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 ----

qiita.com

CentOS7に公開鍵を配置します。

CentOS7に接続するためにPuttyを設定します。

  1. Puttyを起動します。
  2. [Host Name(or IP address)]にCentOSIPアドレスを設定します。
  3. [Port]に「22」を設定します。f:id:ponsuke_tarou:20171030224609j:plain
  4. [Saved Sessions]に自分に分かる名前を設定します。
  5. [Connection] > [Data] > [Auto-login username]にユーザ名を設定します。f:id:ponsuke_tarou:20171030224613j:plain
  6. [Session] > [Save]ボタンを押下して設定を保存します。f:id:ponsuke_tarou:20171030224616j:plain
  7. [Open]ボタンを押下して接続します。
  8. 初回接続では鍵についてのメッセージが表示されるので[はい]で続けます。f:id:ponsuke_tarou:20171030224621j:plain

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 1030 22:24 .
drwxr-xr-x. 4 root    root     33  68 21:27 ..
-rw-r--r--. 1 ponsuke ponsuke  18  83  2016 .bash_logout
-rw-r--r--. 1 ponsuke ponsuke 193  83  2016 .bash_profile
-rw-r--r--. 1 ponsuke ponsuke 231  83  2016 .bashrc
drwxrwxr-x. 2 ponsuke ponsuke   6 1030 22:24 .ssh

# ディレクトリと中身の所有者を変更します。
$ chown -R ponsuke:ponsuke /home/ponsuke/.ssh/

# 権限を確認します。
$ ls -la
合計 12
drwx------. 3 ponsuke ponsuke  74 1030 22:24 .
drwxr-xr-x. 4 root    root     33  68 21:27 ..
-rw-r--r--. 1 ponsuke ponsuke  18  83  2016 .bash_logout
-rw-r--r--. 1 ponsuke ponsuke 193  83  2016 .bash_profile
-rw-r--r--. 1 ponsuke ponsuke 231  83  2016 .bashrc
drwxrwxr-x. 2 ponsuke ponsuke   6 1030 22:24 .ssh

# ログアウトします。
$logout

公開鍵を配置します。

# Puttyに同梱されているSCPツールを使います。
$ ls -la /c/app/putty/
total 3697
drwxr-xr-x 1 m-uki 197609      0 1030 22:04 ./
drwxr-xr-x 1 m-uki 197609      0 1030 22:35 ../
-rw-r--r-- 1 m-uki 197609   1338 74 19:31 LICENCE
-rwxr-xr-x 1 m-uki 197609 313912 74 19:34 pageant.exe*
-rwxr-xr-x 1 m-uki 197609 617048 74 19:34 plink.exe*
-rwxr-xr-x 1 m-uki 197609 626744 74 19:34 pscp.exe* #<------------------- これです。
-rwxr-xr-x 1 m-uki 197609 643144 74 19:34 psftp.exe*
-rw-r--r-- 1 m-uki 197609 283045 74 19:31 putty.chm
-rwxr-xr-x 1 m-uki 197609 854072 74 19:34 putty.exe*
-rwxr-xr-x 1 m-uki 197609 407104 74 19:35 puttygen.exe*
-rw-r--r-- 1 m-uki 197609   1893 74 19:30 README.txt
-rw-r--r-- 1 m-uki 197609    104 74 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 1030 22:34 .
drwx------. 3 ponsuke ponsuke  95 1030 22:27 ..
-rw-rw-r--. 1 ponsuke ponsuke 477 1030 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.

webkaru.net

puttyの公開鍵をOpenSSH形式に変換するmistymagich.wordpress.com

uxmilk.jp

WindowsからCentOSPuttyを使ってRAS鍵認証で接続します。

  1. Puttyを起動します。
  2. [Connection] > [SSH] > [Auth] > [Private key file for authentication:]に秘密鍵を設定します。f:id:ponsuke_tarou:20171030225342j:plain
  3. [Session] > [Save]ボタンを押下して設定を保存します。
  4. [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へ接続できるようにする

MacVirtualBoxに作ったCentOS(ゲストOS)にRSA鍵認証許可を設定したので、Mac(ホストOS)からRSA鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境

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)

qiita.com

秘密鍵のフォーマットを見てみます。

$ 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

qiita.com

ゲスト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  81 23:00 .
drwxr-xr-x. 4 root root    33  68 21:27 ..
-rw-------. 1 mana mana 20968 1025 01:20 .bash_history
-rw-r--r--. 1 mana mana    18  83  2016 .bash_logout
-rw-r--r--. 1 mana mana   193  83  2016 .bash_profile
-rw-r--r--. 1 mana mana   231  83  2016 .bashrc
drwx------. 2 mana mana    29  81 23:18 .ssh
-rw-rw-r--. 1 mana mana   218  712 00:37 err.txt
drwxrwxr-x. 3 mana mana    19  77 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

クロスサイトスクリプティングの脅威を学ぶ。

勉強のきっかけになった問題

クロスサイトスクリプティングの手口に該当するものはどれか。

  1. 攻撃者が,スクリプトを用いてWebサイトのOSコマンドを呼び出し,任意のファイルの読出しや変更・削除などの不正操作をする。
  2. 攻撃者が,スクリプトを用いて特定のPCへ大量に接続要求を送り出し,通信機能を停止させる。
  3. 攻撃者が用意したスクリプトでWebサイトのサービスポートに順次アクセスし,各ポートに対応するサービスに存在するセキュリティ上の弱点を探し出す。
  4. 攻撃者が用意したスクリプトを,閲覧者のWebブラウザを介して脆弱なWebサイトに送り込み,閲覧者のWebブラウザ上でスクリプトを実行させる。

応用情報技術者平成27年秋期問36 クロスサイトスクリプティング|応用情報技術者試験.com

クロスサイトスクリプティング(CSS / XSS)とは、エコーバックするサイトの脆弱性を使って悪いスクリプトを閲覧者に送信します。

ウェブページの部分をユーザからの入力をそのままエコーバック(オウム返し)することによって生成しているアプリケーションのセキュリティ上の不備を利用して、サイト間を横断して悪意のあるスクリプトを注入する攻撃のことをいう。また経緯上、それを許してしまう脆弱性についても、このように呼ばれている。
クロスサイトスクリプティング|ITパスポート試験ドットコム

https://thinkit.co.jp/images/tech/7/1/3.gif
thinkit.co.jp

  • 例えば・・・
    • Webアプリケーションに用意された入力フィールドに,悪意のあるJavaScriptコードを含んだデータを入力する。
    • Webページに,ユーザの入力データをそのまま表示するフォーム又は処理があるとき,第三者が悪意あるスクリプトを埋め込むことでクッキーなどのデータを盗み出す。

電子掲示板のように、閲覧者から送信されたデータをコンテンツの一部として他の閲覧者に見せるようなプログラムがあるWebサイトで生じる脆弱性および攻撃手法で、攻撃者が外部のサイトに用意した悪意のあるスクリプトをターゲットのサイトに注入して閲覧者に送信する

(省略)

攻撃者はターゲットとなる脆弱なサイトへのリンクを設置した罠サイトを設け、閲覧者がリンクをクリックするよう仕向ける。その際、リンクのURLのパラメータ部分にスクリプト(JavaScriptコード)やHTMLタグの断片を埋め込み、閲覧者が脆弱なサイトを開くとページ内に自動的にそれらの悪質なスクリプトが埋め込まれ、即座に閲覧者のWebブラウザで実行される。
e-words.jp

エコーバックとは、送信した文字をそのまま返信してくる機能です。

e-words.jp

セキュリティ対策は、入出力をエスケープすることです。

  • Webアプリケーションがクライアントに入力データを表示する場合、データ内の特殊文字を無効にする処理を行う。
  • HTMLのマークアップ言語で、特定の意味を持つ文字をエスケープする
  • JavaScript特殊文字エスケープさせる
  • HTML 要素の属性は""(ダブルクオーテーション ) で囲む
  • CGIが受け取ったパラメータは、タグなどは無効化する
  • HTTP レスポンスヘッダーに文字コードを指定する
  • 出力する全ての要素に対してエスケープ処理を行う
  • URL は「http : //」か「https : //」で始まるもののみ出力する
  • 要素の内容を動的に生成しない

次回の勉強内容

ponsuke-tarou.hatenablog.com

心の隙間に攻撃するソーシャルエンジニアリングとフィッシング

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

電子的な方法を用いないで、緊急事態を装って組織内部の人間からパスワードや機密情報のありかを不正に聞き出して入手する行為は,どれに分類されるか。

ア. ソーシャルエンジニアリング
イ. トロイの木馬
ウ. パスワードクラック
エ. 踏み台攻撃
ソフトウェア開発技術者平成17年春期問75 ソーシャルエンジニアリング|応用情報技術者試験.com

http://warau-new.jp/chara/images/chara_pose_moguro4.png
warau-new.jp

ソーシャル・エンジニアリングとは、心の隙間やうっかりミスにつけ込んで情報を盗むことです。

ソーシャル・ワークともいいます。

技術的な方法ではなく人の心理的な弱みに付け込んで、パスワードなどの秘密情報を不正に取得する方法の総称。
ソーシャルエンジニアリング|ITパスポート試験ドットコム

  • 例えば・・・
    • パスワードを入力するところを後ろから盗み見る
    • オフィスから出る書類のごみをあさって手がかりとなる個人情報の記されたメモを探し出す
    • ネットワークの利用者や顧客になりすまして電話で管理者にパスワードの変更を依頼して新しいパスワードを聞き出す
    • 電話に出た子どもに対して、両親に関する個人情報を聞き出す
    • 緊急事態を装って組織内部の人間からパスワードや機密情報を 入手する
    • システム管理者などを装い,利用者に問い合わせてパスワードを取得する。
標的型攻撃メールといって、件名や本文にターゲットの業務に関係がありそうな内容を書いてメールするものもあるのです。

http://www.soumu.go.jp/main_sosiki/joho_tsusin/security/business/staff/img/ill05_01.jpg

標的型攻撃への対策|社員・職員全般の情報セキュリティ対策|企業・組織の対策|国民のための情報セキュリティサイト

フィッシング(phishing)とは、フィッシングサイトへのリンクやURLを嘘メールに書いてアクセスさせる手法です。

ちまたでよく言う「フィッシング詐欺」です。
メールで個人情報を確認されたら要注意です。URL先では銀行のホームページに表示されているメニューから操作を始めたりして安易な入力はさけなきゃだめです。

金融機関 (銀行やクレジットカード会社) などを装った電子メールを送り、住所、氏名、銀行口座番号、クレジットカード番号などの個人情報を詐取する行為です。電子メールのリンクから偽サイト (フィッシングサイト) に誘導し、そこで個人情報を入力させる手口が一般的に使われています。
www.antiphishing.jp

http://www.jabank.org/attention/phishing/images/img_01.gif
www.jabank.org

  • 例えば・・・
    • 偽のホームページにアクセスさせるために,金融機関などを装い無差別に送信される。
    • "本人情報の再確認が必要なので入力してください"という電子メールで示されたURLにアクセスし,個人情報を入力したところ,詐取された。
    • 電子メールを発信して受信者を誘導し,実在する会社などを装った偽の Web サイトにアクセスさせ,個人情報をだまし取る。
    • 電子メールを介して偽のWebサイトに誘導し,個人情報を盗み出す。

次回の勉強内容

ponsuke-tarou.hatenablog.com

大切なセキュリティ対策の方針について学びます。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

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):情報資産が必要になったとき、利用できる状態にあること

www.dqs-japan.jp

ISMSとは、技術対策だけではなく組織としてセキュリティレベル・プラン・資源配分を決めてシステムを運用していくことです。

Information Security Management Systemの略で、日本語では情報セキュリティマネジメントシステムと言います。

ISMSとは、個別の問題毎の技術対策の他に、組織のマネジメントとして、自らのリスクアセスメントにより必要なセキュリティレベルを決め、プランを持ち、資源を配分して、システムを運用することである。
ISMS(情報セキュリティマネジメントシステム)とは - 情報マネジメントシステム認定センター(ISMS-AC)

リスクアセスメントとは、リスクを洗い出して撲滅したり低減させていくことです。

IT世界だけのことではありません。

リスクアセスメントは、職場の潜在的な危険性又は有害性を見つけ出し、これを除去、低減するため手法です。
中災防:リスクアセスメントとは なぜリスクアセスメントが必要か

www.kensaibou.or.jp

anzeninfo.mhlw.go.jp

ISMS認証基準には、実施状況の確認や見直しについても定められています。

■第3 ISMS の要求事項
(2)マネジメント枠組みの確立
 各項目について、定期的もしくは必要に応じて見直しすること。
(3)管理策の実施
 管理策を講ずるために採用された手続きについて、第 4 10(2)に従いその有効性を確認すること。
(5)文書管理
 (ア) ISMS 文書の利用者が文書を容易に利用することができる
 (イ) ISMS文書の定期的な見直しを行い、情報セキュリティポリシーに対する準拠性を維持しながら必要に応じて改訂する
 (エ) ISMSを運用するために必要なすべての事業所等において ISMS文書が閲覧可能である
■第4 詳細管理策
(2)セキュリティポリシー遵守状況の確認
 ① すべての手続きが情報セキュリティポリシーに準拠して実行されていることを定期的に見直すこと。
 ② 情報システムが情報セキュリティポリシー及び関連する対策基準や手順書等に準拠していることを定期的に確認すること。

https://isms.jp/doc/ismsreq08.pdf

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 情報技術-セキュリティ技術-情報セキュリティ管理策の実践のための規範

怖い人達から守れるか確認するペネトレーションテスト

勉強のきっかけになった問題

ペネトレーションテストの目的はどれか。

  1. 暗号化で使用している暗号方式と鍵長が,設計仕様と一致することを確認する。
  2. 対象プログラムの入力に対する出力結果が,出力仕様と一致することを確認する。
  3. ファイアウォールが単位時間当たりに処理できるセッション数を確認する。
  4. ファイアウォールや公開サーバに対して侵入できないことを確認する。

平成26年春期問42 ペネトレーションテストの目的|応用情報技術者試験.com

ペネトレーションテストとは、対象システムへ侵入してみるテスト技法です。

英語では、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

造ったら使う前にちゃんとセキュリティの脆弱性をチェックしなきゃならない世の中です。

エンディアンは複数バイトのデータを並べる方法です。

勉強のきっかけになった問題

16進数 ABCD1234 をリトルエンディアンで4バイトのメモリに配置したものはどれか。ここで, 0~+3はバイトアドレスのオフセット値である。

ア. http://www.ap-siken.com/kakomon/29_haru/img/21a.gif
イ. http://www.ap-siken.com/kakomon/29_haru/img/21i.gif
ウ. http://www.ap-siken.com/kakomon/29_haru/img/21u.gif
エ. http://www.ap-siken.com/kakomon/29_haru/img/21e.gif
平成21年秋期問24 リトルエンディアンで配置したもの|応用情報技術者試験.com

エンディアンとは、メモリにデータを送る時のデータの並べ方です。

バイトオーダーとも言います。
コンピュータでデータをメモリに読み書きしたり、ディスクに読み書きするときには、1バイトを最小単位にして行います。
エンディアンでは4バイト単位で管理してメモリにデータを送ります。

エンディアンとは、複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、どのような順番で各バイトを記録・伝送するかを表す順序のこと。
e-words.jp

トルエンディアンは、4バイトにデータを後ろから順に格納していく方法です。

例えば・・・ 16進数 : ABCD1234(10101011 11001101 00010010 00110100) をトルエンディアンで4バイトに格納すると

  • 1バイト目 : 34(00110100)
  • 2バイト目 : 12(00010010)
  • 3バイト目 : CD(11001101)
  • 4バイト目 : AB(10101011)

となります。
※. ()内は2進数です。

https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Little-Endian-ja.svg/280px-Little-Endian-ja.svg.png
エンディアン - Wikipedia

ビッグエンディアンは、4バイトにデータを前から順に格納していく方法です。

例えば・・・ 16進数 : ABCD1234(10101011 11001101 00010010 00110100) をビッグエンディアンで4バイトに格納すると

  • 1バイト目 : AB(10101011)
  • 2バイト目 : CD(11001101)
  • 3バイト目 : 12(00010010)
  • 4バイト目 : 34(00110100)

となります。
※. ()内は2進数です。

https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Big-Endian-ja.svg/280px-Big-Endian-ja.svg.png
エンディアン - Wikipedia

どのエンディアンが使われるかはCPUによって決まります。

f:id:ponsuke_tarou:20171009204140p:plain
Endian(エンディアン)ってなに? | 学校では教えてくれないこと | [技術コラム集]組込みの門 | ユークエスト株式会社

バイエンディアンは、トルエンディアンビッグエンディアンを切り替えられる方法だそうです。

実際にエンディアンを見てみる

任意の16進数をトルエンディアンビッグエンディアンに変換する方法

こちらのサイトでカンタンに変換してくれます。

web.save-editor.com

自分のパソコンのエンディアンを確認する方法

Linuxのodコマンドでファイルのマジックナンバーを見ることで確認できます。
OSがmacOS SierraでプロセッサがIntel Core i7(x86)のパソコンに置いた拡張子.pngのファイルを見てみます。
.pngマジックナンバーは、16進数で「89 50 4E 47」です。

$ od -t x -A x /Users/mana/Desktop/ThisIsPingFile.png | head -1
0000000          474e5089        0a1a0a0d        0d000000        52444849

「474e5089」となっていることからトルエンディアンであることがわかります。

【 od 】 バイナリ・ファイルの内容を閲覧す

  • オプション
    • -A 表示するオフセットの基数を指定する
    • -t 表示のタイプを指定する
  • 表示タイプ
    • x 16 進数

Linuxコマンド集 - 【 od 】 バイナリ・ファイルの内容を閲覧する:ITpro

【 head 】 ファイルの先頭部分を表示する

  • オプション
    • -n ファイルの先頭からN行を表示する

Linuxコマンド集 - 【 head 】 ファイルの先頭部分を表示する:ITpro

マジックナンバー (magic number)とは
ハードコーディングされた(ソースコードの中に直接埋め込まれた)何らかの意味を持つ値のこと
http://wa3.i-3-i.info/word12868.html

qiita.com

qiita.com

CPUに役立っているレジスタの種類を知る

勉強のきっかけになった問題

CPUのスタックポインタが示すものはどれか。

ア. サブルーチン呼出し時に,戻り先アドレス及びレジスタの内容を
  格納するメモリのアドレス
イ. 次に読み出す機械語命令が格納されているアドレス
ウ. メモリから読み出された機械語命令
エ. 割込みの許可状態,及び条件分岐の判断に必要な演算結果の状態
平成24年秋期問10 スタックポインタが示すもの|応用情報技術者試験.com

CPUとは、パソコンの脳みそです。

省略しないと、Central Processing Unitです。
日本語で言うと、中央演算装置です。
マイクロプロセッサに半導体チップとして入っていて、計算処理なんかをしてくれるパソコンの脳みそです。

CPUの種類はパソコンで見るとこんな感じで表示されています。
f:id:ponsuke_tarou:20171001191331p:plain

マイクロプロセッサの見た目はこんな感じ。

https://shop-media.intel.com/api/v2/helperservice/getimage?url=http://images.icecat.biz/img/gallery/23221218_49.jpg&height=550&width=550
www.intel.com

レジスタとは、CPUが計算する時に使う記憶装置です。

CPUに入っている記憶装置のことです。計算に使うデータや計算結果、次にやることの情報などCPUのためになることを覚えています。
CPUのために速攻でデータを授受してくれまが、あんまりたくさん覚えることができません。なので、用途に応じて担当を決めています。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/zu03.jpg
itpro.nikkeibp.co.jp

プログラムカウンタは、次にやることが書いてあるメモリの場所を記憶するレジスタです。

略してPCです。プログラムレジスタ(PR)とか命令ポインタ(IP)とも言うらしいです。

CPU内にあるアドレス(番地)を収める場所で、そのCPUが次に実行する命令が置かれている番地が書かれています。ある番地の命令を実行した後、次はどこの番地にある命令を実行したらよいのか、その答えを示しているのがプログラムカウンタです。
https://www.renesas.com/ja-jp/media/support/technical-resources/engineer-school/mcu-programming-peripherals-06/img_01.jpg
www.renesas.com

スタックポインタは、次に使えるメモリにあるスタックの番地を記憶するレジスタです。

OSがプログラムをロードすると,メモリ上に「スタック」と呼ばれるデータ領域が割り当てられる。アセンブラでは,主に汎用レジスタの値を一時的に退避する目的でスタックが使われる。スタックの最上段のアドレスを保持するのがSPだ
http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/zu05.jpg
itpro.nikkeibp.co.jp

そもそもスタックとは、メモリ上にある一時的な置き場です。

コンピュータで用いられる基本的なデータ構造の1つで、データを後入れ先出し(LIFO: Last In First Out; FILO: First In Last Out)の構造で保持するものである。
https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Stack-sv.png/200px-Stack-sv.png
スタック - Wikipedia

割り込み要求が発生した場合、割り込みが発生する直前まで実行していたプログラムのフラグやPCの値を一時的に退避する場所
CPUの全体構成:スタックとスタックポインタ | 東芝 半導体&ストレージ製品

メモリ上の領域の一つであり注3,プログラム実行時の作業領域として使用します.スタック領域は,コード領域やデータ領域,ヒープ領域と同じように,メモリ上に領域を排他的に(ほかの領域とは重なり合わないように)確保しています.
http://www.kumikomi.net/archives/2008/07/15stack/zu04_01.gif
www.kumikomi.net

命令レジスタは、実行中の処理を記憶するレジスタです。

インストラクションレジスタ(IR)とも言うらしいです。
プログラムカウンタから次にやることが書いてあるメモリの場所を取得して、やることをメモリから読み出して記憶します。

主記憶から読み出された命令が格納される。この内容が命令デコーダ(命令解読器)で解読される。
http://ofmlsty.zashiki.com/magenju/terakoya/2syu_p/img/CPU_kihon.GIF
コンピュータの動作原理|コンピュータの仕組み|第二種 午前 まるごと要点|寺子屋|魔幻樹

取り出した命令を一時的に記憶しておくレジスタ。IRなどとも呼ばれる。
http://userdisk.webry.biglobe.ne.jp/013/235/62/N000/000/000/ALU.JPG
s.webry.info

メモリからやることを読み出すことをフェッチと言います。
メモリからフェッチしたやることを解析することをデコードと言います。

ステータスレジスタは、計算処理中に桁あふれを起こしたとか計算結果が0になったとか処理の状態を記憶するスレジスタです。

フラグレジスタとも言うらしいです。
決まったビット数の塊で、割込みOKだよとかエラーになったよとか計算結果がこうなったよとかをビットの値を変更することで記憶します。

演算,比較,およびデータの読み書きを行った結果が,自動的に設定される。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/zu06.jpg
itpro.nikkeibp.co.jp

CPUが演算命令を実行すると,指定されたデータ(汎用レジスタやメモリに置かれる場合が多い)をALUに送って演算を行い,結果を指定された記憶場所(汎用レジスタやメモリ)に保存します.このとき,演算結果が持つ特徴を,フラグ・レジスタ(またはステータス・レジスタ)と呼ばれる特別なレジスタに書き込みます
http://www.kumikomi.net/archives/2009/11/ep57hwsw/ep57hwsw_f05b.jpg
www.kumikomi.net

データベース管理システムにおけるロールバックとロールフォワード

ロールバックとロールフォワードの概要

勉強のきっかけになった過去問

DBMSをシステム障害発生後に再立上げするとき,前進復帰(ロールフォワード)すべきトランザクションと後退復帰(ロールバック)すべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。
http://www.ap-siken.com/kakomon/20_haru/img/67.gif

http://www.ap-siken.com/kakomon/20_haru/img/67a.gif
平成20年春期問67 DBMSの障害回復|応用情報技術者試験.com

知っ得用語

DBMSとは、データベース管理システムの略称です。

データベースを管理し、外部のソフトウェアからの要求に応えてデータベースの操作を行う専門のソフトウェア。
e-words.jp

チェックポイントとは、データファイルにバックアップした時のことです。

DBMSは,COMMIT時にはいったんログファイルに操作ログだけ残しておいて,データファイルへの変更反映は後でゆっくりやっているのです(このデータファイルへの反映処理をチェックポイントと呼びます)
http://image.gihyo.co.jp/assets/images/dev/serial/01/db-academy/0002/thumb/TH400_002.png

gihyo.jp

ログファイルについてはWALプロトコルに従ってディスクへ即時書出しされますが、メモリバッファの内容については入出力効率向上のために、一定の間隔ごとにまとめてディスクに反映する方式をとっています。このディスクと同期を取るタイミング「チェックポイント」といいます。
平成25年春期問16 チェックポイントで行っている処理|データベーススペシャリスト.com

ロールバックとは、障害発生時に正常だった状態まで戻すことです。

  • 対象になる障害 : 論理的障害トランザクション障害、コミット前に「やべっ間違った」っと気が付いた時
  • やり方
    1. ジャーナルファイルを使って処理をなかったコトにします。
    2. 処理前の状態に戻ります。
  • 英語 : roll back
  • 日本語 : 後退復帰

トランザクション処理の途中で障害が発生したときは、ジャーナルファイルを用いてトランザクション処理開始時点の状態に戻してデータの整合性を保つ処理
http://www.it-license.com/Database/Images/RollBack.gif
www.it-license.com

障害発生時に処理途上でコミットされていないトランザクションの処理をすべて取り消し、最初の時点に戻すことを意味する。
e-words.jp

知っ得用語

ジャーナルファイルとは、やった処理を記録したファイルです。
  • ログファイルって言われたりします。

トランザクション処理によって一体として処理されるべき更新情報をジャーナルに記録する。更新中に障害などで中断した場合には、ジャーナルの記録を元にすべての処理を取り消して元に戻したり、中途の処理を完了させて更新を確定したりする。
e-words.jp

ロールフォワードとは、障害発生時にバックアップする前の状態まで戻して処理をやり直すことです。

  • 対象になる障害 : 物理的障害、システム障害、媒体障害
  • やり方
    1. 壊れたものを壊れていないものに交換します。
    2. バックアップデータでチェックポイントまでデータを復元します。
    3. ジャーナルファイルで処理をやり直します。
    4. 壊れる前の状態に戻ります。
  • 英語 : roll forward
  • 日本語 : 前進復帰

バックアップファイルとジャーナルファイルを用いて、ハードディスクの障害発生以前の状態に復元する。
http://www.it-license.com/Database/Images/RollForward.gif
www.it-license.com

データベースの更新中に何らかの障害が発生した場合、データを障害発生の直前の記録までさかのぼり、そこから処理をあらためて開始することである。
www.weblio.jp

「よし、その障害は起きなかったことにしよう!」なデータベースの復元作業のこと。
http://wa3.i-3-i.info/img/data/1100/d001148-18.png
http://wa3.i-3-i.info/img/data/1100/d001148-19.png
http://wa3.i-3-i.info/img/data/1100/d001148-20.png
http://wa3.i-3-i.info/word11148.html

おわりに

このぺーじでは、理解できる説明をかき集めています。
さるでも理解できるようにいろんな説明をしてくれているサイト様に感謝感謝です。

関係データベースは正規形で正規化?

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった過去問

"受注明細"表は,どのレベルまでの正規形の条件を満足しているか。ここで,実線の下線は主キーを表す。
受注明細

受注番号 明細番号 商品コード 商品名 数量
015867 1 TV20006 20型テレビ 20
015867 2 TV24005 24型テレビ 10
015867 3 TV28007 28型テレビ 5
015868 1 TV28007 28型テレビ 8

ア. 第1正規形 イ. (正解)第2正規形 ウ. 第3正規形 エ. 第4正規形
出典 : 応用情報技術者試験 平成29年春期 午前 問27

正規化は、データベースを使いやすく整えることです。

同じ内容が複数のテーブルに分散していると、項目を更新するのが大変になるだけでなくディスク領域が浪費されてしまうので「データの重複」がなくなるように設計します。
各テーブルの関係性を保てるように「従属関係を定義」したりします。
このようにデータベースを作ることで「冗長なデータ」「矛盾する従属関係」を排除し、使いやすくデータを整理してデータベースを作っていくことを「正規化」といいます。
なので、正規化していないと使いにくいデータベースになります。

非正規形は、関係データベースに登録できない残念な状態です。

正規化していなくて、1行に複数データが何度も出てくるような状態を「非正規形」といいます。

例えば以下のようなデータは、1つの受注情報に[明細番号]で始まる明細情報が複数あって「非正規形」となります。

受注番号 受注日 明細番号 商品コード 商品名 数量 明細番号 商品コード 商品名 数量 明細番号 商品コード 商品名 数量
015867 2023-09-01 1 TV20006 20型テレビ 20 2 TV24005 24型テレビ 10 3 TV28007 28型テレビ 5
015868 2023-11-19 1 TV28007 28型テレビ 8

例えば以下のようなデータも、「非正規形」となり1行に複数の明細情報があって関係データベースに入れることもできません。

受注番号 受注日 明細番号 商品コード 商品名 数量
0158672023-09-01 1 TV20006 20型テレビ 20
2 TV24005 24型テレビ 10
3 TV28007 28型テレビ 5
015868 2023-11-19 1 TV28007 28型テレビ 8

正規形は、正規化するやり方の段階です。

正規形は数字が大きいほどいい感じに正規化できてます。

第1正規形は、繰り返す項目をなくした状態です。

「1行に複数データが何度も出てくるような状態」を解消するだけで「第1正規形」になります。

例えば、「1つの受注情報に明細情報が複数」だったのを「明細情報1つ1つに受注情報をくっつける」と「第1正規形」になります。

受注番号 受注日 明細番号 商品コード 商品名 数量
015867 2023-09-01 1 TV20006 20型テレビ 20
015867 2023-09-01 2 TV24005 24型テレビ 10
015867 2023-09-01 3 TV28007 28型テレビ 5
015868 2023-11-19 1 TV28007 28型テレビ 8

なので、「繰返し属性が存在しない」にはなるのですが、「一部しか違わないレコードが半端なくある状態」となります。

第2正規形は、部分関数従属している項目を別テーブルへ切り出した状態です。

レコードを一意にすることができる項目の組み合わせを「候補キー」といいます。
この「候補キー」の1つの項目値が決まると他の項目値も決まる関係のことを「部分関数従属」といいます。
「繰り返す項目をなくした」だけの「第1正規形」から「部分関数従属している項目を別テーブルへ切り出した状態」が「第2正規形」となります。
「第1正規形」の例を見ると、{受注番号, 明細番号}が候補キーになり、[受注日]は[受注番号]に「部分関数従属」している項目です。
ponsuke-tarou.hatenablog.com
「部分関数従属」している[受注日]を別テーブルにして・・・

受注番号 受注日
015867 2023-09-01
015868 2023-11-19

元のテーブルで[受注番号]に外部キーを作って[受注日]を抜き出すことができ、「第2正規形」になります。

受注番号 明細番号 商品コード 商品名 数量
015867 1 TV20006 20型テレビ 20
015867 2 TV24005 24型テレビ 10
015867 3 TV28007 28型テレビ 5
015868 1 TV28007 28型テレビ 8

第3正規形は、推移的関数従属している項目を別テーブルへ切り出した状態です。

推移的関数従属とは、1つの項目値が決まると玉突き的に他の項目値も決まる関係のことです。
「第2正規形」の例を見ると、{受注番号, 明細番号}が決まると1つの明細に1つの商品なので[商品コード]が決まります。
[商品コード]が決まると[商品名]が決まります。
このように玉突き的に値が決まるのが「推移的関数従属」です。
「推移的関数従属」している[商品名]を別テーブルにして・・・

商品コード 商品名
TV20006 20型テレビ
TV24005 24型テレビ
TV28007 28型テレビ

元のテーブルで[商品コード]に外部キーを作って[商品名]を抜き出すことができ、「第3正規形」になります。

受注番号 明細番号 商品コード 数量
015867 1 TV20006 20
015867 2 TV24005 10
015867 3 TV28007 5
015868 1 TV28007 8

他に知っておいたほうがいいことがあります。

やり過ぎると無駄にテーブルが多くなってしまうので、アプリケーションに合わせて正規化しましょう。

第 3 正規形を遵守することが理論上望ましくても、常に実用的とは限りません。<省略>
理論上、正規化は実践する価値があります。 しかし、小さいテーブルを数多く作成するとパフォーマンスが低下したり、開くことのできるファイルおよびメモリの容量を超える場合があります。
データベースの正規化の基礎

完全に正規化されたデータベースへのクエリ(検索質問)はパフォーマンスが良くないことがある。
関係の正規化 - Wikipedia

データ検索・データ更新の頻度やリレーションの階層などと、実際の業務バランスを見て正規化は行いましょう。
場合によっては意図的に正規化を行わず性能を向上させる設計も必要です。
www.fellow-ship.com

もっと正規化した正規形はあるけどあんまり使わないらしいです。

ボイスコッド正規形 (BCNF) とも呼ばれる第 4 正規形、および第 5 正規形が存在しますが、実用的な設計と見なされることはほとんどありません。 これらの規則を無視すると、完全なデータベース設計とはならないことがありますが、機能的には影響しません。
データベースの正規化の基礎

ボイス・コッド正規形
ほとんどの場合第3正規形と等価であり、複数の属性からなる候補キーが複数存在する場合にのみ差異が生じうる。<省略>
第4正規形
候補キーではない属性への多値従属性をもった属性があってはならない。<省略>
第5正規形
その関係が第4正規形であり、さらにその関係に含まれる結合従属性の決定項が候補キーのみである
関係の正規化 - Wikipedia

わからない用語はわからないので調べました。

スカラ値とは、「もう分割できない!」とか「それ以上分解して操作する必要ない!」っていう値です。
  • スカラ値なもの : 数字とか人名とか物の名前とか
  • スカラ値じゃないもの : AKB48とか世界とか
  • 残った疑問 : リテラル値の違いって何?

scalarは「単体」を意味します。<省略>
簡単にイメージできるのは,プログラミング言語におけるchar,int,floatといった単一の値だけを保持するデータ型でしょう。反対に,配列,リスト,レコードなど複合的な値を保持するデータ型は,非スカラ型と呼ばれます。
gihyo.jp

導出項目とは、合計値みたいに既にある項目から計算とかすればわかる項目です。

他のデータ項目から処理や計算により導き出せる項目のことをいいます。
blog.goo.ne.jp

更新時異常とは、更新したら情報がなくなったり矛盾が発生することです。

商品テーブル作ってないもんだから、薬草の値段変えたかったら、薬草の取引に関する部分全部変えなきゃダメとか、新しい商品追加したくても、取引明細テーブルにしか商品情報が書いてないから、登録できないとか、アホみたいなこと
データベースの正規化(正規形)とはなんぞや – gomokulog

第2正規形で起こる更新時異常には次の2種類があります。
(1) 行の修正に伴って修正前に格納されていた情報が無くなってしまう。<省略>
(2) 非キー属性に関数従属している属性の値を修正するときに、該当する行の全てを修正しなければならない。<省略>更新処理を誤るとデータの不整合が生じる。
データベーススペシャリスト平成22年春期問7 更新するときに発生する問題|データベーススペシャリスト.com

おわりに

このぺーじでは、いろんなサイトにある解説で理解しやすいなって思ったところを集めまくって勉強しています。
わかりやすい解説をしていただいているサイト様に心から感謝です。

信頼性設計のお話

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった過去問

システムの信頼性設計に関する記述のうち,適切なものはどれか。

  1. フェールセーフとは,ユーザの誤操作によってシステムがダウンしてしまうことのないように,単純なミスを発生させないようにする設計方法である。
  2. フェールソフトとは,故障が発生した場合でも機能を縮退させることなく稼動を継続する概念である。
  3. フォールトアボイダンスとは,システム構成要素の個々の品質を高めて故障が発生しないようにする概念である。
  4. フォールトトレランスとは,故障が生じてもシステムに重大な影響が出ないように,あらかじめ定められた安全状態にシステムを固定し,全体として安全が維持されるような設計手法である。

平成20年秋期問35 システム信頼性設計|応用情報技術者試験.com

最期までしっかり働けるようにリスクを予め考慮するのが信頼性設計

システム・装置または部品が使用開始から寿命を迎えるまでの期間を通して、予め期待した機能を果たせるように、すなわち故障や性能の劣化が発生しないように考慮して設計する手法のこと。
信頼性設計 - Wikipedia

システムの設計ではなく機械や建築物など広い世界で行われる設計です。
人間にも使えるみたいです!
liginc.co.jp

f:id:ponsuke_tarou:20220315202419j:plain
2021-08-08 豊島区の妙法湯

信頼設計の種類

被害を最小限に抑えるフェールセーフ

fail(故障) + safe(安全) = フェールセーフ

こんな感じ

誤操作・誤動作による障害が発生した場合、常に安全側に制御する
フェイルセーフ - Wikipedia

転倒すると自動的に消火するよう設計されている石油ストーブ
フェイルセーフ(fail safe)とは - IT用語辞典 e-Words

必ず事故や誤りは起きる、という前提からの設計思想
フェールセーフ

踏切遮断機が故障した場合
⇒重力により自らしゃ断かんが降りてくる(自重降下)機構により踏切通行者の安全を確保します。
http://www.signal.co.jp/products/railway/basic-knowledge/faq/2010/03/post-2.php

交通管制システムが故障したときには,信号機に赤色が点灯するようにする。
平成31年春期問47 フェールセーフの設計|応用情報技術者試験.com

故障した機能に無理をさせず全体の停止を防ぐフォールバック

fall(落ちる) + back(戻る) = 縮退運転

こんな感じ

何らかの問題が発生した際に「止まるよりは、しょぼい方がマシでしょ?」な考えに基づいて、機能や性能を制限して動かし続けること
http://wa3.i-3-i.info/word14810.html

機能停止を部分的なものに留めることで、稼動完全にシステムが使えなくなることを防ぐことができる。
フォールバックの意味や定義 Weblio辞書

何らかの要因でIPv6による通信ができない場合に、 それを諦めてIPv4での通信に切り替える動作、もしくはその逆の、 IPv4での通信からIPv6での通信に切り替える動作
インターネット用語1分解説~IPv6/IPv4フォールバックとは~ - JPNIC

性能を落としたり機能を制限したりして限定的ながら稼動を続行すること。あるいは、利用したい機能が条件が悪く使えない場合に、代替となる機能に切り替えること。
フォールバック(縮退運転)とは - IT用語辞典 e-Words

故障が起きないようにするフォールトアボイダンス

fault(障害) + avoidance(回避) = 障害回避

こんな感じ

なるべく故障や障害が生じないようにする
フォールトアボイダンス(fault avoidance)とは - IT用語辞典 e-Words

問題を起こさない前提で「どうすればヤバいことにならないかな?」を考えて備えること
http://wa3.i-3-i.info/word14814.html

高信頼素子の採用や高信頼化設計, 徹底的なテスト・検証, 品質管理体制の整備など
フォールトアボイダンスとは何? Weblio辞書

故障が発生したときに対処するのではなく,品質管理などを通じてシステム構成要素を信頼性を高めること
平成25年春期問15 システムの信頼性向上技術|応用情報技術者試験.com

故障しても止まらないようにするフォールトトレラント

fault(障害) + tolerant(耐える) = 障害耐性

こんな感じ

ハードディスクにRAID1*1を採用して,MTBF*2で示される信頼性が向上するようにする。
平成31年春期問47 フェールセーフの設計|応用情報技術者試験.com

構成要素の一部が故障、停止などしても予備の系統に切り替えるなどして機能を保ち、正常に稼動させ続ける
フォールトトレランス(フォールトトレラント)とは - IT用語辞典 e-Words

片方のCPUエンクロージャ内に障害が発生しても、障害は自動で検出され、システムから切り離されます。残りのCPUが正常稼動を続けているので、OSやアプリケーションには影響を与えず、システムは稼動しつづけます。
https://www.stratus.co.jp/products/ftserver/f_quality/fault_tolerant.html

「問題が起こってもお手上げにならないように、あれやこれやと備えておくぜ!」な心意気
http://wa3.i-3-i.info/word14813.html

どこか一部分が故障しても、全体を停止させずに障害から回復できるように設計する
http://www-higashi.ist.osaka-u.ac.jp/~nakata/mobile-cp/chap-07j.pdf

大きな問題がないようにするフェールソフト

fail(故障) + soft(穏やか) = フェールソフト

こんな感じ

システム全体を停止させずに性能・機能を落として稼働を継続(縮退運転)するような仕組みや考え方
フェイルソフト(fail soft)とは - IT用語辞典 e-Words

「多少しょぼくなっても、止まるよりはマシだよね?」な考えに基づいて、機能や性能を制限して動かし続ける
http://wa3.i-3-i.info/word14811.html

故障が発生しても、全面停止とせず、必要最小限の機能を維持する。
http://mt-net.vis.ne.jp/ADFE_mail/0301.htm

ハードウェアの障害時に,パフォーマンスは低下するが,構成を縮小して運転を続けられるようにする。
平成25年春期問24 フェールソフトの例はどれか|情報処理安全確保支援士.com

ネットワークカードのコントローラを二重化しておき,片方のコントローラが故障しても運用できるようにする。
平成31年春期問47 フェールセーフの設計|応用情報技術者試験.com

うっかり者が使っても問題がおこらないようにするフールプルーフ

fool(愚か者) + proof(耐える) = フールプルーフ

こんな感じ

乾電池のプラスとマイナスを逆にすると,乾電池が装填できないようにする。
平成31年春期問47 フェールセーフの設計|応用情報技術者試験.com

操作に不慣れな人も利用するシステムでは,間違ったデータが入力されることが想定される。誤入力が発生しても,プログラムやシステムを異常終了させずに,エラーメッセージを表示して次の操作を促す
平成23年特別問22 フールプルーフ|情報処理安全確保支援士.com

フタを閉めないかぎりドラムが回転しない洗濯機
http://www.hamabiz.jp/content/view/1708/36/

自動車のオートマチック車の場合,ブレーキを踏まないとシフトレバーをパーキング(P)の位置から動かすことができないようになっている
http://pub.maruzen.co.jp/index/kokai/oyoshinri/570.pdf

使用者が誤った操作をしても危険な状況を招かないように、あるいはそもそも誤った操作をさせないようにと、配慮して設計
フールプルーフとは (fool proof): - IT用語辞典バイナリ

誤った操作や危険な使い方ができないような構造や仕掛け
フールプルーフ(foolproof)とは - IT用語辞典 e-Words

電子メールでの返信が必要とされる受付システムの入力画面で、 メールアドレスの入力フィールドを二つ設けて、同一かどうかをチェック機能や、 アプリケーションを間違って終了してもデータを失わないように、 アプリケーション側の機能で編集中のデータのコピーを常に記憶媒体に保存する
http://hidekit.hatenablog.com/entry/2015/04/30/210000


f:id:ponsuke_tarou:20220315202717j:plain
2021-08-21 足立区の江北湯

違いがわかりにくいのでもう一度

フェールセーフは「事故が起こった時を想定」して、フールプルーフは「事故を起こさない」ようにする

フェールセーフは必ず起きる誤作動・故障を考えて設計する手法ですが、「フールプルーフ」は事前に誤作動・故障を防ぐために配慮した設計思想です。
Loading...

フェールセーフは「ものは壊れる」「発生頻度を下げる」に対応する代表的な安全設計手法です。「人は間違える」「発生頻度を下げる」に対応する安全設計手法の代表はフールプルーフです。
フェールセーフとは:安全設計手法(その1) - ものづくりドットコム

フェールセーフは「安全第一」、フェールソフトは「継続第一」

排熱ファンが故障してしまったとき、フェールソフトの考え方であれば、あらかじめ部品を冗長的に構成しておき、故障部分を切り離して運用を続行できることを第一に考えます。フェールセーフであれば、熱による他の部品への影響や、火災発生といった事態を防ぐようシステムを停止するなど、安全性を第一に考えます。
http://mt-net.vis.ne.jp/ADFE_mail/0301.htm

飛行機の場合、フェイルセーフのように完全に機能を停止すると墜落するため、フェイルソフトの概念により、故障したエンジンを切り捨て(燃料等の供給を行わないようにする)、故障していないエンジンだけで飛行できるような設計をとる必要がある。
フェイルソフト - Wikipedia

フェールソフトの考え方にそってフォールバックをする

フェイルソフトの思想に従って、縮退運転(フォールバック)を行う
http://wa3.i-3-i.info/word14811.html

フェールソフトは概念や技術を意味し、フォールバックは縮退運転と説明されるように、行為を指します。
http://sm.seeeko.com/archives/64955488.html

フェールソフトの考え方にそってフォールトトレラントする

フォールトトレランスは,フェールソフトな動作を 達成するための一つの手段である。
JISX0014:1999 情報処理用語―信頼性,保守性及び可用性

フェールセーフは「安全が目標」、フォールトトレラントは「信頼向上が目標」

機械が故障しても、とにかく安全だけは確保しようとするのがフェールセーフで,出来るだけ機械の正しい機能を維持することで安全を確保しようとするのが,フォールトトレランスです.フェールセーフが直接,安全性を目標にしているのに対して,フォールトトレランスは,信頼性の向上を目標にしています.
http://www.mukaidono.jp/100303fault.pdf

f:id:ponsuke_tarou:20190823235418j:plain
黒姫山

次回の勉強内容

ponsuke-tarou.hatenablog.com

Windows10においてTortoiseSVNを使ってBacklogのSubversionを使う方法

  • 環境
    • OS : Windows10 64bit
    • インストールするもの : TortoiseSVN
    • 使うSVN : BacklogのSVN

Subversionの概要

バージョン管理システムというものがあります。
e-words.jp

バージョン管理システムの1つがSubversionです。
e-words.jp

今回は、SubversionリポジトリWindowsマシンにCheckoutして使います。
e-words.jp

Checkoutとは・・・
リポジトリから作業コピーを取得する作業
作業コピーのチェックアウト

TortoiseSVNをインストールする

TortoiseSVNは、Windows用のSubversionクライアントツールです。

  1. サイトのページを表示します。ja.osdn.net
  2. 環境にあったものをダウンロードします。f:id:ponsuke_tarou:20170809224359p:plain
  3. ダウンロードしたファイルをダブルクリックしてインストールを開始します。
  4. [Next]ボタンを押下して進めます。f:id:ponsuke_tarou:20170809225031j:plainf:id:ponsuke_tarou:20170809225036j:plain
  5. [Brows]ボタンを押下するとインストール先を指定できます。f:id:ponsuke_tarou:20170809225040j:plainf:id:ponsuke_tarou:20170809225045j:plain
  6. [Next]ボタンを押下して進めます。f:id:ponsuke_tarou:20170809225049j:plainf:id:ponsuke_tarou:20170809225053j:plainf:id:ponsuke_tarou:20170809225057j:plainf:id:ponsuke_tarou:20170809225100j:plain

ポイント
インストールしたTortoiseSVNはクリックしたりスタートメニューから選択してアプリを起動しません。インストールされるとマウスで右クリックして出てくるメニューにTortoiseSVNの項目が追加されます。その項目からアプリを起動していきます。

BacklogのSubversionリポジトリをCheckoutする

  1. リポジトリをダウンロードしたいフォルダをエクスプローラーで表示します。
  2. 右クリックするとメニューに表示される[SVN Checkout...]を選択します。f:id:ponsuke_tarou:20170809235506j:plain
  3. ダイアログが開きます。f:id:ponsuke_tarou:20170809235608j:plain
  4. [URL of repository]にBacklogからコピーしたSubversionリポジトリのURLを貼り付けます。f:id:ponsuke_tarou:20170809234914p:plain
  5. [OK]ボタンを押下します。
  6. IDとパスワードの入力を求められた場合は、Backlogへのログインと同じものを入力します。
  7. リポジトリに格納されているものの大きさにもよりますが、checkoutが終わるまでそれなりに待ちます。f:id:ponsuke_tarou:20170810001534j:plain

作業コピーのファイルを見る

  1. 他の人が更新していることがあるので必ず[http://ponsuke-tarou.hatenablog.com/entry/2017/08/12/120539#Update:title=[Update]します。]
  2. Subversion以外のファイル同様に見ることができます。

作業コピーのファイルを更新する

  1. [http://ponsuke-tarou.hatenablog.com/entry/2017/08/12/120539#Update:title=[Update]します。]
  2. ファイルの内容を更新します。
  3. [http://ponsuke-tarou.hatenablog.com/entry/2017/08/12/120539#Commit:title=[Commit]します。]

Subversionの基本操作

Update

Updateとは・・・
サーバーから作業コピーに変更を取り込む作業
他人の変更に伴う作業コピーの更新

  1. Checkout中のフォルダを選択して右クリックします。
  2. [SVN Update]を選択します。f:id:ponsuke_tarou:20170812104637j:plain
  3. https://tortoisesvn.net/docs/release/TortoiseSVN_ja/images/UpdateFinished.png

Commit

Commitとは・・・
サーバへ作業コピーの変更を送信すること
変更のリポジトリへのコミット

  1. 対象のフォルダを選択して右クリックします。
  2. [TortoiseSVN] > [Commit]を選択します。
  3. コミットダイアログが表示されます。http://tgk.zkzk.org/image/svn/tsvn_4-8.png
  4. コメントを記載します。
    • 1行目:BacklogチケットのID・タイトル (必須)
    • 2行目:空行
    • 3行目:作業もしくは変更内容の要約
    • 4行目以降:要約に対する補足説明 (任意)
  5. [OK]ボタンを押下します。
  6. https://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/images/CommitProgress.png

Crean up

Crean upとは・・・
Subversion コマンドが正常に終了しなかったなどで起こる作業コピーの矛盾状態を解決する。
クリーンアップ

  1. 対象のフォルダを選択して右クリックします。
  2. [TortoiseSVN] > [Clean up...]を選択します。
  3. https://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/images/Cleanup.png
  4. [OK]ボタンを押下します。
  5. f:id:ponsuke_tarou:20170812103855j:plain

エラーになったら

TortoiseSVN\bin\SendRpt.exe not found.

f:id:ponsuke_tarou:20170812101207j:plain

  • 対応 : パソコンを再起動します。

stackoverflow.com

Additional errors:

f:id:ponsuke_tarou:20170810001914j:plain

  • 対応 : [Clean up]後に[Update]します。

REPORT request on {URL} failed

f:id:ponsuke_tarou:20170812101022j:plain

  • 対応 : [Clean up]後に[Update]します。

その他

d.hatena.ne.jp

MacのVirtualBoxに作ったゲストOSにRSA鍵の認証で接続できるように設定する

MacVirtualBoxに作ったCentOSを少し便利にできたので、いよいよ鍵認証のログイン許可を設定します。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境

今回使うのは、公開鍵暗号方式です。

www.atmarkit.co.jp

設定ファイルを使って設定します。

sshd_configのバックアップを取ります。

設定に失敗したり元の設定に戻したくなった時のためにバックアップを取ります。

# rootとしてログインします。
$ ssh root@192.168.0.6
root@192.168.0.6s password: 
Last login: Fri Oct 20 15:35:12 2017 from 192.168.56.1

# sshd_configの存在を確認します。対象の設定ファイルは、ssh_configではなくsshd_configです。
$ ls -la /etc/ssh/*config*
-rw-r--r--. 1 root root 2276 1020 06:52 /etc/ssh/ssh_config
-rw-------. 1 root root 4358 1018 23:50 /etc/ssh/sshd_config
-rw-------. 1 root root 3907 1020 06:52 /etc/ssh/sshd_config.rpmnew

# ファイルをコピーしてバックアップを取ります。
$ cp /etc/ssh/ssh_config /etc/ssh/ssh_config.20170731bak

# ファイルを確認します。
$ ls -la /etc/ssh/*config*
-rw-r--r--. 1 root root 2276 1020 06:52 /etc/ssh/ssh_config
-rw-------. 1 root root 4358 1018 23:50 /etc/ssh/sshd_config
-rw-------. 1 root root 4361  81 00:12 /etc/ssh/sshd_config.20170731bak
-rw-------. 1 root root 3907 1020 06:52 /etc/ssh/sshd_config.rpmnew

sshd_configを編集します。

# viエディタで開きます。
$ vi /etc/ssh/ssh_config
#       $OpenBSD: sshd_config,v 1.93 2014/01/10 05:59:19 djm Exp $
<省略>
# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

RSAAuthentication yes #<------------------------ コメントアウトを外します(RAS認証を許可する)。
PubkeyAuthentication yes #<------------------------ コメントアウトを外します(公開鍵認証を許可する)。

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys #<------------------------ コメントアウトを外します(公開鍵登録ファイルのパスと名前)。

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no #<------------------------ コメントアウトを外します(RHosts認証を許可しない)。
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes
<省略>
# 保存して閉じます。
:wq

# sshdサービスを再起動します。
$ systemctl restart sshd

MacのVirtualBoxに作った仮想マシンを少し便利にする

MacVirtualBoxに作った仮想マシンVirtualBox Guest Additionsをインストールしたので便利に使えるように設定します。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境
    • VirtualBox : Version 5.1.22 r115126 (Qt5.6.2)
    • ホストOS : macOS Sierra Virsion 10.12.5
      • 操作は基本的にホストOSからTerminalでSSH接続して行いました。
    • ゲストOS : CentOS Linux 7.3.1611(Core)
    • VirtualBox Guest Additions : 5.1.22 r115126

ローケルとキーボードを設定する

日本語のキーボードになるようにします。

http://e-words.jp/w/%E3%83%AD%E3%82%B1%E3%83%BC%E3%83%AB.htmle-words.jp

  1. ローケルを日本語に設定します。
  2. キーボードを日本語のキーマップ「jp106」に設定します。
# 最初の状態を確認する
$ localectl status
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp
      X11 Layout: jp

# ローケルを日本語に設定する
$ sudo localectl set-locale LANG=ja_JP.utf8

# ローケルの設定ファイルを確認する
$ cat /etc/locale.conf 
LANG=ja_JP.utf8

# 利用可能な日本語のキーマップを確認する
$ localectl list-keymaps | grep jp
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106

# キーマップを設定する
$ sudo localectl set-keymap jp106

# キーマップの設定ファイルを確認する
$ cat /etc/vconsole.conf
KEYMAP=jp106
FONT=latarcyrheb-sun16

# 変更後の状態を確認する
$ localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

ホストOSとゲストOSでコピーバッファを共有できるようにする

コピペができたほうが便利なのでコピーバッファを共有します。

  1. Oracle VM VirtualBox Managerで対象のゲストOSを選択し、[General]リンクを押下します。f:id:ponsuke_tarou:20170723223530p:plain
  2. [Advanced]を押下し、[Shared Clipboard :]で「Bidirection」を選択します。f:id:ponsuke_tarou:20170723223610p:plain
  3. [OK]ボタンを押下します。

画面を大きくする

老化のせいか小さいと見づらいので画面を大きくします。

  1. 設定ファイルをviで開きます。
  2. GRUB_CMDLINE_LINUX」を探します。
  3. 設定値にに「vga=***」を追加します。
$ sudo vi /etc/default/grub
▼▼▼▼▼▼▼▼▼▼grubの中身▼▼▼▼▼▼▼▼▼▼
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet vga=771" <------ ここ
GRUB_DISABLE_RECOVERY="true"