Serial connection (2)

panicでcoreが収集出来た時、鑑識は色々な道具を使って解析するって事を以前書いた。 その時の例だと、道具の名前は、XXXstatってのが多かった。でも、中にはwなんてのも 解析に役立つ仕組みが組み込まれている。よって、XXXstatを洗い出すだけでは、 有用なものを見逃してしまう可能性がある。

オイラーは貧乏性なので、とことん使える道具を洗い出しておきたい。さて、どうする?

使えるコマンドのmanを引くと

     -M core
             Extract values associated with the name list from the specified
             core instead of the running kernel.

     -N system
             Extract the name list from the specified system instead of the
             running kernel.

こういうのが、共通的に表れる。上記は、w(1)の例。だったら、manから一か八(いちかはち) か拾い出せばいいじゃん。(この洒落、分かるかなぁ)早速やってみる。

[ob: ~]$ cd /usr/share/man/man1
[ob: man1]$ fgrep -l -- '-M' * | xargs fgrep -l -- '-N'
gcc.1
 :
vi.1

全くもって見当違いなものが検索された。こういう時は、テディベアに向かって、ぼそぼそと 語りかけると良いらしい。

manで出て来る、-Mが含まれるファイルを洗い出す。この時の検索文字にハイフンが入って いるので、fgrepのオプションと誤解される恐れがある。検索文字の前に、ハイフンを2つ並べて、 オプション解析を打ち切れって指示してる。

念のため、パイプ経由で、該当するファイルをxargに渡し、今度は -Nで再度検索。 論理は合ってるはずだよな。

こういう時は、検索対象のファイルを調べてみる。簡単そうな、w.1 がいいな。

.It Fl M Ar core
Extract values associated with the name list from the specified
.Ar core
instead of the running kernel.
.It Fl N Ar system
Extract the name list from the specified
.Ar system
instead of the running kernel.

なんと、manで見える文字列と、manファイルは、似ても似つかないじゃん。そうか、 w.1ってのは原稿なんだな。manコマンドは、それを整形してるのか。ここまで、 分かれば、後は、

[ob: man1]$ fgrep -l 'Fl M Ar core' * | xargs fgrep -l 'Fl N Ar system'
fstat.1
fuser.1
netstat.1
nfsstat.1
procmap.1
ps.1
w.1
[ob: man1]$ cd ../man8
[ob: man8]$ fgrep -l 'Fl M Ar core' * | xargs fgrep -l 'Fl N Ar system'
crash.8
dmesg.8
iostat.8
kgmon.8
pstat.8
trpt.8
vmstat.8

鑑識に使う道具が列挙されたな。これで、榊マリコ法医研究員も安心だな。(いえ、特段、 科捜研の女なんてドラマは見てませんけど)

ああ、こんな面倒な事しなくても、catmanの下を探れってのは、今回は却下。 (調べたら、そんなの無かったぞ。あれは、FreeBSDだかの奴か?)そして、 manの書式は、mdoc(7)だから、良く見ておくようにってのも無しの方向で。。 上記は、あくまで軽いハックですから。

VMWARE serial connection

前回、qemuとvboxで、シリアル接続をやってみた。残るバーチャルマシンはVMWAREだな。 多分同様な事が出来るはず。勝手知ったるOpenBSDが動いているVMWARE Playerでやってみる。

VMWAREを立ち上げ、編集を選ぶ。左側にHDDとかUSB等のパソコンパーツが出てくる。 お目当てのシリアルは無いので、左下の追加を選ぶと、大事な事だから管理者の 権限必要って言われる。(この場合の管理者って、VMWAREが動いているWindowsの管理者ね)

ウィザードが起動するので、部品棚からシリアルポートを選ぶ。接続方法で名前付きパイプを選ぶ。そして、提案されたパイプ名を前回の神田明神お札に変更。 端末はサーバー、接続先はアプリケーション。起動時に接続を選んで、増設完了。一度選んでしまえば、 仮想PCに組み込まれるので、後からの変更は容易。

シリアルが増設されたらOpenBSDを起動。/etc/ttysでtty00が待ち受け受信というか接続 するように設定。そして、kill -HUP 1 して、initの再読み込み。これで、シリアル から接続出来るようになった。ちょろいもんだな。

