OpenBSD in OpenBSD
Windows10機に、McAfee リブセーフ っていう、ワクチンソフトが同梱されてた。 レノボもなかなかやるな。セキュリティに気を使ってくれていると思ってた。
そしたら、今となって、今後も使うなら金払えって言ってきたぞ。そういうあんたは、 トロイの木馬に分類されるウィルスの類ですかい? (よくあるよね、こういうの)
一体幾ら払ったらいいの? 製品名を頼りに マカフィーへ行ってみたぞ。
3年間で1万円。今なら5408円お得。一日わずか10円ですってさ。その上、何台でも インストールしてもいいよってさ。オイラーみたいに1台しか対象機器がないと、なんだか 損した気分になる。1台限定でいいから、お値段控えめな、某スーパーみたいなの無いの?
無料のお試し版をアンインストール/インストールしながら使うって言う、せこい使い方は 出来るのかな? 試しにやってみようか。
今まで使っていて、検出された脅威は全く無し。火壁でブロックされたのが少し有るって 状況。(攻撃元のIPは報告してくれるのに、どんなポートを叩いてるかってのは無し。 これって欠陥品じゃなかろうか)7機では別のワクチンソフトを使っているけど、脅威の検出は全く無し。
本当にワクチンで利くんですかねぇ?
インフルエンザ予防接種と一緒で、気休めなんじゃない。
識者に聞いたら、ウィルスバスターがお勧めとか。別な人に聞いたら、ウィルスバスターの クラウド版を使ってるとか。人気ありますなあ。ちゃんとMSのIME辞書にも登録されてる ぐらいだから、バスターとMSは癒着してるな。レノボはマカフィーと癒着してて、ユーザーがマカフィーを 採用してくれるとリベートが入る仕組みなんだな。
で、採用してくれないと、何で買わないと、某国のガイドみたいに脅かしてくるとな。
vmm
再び技評のBSD界隈の話題だけど、過去に OpenBSDハイパーバイザvmm(4),開発ブランチへマージなんてのが紹介されてた。
そして、最近では、用意が整ったので、 OpenBSDプロジェクト、ハイパーバイザ機能「VMM」をデフォルトで有効化へ---「OpenBSD 6.1」からデフォルトで利用できる見込みなんていう、アナウンスがなされていた。
テオ親分の専制政治は、即断即決で小気味よい。最近逝去された、タイの国王みたいに、 皆から愛される稀有な人だな。
OpenBSD in OpenBSD
柿と同じように熟しているなら、少々のフライングも許されるだろう。(オリンピックみたいに 即失格と言う事も無いし)
先達がおられたので、トレースしてみる。 OpenBSD vmmを動かしてみる
使える前提条件、dmesgに出て来るCPUの性格にVMX機能が有るか?は、普通に設定した VMWARE Playerでは、その機能がoffになっている。
プロセッサーの仮想化エンジンの所で、Intel VT-x/EPT の所をチェックしておこう。 なお、FreeBSDでのbhyveを使う場合も、この機能が必要になる。
じゃ、例に倣ってやってみる。オイラーはマルチプロセッサーで動かしているので、 コメントを外すのは、GENERICファイルだけど、実際のconfigは、 config GENERIC.MP とやればいいのかな? 参考までに、カーネルの製造時間を 測ってみた。
text data bss dec hex 9093180 266328 663552 10023060 98f094 3m57.33s real 1m01.10s user 2m50.59s system
早速走らせてみると、
bash-4.3# vmd bash-4.3# vmctl start "myvm" -c -k /bsd.rd -m 512M vmctl: starting without disks vmctl: starting without network interfaces Connected to /dev/ttyp3 (speed 9600) ~# send break ~$ pipe local command to remote host ~> send file to remote host ~C connect program to remote host ~D de-assert DTR line briefly ~R start recording to file ~S set speed ~X send file with XMODEM ~? get this summary [EOT] bash-4.3# pkill vmd
メッセージが出てくるはずなんだけど、接続しましたでだんまり。
何度かやってるうちに動きだした。
bash-4.3# vmctl start "myvm" -c -k /bsd.rd -m 512M vmctl: starting without disks vmctl: starting without network interfaces Connected to /dev/ttyp3 (speed 9600) Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. Copyright (c) 1995-2016 OpenBSD. All rights reserved. http://www.OpenBSD.org OpenBSD 6.0 (RAMDISK_CD) #2100: Tue Jul 26 13:05:59 MDT 2016 deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/RAMDISK_CD RTC BIOS diagnostic error 20<config_unit> real mem = 520093696 (496MB) avail mem = 502673408 (479MB) mainbus0 at root : erase ^?, werase ^W, kill ^U, intr ^C, status ^T Welcome to the OpenBSD/amd64 6.0 installation program. (I)nstall, (U)pgrade, (A)utoinstall or (S)hell?
どうも、裏でcuを使って、端末と接続してるみたい。どうやら、cuの使い方を 勉強しておくべきだろうな。上でチルダで始まるのが、それだけど。
下記は、例によってpstreeから抜粋。
| \-+= 38193 sakae -/usr/local/bin/bash | \-+= 30310 root bash | \--= 51627 root /usr/bin/cu -l /dev/ttyp3 -s 9600 |-+= 66262 root vmd | |-+= 71098 _vmd vmd: vmm (vmd) | | \--- 30318 _vmd vmd: myvm (vmd) | \--= 08129 _vmd vmd: control (vmd)
手を変えて、 vmctlのマニュアル例に倣ってやってみた。
bash-4.3# vmctl create disk.img -s 500M bash-4.3# vmctl start "myvm" -m 512M -c -i 1 -d disk.img -k /bsd.rd
インストールが始まるんだけど、NICの設定をどうするか例が無いので、IPアドレスを 振れず。この状態では、ネットワークインストールもおぼつかない。 これはもう、諦めモード突入。
この時、別端末で、VMの状態をモニターしておくか。
[ob: ~]$ vmctl status ID PID VCPUS MAXMEM CURMEM TTY NAME 2 83232 1 512MB 182MB /dev/ttyp3 myvm [ob: ~]$ vmctl stop 2 vmctl: command failed: Operation not permitted [ob: ~]$ su -m Password: bash-4.3# vmctl stop 2 vmctl: terminated vm 2 successfully bash-4.3# vmctl status ID PID VCPUS MAXMEM CURMEM TTY NAME bash-4.3#
モニターは一般ユーザー権限で出来るけど、仮想マシンを止めようとすると、そんなの 無理よと止められた。(当たり前です)で、rootになってから停止。これで、 起動してにっちもさっちもいかなかったマシンが停止出来た。
最初に作ったdisk.imgは、内容が全てゼロだったんだけど、インストールの真似事を したら、何らかのデータが書き込まれていたぞ。これ、動いていた証拠になるかしらん。
man tap とかやると、ちゃんと説明が出て来るんで、NICに関してはFreeBSD並みの事は 実現していそうだな。前回のおさらいを兼ねてやってみるかな。
tap
今までOpenBSD6.0の言いなりでプロセスを動かしていたけど、ちと余計なやつがいるので 下記のファイルを用意して、抑制したよ。
[ob: ~]$ cat /etc/rc.conf.local smtpd_flags=NO sndiod_flags=NO pflogd_flags=NO ntpd_flags=NO ##sysctl kern.usermount=1
仮想PCのDISKにOSをインストールする例が、 Planet OpenBSD に投稿されてた。 Operating a vmm(4) guest on OpenBSD-current 参考にしてみる。 仮想PCを起動して、host名を聞いてきたら、下記の設定をして先に進めとな。
bash-4.3# ifconfig bridge0 add em0 add tap0 up
tap0が勝手に出来ていた。そして上記を実行すると、bridge0が出来て、下記のように なった。
tap0: flags=8942<BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 lladdr fe:e1:ba:d4:92:36 index 8 priority 0 llprio 3 groups: tap status: active bridge0: flags=41<UP,RUNNING> index 9 llprio 3 groups: bridge priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp em0 flags=3<LEARNING,DISCOVER> port 1 ifpriority 0 ifcost 0 tap0 flags=3<LEARNING,DISCOVER> port 8 ifpriority 0 ifcost 0
tap0がupしてなくていいのかな? activeになっているから、それでいいのだー、かも 知れいないけど。
案の定、dhcpでアドレスは取れず。ならば固定アドレスを振ろう。VMWAREのDHCPがプール してるアドレスを勝手に使ったら、sshを切られちゃったぞ。それ以外を設定したら、 先に進んだ。
途中で、DNSサーバーのアドレスって言われて、出てこず、思わず、8.8.8.8って答え ちゃった。後で考えたら。/etc/resolv.confに答えが書いてあるのね。すっかり失念 してた。
それから、もう一つ、共通の出入り口はいくつですかっても、聞かれた。これは調べ方を 知ってるぞ。netstat -r ね。
先へ進んだけど、だんまりしちゃった。
/dev/rsd0a: 2047.3MB in 4192896 sectors of 512 bytes 11 cylinder groups of 202.47MB, 12958 blocks, 25984 inodes each /dev/sd0a (61bde4531abf33ea.a) on /mnt type ffs (rw, asynchronous, local) Let's install the sets! Location of sets? (disk http or 'done') [http] HTTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] (Unable to get list from ftp.openbsd.org, but that is OK) HTTP Server? (hostname or 'done') www.ftp.ne.jp Server directory? [pub/OpenBSD/6.0/amd64] OpenBSD/6.0/amd64
やっぱり、NICが正常に動いていないんだな。ごちゃごちゃやってたら、パニクった。 なかなか、こういうのは見られないので、記念に貼っておく。
Netmask for vio0? [255.255.255.0] IPv6 address for vio0? (or 'rtsol' or 'none') [none] uvm_fault(0xffffffff8172b6d0, 0x38, 0, 2) -> e fatal page fault in supervisor mode trap type 6 code 2 rip ffffffff812b8802 cs 8 rflags 10246 cr2 38 cpl 7 rsp ffff80000e3e2ce8 panic: trap type 6, code=2, pc=ffffffff812b8802 syncing disks... done dump to dev 17,1 not possible rebooting...
参考までにFreeBSDのそれを上げておく。
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 02:b8:a8:da:7f:00 nd6 options=9<PERFORMNUD,IFDISABLED> groups: bridge id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 4 priority 128 path cost 2000000 member: em0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 1 priority 128 path cost 20000 tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80000<LINKSTATE> ether 00:bd:a9:e2:f6:00 nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet autoselect status: active groups: tap Opened by PID 910
やっぱり、tap0はupして、activeになっているなあ。そして、仮想PCが落ちると statusは、no carrier に変化した。仮想PC側に属している事が明確だな。 そうか、そういう手が、調べる糸口になるかな。まてまて、それだけの事で 何の手がかりになる? ひょっとしたらブリッジって名前のHUBがおんぼろかも 知れないぞ。
man hostname.ifすると、ブリッジのアドレスを設定する例が出てくるけど、この場合、 必要あるのかな? IPv6版のdhcp指定は、rtsol って言うんか。知らなかったな。 ああ、まれに有るという、DHCPの相性問題だったりして。
ネットワークのお勉強
まだインストールを諦めきれない、往生際の悪いオイラーは、基本に立ち返ってみる事に した。インストール用のカーネル /bsd.rd は、インストールやアップデートの他 シェルに落ちてトラシュー出来るようになってる。
で、shellに落ちて確認
# ifconfig -a lo0: flags=8008<LOOPBACK,MULTICAST> mtu 32768 llprio 3 groups: lo vio0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 lladdr fe:e1:ba:d0:01:1a llprio 3 media: Ethernet autoselect status: active # dhclient vio0 DHCPDISCOVER on vio0 - interval 3 DHCPDISCOVER on vio0 - interval 8
取り合えず、固定IPを振ってから、親にピンしてみる。
# ifconfig vio0 xxx.xxx.xxx.xxx netmask 255.255.255.0 # ping yyy.yyy.yyy.yyy round-trip min/avg/max/std-dev = 0.431/321.022/983.034/408.816 ms --- yyy.yyy.yyy.yyy ping statistics --- 25 packets transmitted, 25 packets received, 0.0% packet loss round-trip min/avg/max/std-dev = 0.431/356.609/1954.534/512.315 ms
pingにべらぼうな時間がかかっている。でも一応、疎通確認が出来たんで、方向は 間違っていないんだな。
ちょっと、ネットワークのお勉強。
ああ、デフォルトゲートウェイなんてのも有ったな。でも、簡易型のシステムなんで netstatなんて言う素敵なコマンドが入っていなくて、確認出来ず。 でも、ゲートウェイを設定/確認するコマンドが入っているはず。
OpenBSD Change, Add or Display Default Gateway
こんなページを紹介された。そのものずばりの routeってのがあるのね。確認したら、 入っていた。で、showしたら、defaultが勿論設定されていなかった。
はて、どうやって設定するんだ? それはね、参考例が /etc/netstart にあるから それを見れ。
# Look for default routes in /etc/mygate. [[ -z $dhcpif ]] && stripcom /etc/mygate | while read gw; do [[ $gw == @(*:*) ]] && continue route -qn delete default >/dev/null 2>&1 route -qn add -host default $gw && break done
で、設定してから、ピンしたけど、変化無し。オイラーのパケットはEME(月面反射) して、返ってくるのだろうか?
--- yyy.yyy.yyy.yyy ping statistics --- 14 packets transmitted, 14 packets received, 0.0% packet loss round-trip min/avg/max/std-dev = 0.431/320.567/1689.168/527.630 ms
相変わらず、dhcpでアドレスは取れず。他に調べる事有るかな?
苦し紛れに、インストールに使われる関係者を、列挙してみる。
# echo $PATH /sbin:/bin:/usr/bin:/usr/sbin:/ # ls /sbin /bin /usr/bin /usr/sbin /bin: arch chmod dd eject ln mt rm sha512 sync cat cp df hostname ls mv sh sleep tar chgrp date ed ksh mkdir pax sha256 stty /sbin: bioctl fdisk ifconfig mount_cd9660 newfs restore chown fsck init mount_ext2fs newfs_msdos route dhclient fsck_ffs kbd mount_ffs ping sysctl disklabel fsck_msdos mknod mount_msdos ping6 umount dmesg halt mount mount_udf reboot /usr/bin: egrep fgrep grep gzcat less sed encrypt ftp gunzip gzip more signify /usr/sbin: chroot installboot pwd_mkdb