Linux」カテゴリーアーカイブ

2022年1月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最新の投稿(電子情報)

アーカイブ

カテゴリー

Linux演習

Linux演習資料

理解度確認

教員室にhomebridge導入

自宅では、iPhoneとの連動で、Raspberry-Pi にhomebridgeを入れて、家電制御で便利に使っているけど、教員室の Linux サーバにも導入してみた。

自分のスマホに ping で所在確認するプラグインと、自室の在室や予定を表示している掲示板システムを操作するプラグインを入れてみた。

在室状態に応じて掲示板にメッセージを表示していたけど、更新間隔が1時間おきとかなので、「不在表示なのに居るじゃん…」とか学生からのチェックが入るので、ドアや充電器の所に置いてあるNFCをタッチすると、掲示板の在室/不在表示+予定表示するようにしてみた。

# 以前から同様なことはしていたけど、手抜き Web API 経由だったのを、ホームアクセサリとして動かしてみた。

在室確認をBluetoothに変更

自分の教員室前には、在室状況や授業や会議で不在なのが分かるように、LEDの表示器を設置してある。

でも、在室しているかを、スマホへの ping で実装していたけど、実験室の WiFi をメッシュ機能対応のものに変えた影響か、別部屋の WiFi を掴んだまま。そのため、不在表示になっているようで「不在と表示されてますが?」と学生が来ることが増えた。

仕方がないので、安い Bluetooth LE に対応したドングルを自室サーバに追加し、Bluetooth で確認する方法に変更。

$ /usr/bin/sudo /usr/bin/l2ping -c 1 11:22:33:44:55:66

「サイバー攻撃の手口と守り方」の準備

2/6(土)に「サイバー攻撃の手口と守り方~情報セキュリティ入門~」にて、CTFを中高生に体験してもらう準備のお手伝い中。

コマンドラインをたたいてもらう体験の部分は、クラウド上に準備した noVNC を使い、ブラウザさえあれば参加可能。問題は、以前 K-SEC 主催の CTF 問題から「いんすぱいぁ(≠ぱくった)」されて作った問題を少々。

Linux演習 – ファイル操作

Linux演習サーバへの接続

Unix(Linux)は、インターネットでのサーバとして広く活用されている。Linuxを試すには、Windows ならば WSL や Cygwin であったり、Mac でも使える仮想OSの VMware, VirrtualBox を使うこともでる。今回の演習では、全員が同じ環境で使うために、クラウド環境にサーバを準備した。クラウドのunixサーバを利用する場合には、リモートログインのための ssh が一般的である。

一方、教室のWiFi環境では、HTTP,HTTPS の通信しか使えないことから、ssh が通常利用できない。そこで、この演習では、特殊な使い方だが、HTTPS(443) ポートを使う。

Windows 10 ならば、cmd.exe , macOS ならば、ターミナルソフトを起動し、以下の操作を行う。

$ ssh -p 443 ゲストID@演習サーバ

ファイル操作の基本

まずは基本操作をしてみよう。ls コマンド(list) は、ディレクトリ内にあるファイルの一覧を表示する。cat コマンド(catalog)は、指定されたファイルの内容を表示する。

s53599xx@nitfcei:~$ ls
helloworld.c  Maildir  public_data  public_html

s53599xx@nitfcei:~$ ls -l
total 8
-rw-r--r-- 1 s53599xx students   76 Dec 21 14:30 helloworld.c
drwx------ 5 s53599xx students 4096 Dec 21 14:30 Maildir
(略)

s53599xx@nitfcei:~$ cat helloworld.c
#include <stdio.h>

int main() {
    printf( "Hello World\n" ) ;
    return 0 ;
}
s53599xx@nitfcei:~$

ファイルをコピーするには cp コマンド(copy)、不要なファイルを消すには rm コマンド(remove)を使う。

s53599xx@nitfcei:~$ cp helloworld.c test.c
s53599xx@nitfcei:~$ ls -l
total 8
-rw-r--r-- 1 s53599xx students   76 Dec 21 14:30 helloworld.c
drwx------ 5 s53599xx students 4096 Dec 21 14:30 Maildir
-rw-r--r-- 1 s53599xx students   76 Dec 21 14:40 test.c
(略)
s53599xx@nitfcei:~$ rm test.c
s53599xx@nitfcei:~$ ls -l
total 8
-rw-r--r-- 1 s53599xx students   76 Dec 21 14:30 helloworld.c
drwx------ 5 s53599xx students 4096 Dec 21 14:30 Maildir
s53599xx@nitfcei:~$

ファイル詳細表示の説明

ls -l で表示される詳細の内容は以下の通り。