PuTTYからの接続確認。

OpenBSD/amd64 (ob.localdomain) (tty00)

login: sakae
Password:
Last login: Tue Nov 29 07:03:56 on ttyp0 from xxx.xxx.xxx.xxx
OpenBSD 6.0 (GENERIC.MP) #0: Wed Oct 19 06:38:40 JST 2016

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

[ob: ~]$ tty
/dev/tty00

うん、大丈夫だな。端末ソフトはPuTTYのほか、MobaXtermも使っているので、 シリアル接続出来るかと思ったら、こちらは名前付きパイプはサポートしていなかった。 ちょっと残念。もしもの為に、teraTermを用意しておくかな。

実際にやってみたら、teratermだけじゃ接続出来なくて、 Named Pipe TCP Proxy Utilityと言う 変換器が必要だった。詳細は、 Serial portをつかってtera termで接続するを参照。非常用品を準備して安心しちゃいけないって教訓だね。

登山に行きます。そのためにテントやバーナーを買いました。それで安心しちゃだめ。 何処かの公園か河原にでも行って、テントを張る練習。バーナーでお湯ぐらいは沸かしてみる 事が必要だろう。生死に関わる事だぞ。

もしもディスプレイが壊れたら(ヒマラヤで) こういう話も有りますから、用意に越したことはない。

ついでなんで、FreeBSDでもシリアル接続出来るようにした。/etc/ttys で、ttyu0を 編集。これで、OK。3wireって、キャリアー検出線を見てるのかな。もしそうなら、 VMWAREが宜しくやってくれているんだろうね。

# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0   "/usr/libexec/getty 3wire"      vt100   on secure
ttyu1   "/usr/libexec/getty 3wire"      vt100   onifconsole secure

そうそう、MobaXtermでも、間に上で使ったnptpを挟むと、ちゃんとシリアル接続出来た。 これで、Windows10に、TeraTermを入れなくてもいいな。

Fedora on VMWARE でもシリアル接続

(注 この項、次の項のDebianでシリアルの後に、書いたものなので、COM1がttyS0に なるって、当たり前に使ってます)

VMWAREでシリアル接続を制覇したオイラーは、Linux系にも手を出す事にした。 対象は、今となっては少々古くなった、サイエンス系のFedora 24.

この間、Fedora25が出たからね。そして、こいつがXを捨てて、Waylandとかに走った そうな。そう言えばウブもXを捨てて、Mirとか言うのに走るそうな。いよいよGUIに 関しては、基幹部分が分裂ですなあ。昔のUnixみたいに共倒れを期待。 相打ちして、Linux滅びろ。Displayサーバーのいがみ合いで共倒れになりそうな時、 BSDが復権すればいいな。歴史はきっと繰り返すのさ。

第447回 Unity 8をちょっとだけ体感してみる

VMWAREとかVBOXが、Waylandを支持するか、Mirを支持するか、当分の間高みの見物 をしておこう。優劣が決まってから、勝ち馬に乗るのが常套手段。

アメちゃん所の大統領、トランプに決まれば経済が崩壊するとか言ってたくせに、 今は期待感で株価が暴騰してる。変化はチャンスなんですかねぇ。Display戦争も どんどんやっとくれ!

Systemd のHow do I change the number of gettys running by default? あたりを参考に。

[sakae@fedora ~]$ sudo systemctl enable getty@tty0
[sudo] password for sakae:
Created symlink from /etc/systemd/system/getty.target.wants/getty@tty0.service to /usr/lib/systemd/system/getty@.service.
[sakae@fedora ~]$ sudo systemctl start getty@tty0
[sakae@fedora ~]$ ps awx| grep getty
  4088 tty1     Ss+    0:00 /sbin/agetty --noclear tty0 linux
  4149 pts/2    S+     0:00 grep --color=auto getty

あれれ、待ち受け端末がtty0じゃ、明後日のやつじゃん。ログインを試みると、案の定、無しのつぶて。

本当は、ttyS0で待ち受けして欲しい。で、systemctlに与える引数を getty@ttyS0 に変更 して、再設定。そしたら、

[sakae@fedora ~]$ ps awx | grep getty
  4232 ttyS0    Ss+    0:00 /sbin/agetty --noclear ttyS0 vt220
  4235 pts/2    S+     0:00 grep --color=auto getty