属性 リンク数 所有者 グループ サイズ 日付 ファイル名
rw- r– r– 1 s53599xx students 76 Dec 21 14:30 helloworld.c
d rwx 5 s53599xx students 4096 Dec 21 14:30 Maildir
d -: 通常ファイル, d:ディレクトリ
rw- rwx 所有者が r:読み出し, w:書き込み, -: 権限なし
ファイルなら、x:実行可能
ディレクトリなら、x:ディレクトリに入れる
r – – – – – グループの rwx の属性 r– は 読み込みだけ許可
r – – – – – その他の rwx の属性  — は、読み書き禁止

基本的なファイル操作コマンド一覧

操作 Linux Windows
ディレクトリ一覧(list)
ディレクトリ詳細
ls 場所  ※
ls -l 場所
dir /w 場所  ※
dir 場所
※ 省略時はカレントディレクトリ
ファイル表示(catalog) cat 場所 type 場所
ファイルコピー(copy) cp コピー元 コピー先
cp コピー元 コピー先ディレクトリ
copy コピー元 コピー先
ファイル削除(remove) rm 場所 del 場所
ディレクトリ作成(make dir) mkdir 場所 md 場所
ディレクトリ削除(remove dir) rmdir 場所 rmdir 場所
カレントディレクトリ移動
(change directory)
cd 場所 cd 場所
ドライブの場合は
ドライブ名:
所有者を変更(change owner) chown 所有者 場所
グループを変更(change group) chgrp グループ 場所
属性を変更(change mode) chmod 属性 場所 ←属性の書き方

ワイルドカード文字

ls などのコマンドで、複数のファイルを対象とするとき、ワイルドカード文字が使える。

任意の1文字
?
(例)
$ ls          # 全部のファイル
aaa.c  ab.c    abc.c   bcd.c   defgh.c  hij.cxx
$ ls a?.c   # aで始まる2文字のC言語ファイル
ab.c
$ ls ???.c  # 3文字のC言語のファイル
aaa.c   abc.c   bcd.c
任意の文字
*
(例)
$ ls a*.c   # aで始まるC言語ファイル
aaa.c ab.c abc.c
$ ls *.cxx  # 拡張子が.cxxのファイル(C++)
hij.cxx

相対PATHと絶対PATH

ファイルの場所を指定するには、2つの方法がある。

絶対PATHは、木構造の根(ルートディレクトリ / で表す) からの経路のディレクトリ名を”/”で区切って書き連ねる。ルートディレクトリからの場所であることを示すために、先頭を / で始める。住所を /福井県/越前市/宮谷町/斉藤家 と書くようなもの。

相対PATHは、現在注目しているディレクトリ(カレントディレクトリと呼ぶ)からの経路を書く。住所でいうと、/福井県/越前市 に注目している状態で、宮谷町/斉藤家 と書くようなもの。

ただし、/福井県/福井市 に注目している状態で、片町/山本家 は1つのファイルでも、/福井県/福井市/片町/山本家 とは別に /石川県/金沢市/片町/山本家 があるかもしれない。

上記の絵であれば、/home/tsaitoh/helloworld.c を、相対PATHで書く場合、s53599xx の一つ上にさかのぼって場所を指定することもできる。一つ上のディレクトリ(親ディレクトリ).. (ピリオド2つ)

この場合、” $ cat ../tsaitoh/helloworld.c ” の様な相対PATHでもアクセスできる。

カレントディレクトリ自身を表す場合は、. (ピリオド1つ)を使う。

/home/s53599xx/helloworld.c の場所は、” $ cat ./helloworld.c ” と書くこともできる。

CTF風に演習

ここで、ディレクトリの場所の書き方が理解できたかを練習してみよう。

/home0/Challenge/1-CTF.d の下にフォルダがいくつかあり、その中にさらにファイルがある。このファイルの中には、FLAG{なんとか} と書いた部分がある。この「なんとか」の部分を速く見つけ出して答えよう。

上記フォルダには、5つの問題 Task1 , Task2 , Task3 , Task4 , Task5 がある。

Task2 , Task3 では、以下のコマンドを使う。(ヒントはTaskフォルダの0ReadMeを読め)

操作 Linux
ページャで表示(空白で次のページ,qで停止) more ファイルの場所
元に戻れるページャ(less) less ファイルの場所
多機能ページャ(文字コード判別) lv ファイルの場所
漢字コード変換 nkf ファイルの場所
nkf -j ファイル JISコードで表示
nkf -s ファイル Shift-JISコードで表示(Windows)
nkf -e ファイル EUCコードで表示
nkf -w ファイル UTF-8 で表示(Mac,Linux)

Task4 , Task5 には、難易度をあげるためのトリックがしかけてある。(ヒント 0ReadMe)