端末らしい待ち受けになった。そして、

Fedora 24 (Twenty Four)
Kernel 4.8.8-200.fc24.x86_64 on an x86_64 (ttyS0)

fedora login: sakae
Password:
Last login: Wen Nov 30 05:59:51 from xxx.xxx.xxx.xxx
[sakae@fedora ~]$

やったね。

Debian でもシリアル接続

こうなってくると、debianでもシリアル接続したくなる。いつもはssh接続なんだけど、 これだとOSを新しくしたりすると鍵が違うとか言われて面倒な事が有るんだ。

その点、シリアル接続なら、鍵の心配もいらないし、そもそも物理的接続だから、 ケーブルに針でも刺して、電圧をモニターしない限り盗聴も出来ない。超安全とか 言ってみる。

VBOXに入れてるDebianでもやってみる。OpenBSDみたいに、/etc/ttys なんてのが有るかな?

残念、無かったぞ。という事はLinuxってUNIXの紛い物です。COM1相当が、どのデバイスに 割り当てられているかヒントは無いかな? 考えられるmanを試してみるか。

TTYS(4)                    Linux Programmer's Manual                   TTYS(4)

名前
       ttyS - シリアルターミナルライン(serial terminal lines)

説明
       ttyS[0-3]        はシリアルターミナルラインのためのキャラクターデバイス
       (character device)である。

       これらは典型的には次のようにして作られる。

              mknod -m 660 /dev/ttyS0 c 4 64 # base address 0x3f8
              mknod -m 660 /dev/ttyS1 c 4 65 # base address 0x2f8
              mknod -m 660 /dev/ttyS2 c 4 66 # base address 0x3e8
              mknod -m 660 /dev/ttyS3 c 4 67 # base address 0x2e8
              chown root:tty /dev/ttyS[0-3]

ファイル
       /dev/ttyS[0-3]

関連項目
       chown(1), mknod(1), tty(4), agetty(8), mingetty(8), setserial(8)

そんなデバイス有るのか? リナはデバイスもダイナミックに生成してるはずなんで、 今調べて有れば、多分使えるのだろう。

sakae@debian:~$ ls /dev/ttyS*
/dev/ttyS0  /dev/ttyS1  /dev/ttyS2  /dev/ttyS3

念のため、dmesgも確認しておく。ここまで、すらすら書いてきたけど、大前提として、 VBOXの設定で、シリアルを選んで、パイプ接続、神田大明神のお札を貼っておく事。 詳細は、前回の記事を参照の事。

sakae@debian:~$ dmesg | grep ttyS
[    8.976912] 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 1650A

どうやら、ハード的にも認識してるみたい。じゃ、このポートを使ってloginの見張りを させればいいんだな。関連コマンドのagettyあたりだろうと当たりを付けて、manすると

sakae@debian:~$ sudo  /sbin/agetty 9600 ttyS0

起動したら、ずっと動いたままになっちゃったけど、その対処は後で考えよう。

PuTTYのシリアル接続(これも前回やった)で、トライ。

Debian GNU/Linux 8 debian ttyS0

debian login: sakae
パスワード:
最終ログイン: 2016/11/24 (木) 13:51:16 JST 10.0.2.2から開始日時 pts/0
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
-bash: 端末プロセスグループを設定できません (1169): デバイスに対する不適切なioctlです
-bash: このシェルではジョブ制御が無効になっています

何時もsshで入っているので、こういうバナーは新鮮だな。で、bashが小言を垂れているぞ。 端末プロセスグループって、端末屋の仲間にならないと、フル制御が出来ない。

現実にもこういうシチエーションよく有るね。金払うとフル機能が使えますってやつ。 まさか、今回は金を払う必要はあるまい。世界のデビアン教ですから。

で、攻略法を考える。端末デバイスはrootの持ち物、グループはdialoutってなってた。 だから、オイラーもdialoutのグループに入れてもらえばいいのかな。

リナだと、小難しいコマンドを叩くんだろうけど、BSDからの流れ者は、vi /etc/groupで 済ますのさ。

で、件のagettyの起動は、昔のLinuxで /etc/inittabでやってたような気がする。 inittab(5)に、

例
       以下は、昔のLinuxで使われていたものに似たinittabの例である:

              # linux用のinittab
              id:1:initdefault:
              rc::bootwait:/etc/rc
              1:1:respawn:/etc/getty 9600 tty1
              2:1:respawn:/etc/getty 9600 tty2

わざわざ、昔って断ってるけど、これがシリアルのコントロールだったんだな。今は そんなファイルは無いぞ。どこかのGUI好きな連中が改悪して、systemdしちゃったから、 そんなにWindowsに喧嘩売りたいんか、所詮勝ち目はないぞ。うかうかしてたら、 Windowsも過去のものになって、タブレットって名前の板とか電話兼端末とか、腕時計に 変わられてしまうのにね。

sakae@debian:~$ systemctl -a | grep ttyS0
  dev-ttyS0.device                                                               loaded    active   plugged   /dev/ttyS0
  sys-devices-pnp0-00:02-tty-ttyS0.device                                        loaded    active   plugged   /sys/devices/pnp0/00:02/tty/ttyS0

Linux - シリアルコンソール

Systemd」を理解する ーシステム起動編

inittab (respawn) replacement in systemd

電源を入れたときにtty1を自動ログインする設定あれこれ集

色々調べると、Debianの場合 systemdと言っても、世に出てるそれとは違った独自の 改造が施してあるようだ。Debian Loveとは程遠いオイラーなので、尻尾を巻いて 逃げ出しましょ。

Fedora での教訓を生かして

もう一度、debianに挑戦します。えいぃっとばかり

sakae@debian:~$ sudo systemctl enable getty@ttyS0
Created symlink from /etc/systemd/system/getty.target.wants/getty@ttyS0.service to /lib/systemd/system/getty@.service.
sakae@debian:~$ sudo sudo systemctl start getty@ttyS0

これで、何の問題もなく、シリアル接続出来ましたよ。debianなら、それだけにしか興味を 持たないと解決は遅れただろうね。尻軽おじさんで、あっちこっちに頭を突っ込んでおくと、 いい事あるな。

ついでなんで、sysytemctl enableした時のメッセージから、探偵業をやってみるか。

sakae@debian:/etc/systemd/system/getty.target.wants$ ls -l
total 0
lrwxrwxrwx 1 root root 34 Oct  2 06:52 getty@tty1.service -> /lib/systemd/system/getty@.service
lrwxrwxrwx 1 root root 34 Nov 30 15:20 getty@ttyS0.service -> /lib/systemd/system/getty@.service

なる程、リンク元のファイルの一部に、引数を埋め込んだものが作成されるのね。リンク先は 共通になってるって事は、共通な処理が行われるんか。考えたものだな。でも、こういの 馴染みが無いな。

で、共通なlibの下にあるやつは、

[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes

主要な部分は、これだな。起動コマンド自体が引数になってて、そのコマンドの引数が (リンク元)から取られたり、環境変数から持ってきたりしてる。 そして、そのコマンドの制御方式(再起動等)も、変数にまとめられている。

じゃ、これらを使う本体は? 勿論、systemdだな。大がかりなものを作ったものだ。 シンプルさが、失われていくな。そのうち、恐竜みたいに滅びるぞ、図体が大きくなり過ぎてね。

違いますって、恐竜が滅びたのは、巨大隕石が地球に衝突したからってのが、今や定番の説に なりつつあります。じゃ、こんなのどうだ。

世の中、右を向いても左を向いてもLinuxばかり。Linuxに取りつく強力なウィルスが 出現したら、大感染するぞ。で、WHOが慌てて、バンデミック宣言発令。 感染の拡大を押さえるため、インターネットの使用は10日間停止してください。

その間に、感染に強いOpenBSDに乗り換えてください。インストール用メディアは、 市町村の保健所から入手してください。

なお、多様性は善ですから、OpenBSD以外にも、BSD系のDNAを継承したOSも配布してます。 好みで、選んでいただいてかまいません。

なんて風にならないかね。それとも、凶悪なウィルスに対抗する、人工知能入り ワクチンソフトをWHOが公開するとか。。。。

今年もインフルエンザが流行り始めました。十分なご注意を。

そしてもう一つ、冬の風物詩と言えば、

Advent Calendar 2016

2016年の技術系Advent Calendarが各所ではじまる