授業内レポート

  1. 自分でみつけられたフラグを以下の様に答えよ。(できた所までで良い)
    Task1 = FLAG{なんとか}
    Task2 = …
  2. Task1 で答えを見つけるまでに実行したコマンドとその途中結果を簡単にまとめよ。
    できれば、実行したコマンドを、相対PATH形式、絶対PATH形式で答えよ。
    $ cd /home0/Challenge/1-CTF.d/Task1
    $ ls
    0ReadMe  brain  concussion  persons

history コマンドは、過去に実行したコマンドを表示してくれる。

Error Establishing a Database Connection

びびった。

この WordPress で、特に何もしていないのに、「データベース接続の確立エラー」(Error Establishing a Database Connection)
が表示された。コレが出ると、データベースファイルが壊れたとかの場合が多くて、復旧に手間取る可能性が高い。

今回は、サーバに login して、MySQL の Restart だけで復帰した。

払い下げPCへのddを使ったディスクイメージコピー

総合情報処理センターのパソコンの入れ替えにより、払い下げとなったパソコンのセットアップ中。

1台をWindows10などの環境を整えて、あとは、USBブートのUbuntuを使って、HDDを全コピー。

最初、SATA のケーブルを、コピー元=SATA0 と、コピー先=SATA1 につないでコピーをしたら、同一バスを使うからかな!?やたらと時間がかかり、1台あたり 290分かかった。

$ time sudo dd if=/dev/sda of=/dev/sdb
289min...

2度目からは、コピー元=SATA0で、コピー先=SATA1を、コピー先=SATA3に変更して、ついでにコピー単位を256kB に変更して行う。

$ time sudo dd if=/dev/sda of=/dev/sdb bs=256k
78min...

バッファーサイズが効果的だったのか、SATA3 にしたのが良かったのか…はよく判らないけど、コピー時間を1/3に短縮できた。

でも、残りあと10台以上セットアップは続く。卒業式が始まる前に、1ローテーション回してから、式に向かう。まだまだあるし、もう1つUbuntuのUSBを準備し、2台並行作業を開始。

ネットワークセキュリティのためのTips

usacloud

さくらのクラウド上のサーバを、実験・演習用に使っているけど、未使用時に起動していると課金も増えるので、極力電源を落としたい。調べると、さくらのクラウドであれば usacloud という CLI により操作ができるみたい。

同じネタを「機構管理の Azure のサーバでも極力電源を落とせ」と言われているけど、利用者のいるWebサーバなので困難。

APIキーの取得

usacloud の説明を見ているけど、API キーの取得画面の出し方が変更になっているみたい。さくらのクラウドホームにて、APIキーを発行

usacloud のインストール

usacloud のドキュメントには、

curl -fsSL https://releases.usacloud.jp/usacloud/repos/install.sh | bash

と書かれていたけど、debian の apt の GPG エラーでインストールに失敗したので、usacloud_0.31.1-1_all.deb をダウンロードし、dpkg -i *.deb でインストール。

先の手順で作ったAPIキーを登録

[root]# usacloud config
Setting SakuraCloud API Token => 
	Enter token: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Setting SakuraCloud API Secret => 
	Enter secret: xxx...xxx 
Setting SakuraCloud Zone => 
	Enter zone[is1a/is1b/tk1a/tk1v]: is1b
Setting Default Output Type => 
	Enter default-output-type[table/json/yaml/csv/tsv]: json
Written your settings to /root/.usacloud/default/config.json

サーバの操作コマンド

設定が終われば、サーバの起動や停止もコマンド一発

((( サーバの起動 )))
$ sudo usacloud server boot 名前
$ sudo usacloud server wait-for-boot 名前
((( シャットダウン )))
$ sudo usacloud server shutdown 名前
$ sudo usacloud server wait-for-down 名前
((( サーバ一覧 )))
$ sudo usacloud server list
$ sudo usacloud server list -q
11xxxxxxxxxx
$ sudo usacloud server list --output-type table
+--------------+---------+-----+--------+------------+--------------------+--------+----------------+
|      ID      |  Name   | CPU | Memory | Commitment |     IPAddress      | Status |      Host      |
+--------------+---------+-----+--------+------------+--------------------+--------+----------------+
| 11xxxxxxxxxx | nitfcei | 2   | 2048MB | standard   | xxx.xxx.xxx.xxx/24 | up     | sac-xxxx-xxxxx |
+--------------+---------+-----+--------+------------+--------------------+--------+----------------+
$

VMware PlayerでLinux

授業の中で unix 環境を体験してもらうために、vmware player を使う準備

VMware Workstation Playerのインストール

Ubuntu 18 Desktop 版の起動イメージ

起動した状態のイメージを作っておきたかったが、Freeの環境では無理っぽいな。インストール作業を授業時間内にやるか…