sshファミリー
図書館からニュートン誌も借りてきていたんだ。三角関係編。 色々な関連関数が紹介されてた。受験の為の必須事項ですからね。
数学ナビゲーションについてにも紹介がある。受験対策用雑誌の片棒を担いでいるのかな。ちょいと試してみる。
三角関数で引数に与える数値は、ラジアンって決まってる。馴染みが薄いんだよな。平凡な頭でも理解出来るように、360進数で与えるようにしよう。題材は2倍角の公式あたり。
julia> d = pi / 180 0.017453292519943295 julia> 2 * sin(30d) * cos(30d) 0.8660254037844386 julia> sin(60d) 0.8660254037844386
最初に度をラジアンに変換するための定数を定義する。それから、sin(60度)を求めたい。 60度の半分の角度30度を使って、sin,cosすると、求まるとな。
juliaでは、数値と変数(定数)の掛け算の場合、掛け算記号を省略できる。で、変数名をdなんていう風に定義しておくと、30度は、30dのように、書ける。これで、障壁が無くなったな。
大きい度ーの場合はどうよ?
julia> sin(1000d) -0.9848077530122079 julia> 2 * sin(500d) * cos(500d) -0.984807753012208
360度を超えても成り立つとな。ぐるぐると360度で一回りしてくれるんで、どんなに大きい角度でも大丈夫。やったね。
そんじゃ、cos用の倍角関数は?
2 2 cos 2a = cos a - sin a
なんて風に、括弧嫌いなhaskell風に書いてあるのは許せるとして、べき乗が変な所に付いている。全くもう、こういう書き方をするから、数学嫌いな生徒を量産するんだよ。
julia> cos(60d) 0.5000000000000001 julia> cos(30d)^2 - sin(30d)^2 0.5000000000000002
脳内変換に時間を要しますよ。
本当にHaskellは数式通りに書けるの?
Prelude> d = pi / 180 Prelude> cos(30*d)^2 - sin(30*d)^2 0.5000000000000002
どうしても括弧必要。この原因は、関数はすぐ右隣の1つの値と強力に結合するから。先に引数を計算しておきたい場合、括弧をつけて計算の優先順位をあげる。
じゃ、事前にラジアンの数値を求めておく
Prelude> a = 30*d Prelude> sin a 0.49999999999999994 Prelude> cos ^2 a - sin ^2 a <interactive>:7:1: error: • Non type-variable argument in the constraint: Num (a -> a) (Use FlexibleContexts to permit this) • When checking the inferred type it :: forall a. (Floating a, Num (a -> a)) => a -> a Prelude> cos a ^2 - sin a ^2 0.5000000000000002
やっぱり脳内変換必要。
そんじゃ、 maximaでは
(%i1) d: %pi / 180; %pi (%o1) --- 180 (%i2) sin(60 d); incorrect syntax: d is not an infix operator sin(60 d) ^ (%i3) 2 * sin(30 * d) * cos(30 * d); sqrt(3) (%o3) ------- 2 (%i4) sin(60 * d); sqrt(3) (%o4) ------- 2
更に
(%i5) trigexpand(sin(a+b)); (%o5) cos(a) sin(b) + sin(a) cos(b) (%i6) trigexpand(cos(2 * a)); 2 2 (%o6) cos (a) - sin (a) (%i7) trigreduce(2 * sin(a) * cos(a)); (%o7) sin(2 a) (%i8) sqrt(3); (%o8) sqrt(3) (%i9) sqrt(3.0); (%o9) 1.732050807568877 (%i10) float(sqrt(3)); (%o10) 1.732050807568877 (%i11) bfloat(sqrt(3)), fpprec: 50; (%o11) 1.7320508075688772935274463415058723669428052538104b0
お主、なかなかやるな。そこらのぼんくらよりは、数学が出来るな。sqrt(3)は頑固にsqrt(3)だけど(無理数だから無理からぬ事)、一捻りすると柔軟になってくれる。
上で見たように各アプリを使う場合、それぞれの作法の習得が必要。帯に短しタスキに長し。 それもそのはず、パーサーなんてものが裏で動いているせい。パーサーを人間に任せてしまえば そんな悩みも吹き飛ぶ。
maximaは裏でlispが動いていたけど、無理な事をしない限り表に出てこない。簡単に人間パーサーを使うにはschemeが良い。
gosh> (use math.const) gosh> (define (d n)(* n pi/180)) d gosh> (define (^2 n)(* n n)) ^2
我らがgoshには、pi/180 なんて言う定数が既に用意されてる。他の言語しか知らない人は目を剥くだろうけど。それと、もう一つ、2乗っぽい名前の関数を宣言した。 後は、人間パーサーが活躍する事となる。初めから人間パーサーしか無いから、精神衛生上、非常に宜しいと思うぞ。
gosh> (* 2 (sin (d 30)) (cos (d 30))) 0.8660254037844386 gosh> (sin (d 60)) 0.8660254037844386 gosh> (- (^2 (cos (d 30))) (^2 (sin (d 30)))) 0.5000000000000002 gosh> (cos (d 60)) 0.5000000000000001
括弧のバランスを恐れるなかれ。emacs上でpareditとかを使っていれば、全く心配無しです。
openssh.com
OpenSSH 8.1 released October 8, 2019
前回の最後にちらっと書いたけど、新しいopensshが出た。HPで高らかに宣伝されてる。 それはいいんだけど、
HPの下の方に大事なお願いが書かれている。
OpenSSH is developed by a few developers of the OpenBSD Project and made available under a BSD-style license. OpenSSH is incorporated into many commercial products, but very few of those companies assist OpenSSH with funding. Contributions towards OpenSSH can be sent to the OpenBSD Foundation.
大事な事なので、意訳してみる。(ググルさんの力を借りて)
OpenSSHは、OpenBSDプロジェクトの少数の開発者によって開発され、BSDスタイルの ライセンスの下で利用可能になっています。 OpenSSHは多くの商用製品に組み込まれていますが、OpenSSHを資金援助している企業は ほとんどありません。 OpenSSHへの貢献は、OpenBSD Foundationに送信できます 。
OpenSSHはOpenBSDの成果の一部。それを一般開放してるって事。しかもゆるゆるなライセンスの元に。実に寛大。これもそれも、Linux教の親分からは、あいつらセキュリティ教(狂)と揶揄されながらも、信念を曲げない親分が居るからです。
こんな寛大な御心に付け込んで、みんなフリーライド(無賃乗車、ただ使い)してるんで、寄付宜しくのお願いだ。 財政がひっ迫してくると、ウィキペディアの寄付お願い、お願いになるだろうね。
ウィキペディアの方は個人が訪れる事が多いだろうけど、OpenSSHみたいなツールを追いかける 個人なんて、余りいないだろう。企業の方宜しく。まあ、自由に使える物に金払うなんて、そんな無駄な事するなって、資本主義の原理がまかり通るんだろうね。
せめてGAFAな連中もとえ(皆様方)の寛大なる寄付をお願い致します。 わざわざOpenssh.comなんて言う会社組織にしてるのは、(多分)寄付を受け付け易くするためでしょう。大口開けて待ってるぜぃ。
そんな事なんで、OpenSSHは、OpenBSDの配布サイトからも取ってこれる。 例えば 理研のさーばーに行って、OpenSSHの下に潜ればよい。一般のOS用には、portableの中に収録されてるのを取ってくる。。
OpenBSDの親分はOpenSSHの他に、セキュリティの脅威になりそうな物を(OpenNTPDとか)も、独自開発してる。(多分資金不足で)ポータブル化はされていないけど。
これらを使いたかったら、OpenBSDに乗り換える事です。CDを注文するとかマシンを寄付するとかして貢献しましょう。
for FreeBSD
早速、万人の福を与えると言うポータブル版をFreeBSDで試してみる。
$ cd openssh-8.1p1/ $ ./configure : OpenSSH has been configured with the following options: User binaries: /usr/local/bin System binaries: /usr/local/sbin Configuration files: /usr/local/etc Askpass program: /usr/local/libexec/ssh-askpass Manual pages: /usr/local/share/man/manX PID file: /var/run Privilege separation chroot path: /var/empty At runtime, sshd will use the path defined in /etc/login.conf Make sure the path to scp is present, otherwise scp will not work Manpage format: doc PAM support: no OSF SIA support: no KerberosV support: no SELinux support: no MD5 password support: no libedit support: no libldns support: no Solaris process contract support: no Solaris project support: no Solaris privilege support: no IP address in $DISPLAY hack: no Translate v4 in v6 hack: no BSD Auth support: no Random number source: OpenSSL internal ONLY Privsep sandbox style: capsicum Host: x86_64-unknown-freebsd12.0 Compiler: cc Compiler flags: -g -O2 -pipe -Wunknown-warning-option -Qunused-arguments -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -mretpoline -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong Preprocessor flags: Linker flags: -Wl,-z,retpolineplt -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong Libraries: -lcrypto -lutil -lz -lcrypt $ make :
configの出来具合を見ると、リナちゃん用とかソラリスまでサポートするオプションが有るのね。サービス精神旺盛。gmakeなんて言うリナ専用なやつじゃなくても、ちゃんとmake出来るってのもいいね。リナはリナ以外にOSは無いと思ってる連中が多いからね。
$ ssh -V OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018 $ ./ssh -V OpenSSH_8.1p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018
文句を言われる事も無くコンパイルが終了したので、既に入ってるやつと比べてみた。3代前のやつが入ってるという事は、当時の流行版を入れてたのね。
書き忘れたけど、一回のmakeでsshファミリーに属するコマンドを全部作りあげていた。
実際に機能するか、確認。
$ ./ssh localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. ECDSA key fingerprint is SHA256:BmYGkeLlpZJ16R6rL4VwWlxn1vrRIII81iurIKigA30. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. Password for sakae@fb12: Last login: Sun Oct 13 14:19:07 2019 from tmux(979).%0 FreeBSD 12.0-RELEASE-p10 GENERIC Welcome to FreeBSD!
うん、ちゃんと動いたね。そんじゃ、既存のやつと違いが有るか、成分表をざっと眺めてみるか。
$ ldd /usr/bin/ssh /usr/bin/ssh: libprivatessh.so.5 => /usr/lib/libprivatessh.so.5 (0x800276000) libgssapi.so.10 => /usr/lib/libgssapi.so.10 (0x80031e000) libcrypto.so.111 => /lib/libcrypto.so.111 (0x80032b000) libc.so.7 => /lib/libc.so.7 (0x800618000) libprivateldns.so.5 => /usr/lib/libprivateldns.so.5 (0x800a0b000) libcrypt.so.5 => /lib/libcrypt.so.5 (0x800a6c000) libz.so.6 => /lib/libz.so.6 (0x800a8e000) libthr.so.3 => /lib/libthr.so.3 (0x800aa8000) libssl.so.111 => /usr/lib/libssl.so.111 (0x800ad3000) $ ldd ./ssh ./ssh: libcrypto.so.111 => /lib/libcrypto.so.111 (0x8002fa000) libutil.so.9 => /lib/libutil.so.9 (0x8005e7000) libz.so.6 => /lib/libz.so.6 (0x8005fe000) libcrypt.so.5 => /lib/libcrypt.so.5 (0x800618000) libc.so.7 => /lib/libc.so.7 (0x80063a000) libthr.so.3 => /lib/libthr.so.3 (0x800a2d000)
何やらオプションを有効にしたやつが使われているのね。
どんなオプションでコンパイルされてるか既存のソースを調べてみるか。/usr/src/crypto/opensshにソースが有るけどMakefileが無い。
するってぇと、buildworldする時に、ここに移動してきてconfigureするんだろう。きっとMakefileに書いてあるだろう。
$ cd /usr/src $ find . -name Makefile.inc | xargs grep openssh ./secure/Makefile.inc:SSHDIR= ${SRCTOP}/crypto/openssh
最初、Makefileを対象に調べて、空振りしたのは秘密だ。
$ cd secure/ $ ls Makefile lib/ tests/ usr.sbin/ Makefile.inc libexec/ usr.bin/ $ ls usr.bin Makefile scp/ ssh-add/ ssh-keyscan/ Makefile.inc sftp/ ssh-agent/ tests/ openssl/ ssh/ ssh-keygen/ $ ls usr.bin/ssh Makefile Makefile.depend
Makefileを辿って、例えば、secure/usr.bin/ssh/Makefileの中
# gss-genr.c really belongs in libssh; see src/secure/lib/libssh/Makefile SRCS+= gss-genr.c CFLAGS+=-I${SSHDIR} -include ssh_namespace.h SRCS+= ssh_namespace.h LIBADD= ssh .if ${MK_LDNS} != "no" CFLAGS+= -DHAVE_LDNS=1 .endif .if ${MK_GSSAPI} != "no" && ${MK_KERBEROS_SUPPORT} != "no" CFLAGS+= -include krb5_config.h SRCS+= krb5_config.h LIBADD+= gssapi .endif
configureを手動展開してみて、その成果をMakefileに反映させてるとな。FreeBSDとしてのコンパイルオプションで運用って事だな。って事は、OpenSSHと同盟関係に有っても、完全に信用してる訳では無いと言う事か。 いや、そうじゃないな。後で個々のコマンドのメンテナンスをやり易いように、それぞれ用のMakefileを用意したるんだよ。
source-treeの中に有ったREADME.platformでの注意書き
Linux ----- Some Linux distributions (including Red Hat/Fedora/CentOS) include headers and library links in the -devel RPMs rather than the main binary RPMs. If you get an error about headers, or complaining about a missing prerequisite then you may need to install the equivalent development packages. On Redhat based distros these may be openssl-devel, zlib-devel and pam-devel, on Debian based distros these may be libssl-dev, libz-dev and libpam-dev.
みんなリナの所業には苦労してんのよ。
for CentOS
次はCentOSかな。
(base) [sakae@c8 ~]$ ssh -V OpenSSH_7.8p1, OpenSSL 1.1.1 FIPS 11 Sep 2018
最近出たはずなのに、版が古いね。作り方はFreeBSDと一緒で無事に動いた。気になる機能差
(base) [sakae@c8 openssh-8.1p1]$ ldd /usr/bin/ssh linux-vdso.so.1 (0x00007fff5191f000) libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x00007f64ebdda000) libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f64eb902000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f64eb6fe000) libutil.so.1 => /lib64/libutil.so.1 (0x00007f64eb4fa000) libz.so.1 => /lib64/libz.so.1 (0x00007f64eb2e3000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f64eb0ba000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f64eaea3000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f64eac79000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f64eaa29000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f64ea739000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f64ea51d000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f64ea319000) libc.so.6 => /lib64/libc.so.6 (0x00007f64e9f55000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f64e9d35000) /lib64/ld-linux-x86-64.so.2 (0x00007f64ec297000) libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f64e9ab1000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f64e98a1000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f64e969d000) (base) [sakae@c8 openssh-8.1p1]$ ldd ./ssh linux-vdso.so.1 (0x00007fffdf976000) libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f55e7926000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f55e7722000) libutil.so.1 => /lib64/libutil.so.1 (0x00007f55e751e000) libz.so.1 => /lib64/libz.so.1 (0x00007f55e7307000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f55e70de000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f55e6ec7000) libc.so.6 => /lib64/libc.so.6 (0x00007f55e6b03000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f55e68e3000) /lib64/ld-linux-x86-64.so.2 (0x00007f55e80b5000)
色々な物を取り込んでいるな。
for Debian
やってみようと思ったけどページの無駄なんで、 apt source openssh して、openssh_7.9p1-10+deb10u1.debian.tar.xzを展開すると出来るdebianの中を覗いてみてる。
changelogにバグチケットを終了したとか、残してある。
openssh (1:7.9p1-10+deb10u1) buster-security; urgency=high * Apply upstream patch to deny (non-fatally) shmget/shmat/shmdt in preauth privsep child, coping with changes in OpenSSL 1.1.1d that broke OpenSSH on Linux kernels before 3.19 (closes: #941663). -- Colin Watson <cjwatson@debian.org> Sun, 06 Oct 2019 19:18:07 +0100
controlとか言うファイル内
Source: openssh Section: net Priority: standard Maintainer: Debian OpenSSH Maintainers <debian-ssh@lists.debian.org> Build-Depends: autotools-dev, debhelper (>= 9.20160709~), dh-autoreconf, dh-exec, dpkg-dev (>= 1.16.1~), libaudit-dev [linux-any], libedit-dev, libgtk-3-dev <!pkg.openssh.nognome>, libkrb5-dev | heimdal-dev, libpam0g-dev | libpam-dev, libselinux1-dev [linux-any], libssl-dev (>= 1.1.0g), libsystemd-dev [linux-any], libwrap0-dev | libwrap-dev, pkg-config, zlib1g-dev (>= 1:1.2.3),
こんな定義が、しっかり書いてあったぞ。ここには、インストール情報とかも置いてあるのね。
debパッケージ作成方法をステップバイステップでまとめました
for OpenBSD
最初、所定の場所(/usr/src/usr.bin/)にソースを展開すべきかプチ悩んだけど、男は度胸って事で /tmpに展開してみる事にした。ここRAMDISKですから、SSDを傷める心配もなく、好き放題出来ます。
ob$ ls -l | egrep '^d' drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 moduli-gen drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 scp drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 sftp drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 sftp-server drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh-add drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh-agent drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh-keygen drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh-keyscan drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh-keysign drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 ssh-pkcs11-helper drwxr-xr-x 2 sakae wheel 512 Oct 9 09:39 sshd
ソース群と、それぞれのコマンドを生成する為のMakefileが格納されたdir群があります。色々なファミリーが有るんですなあ。そんじゃ、試しにコンパイル。
ob$ cd ssh ob$ make : cc -O2 -pipe -I/tmp/ssh/ssh/.. -fstack-protector-all -DWITH_OPENSSL -DENABLE_PKCS11 -DHAVE_DLOPEN -Wall -Wextra -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wpointer-arith -Wshadow -Wstrict-prototypes -Wunused -Wno-unused-parameter -Wstrict-aliasing=2 -Wold-style-definition -MD -MP -c /tmp/ssh/ssh/../ssh-pkcs11.c cc -o ssh ssh.o readconf.o clientloop.o sshtty.o sshconnect.o sshconnect2.o mux.o atomicio.o authfd.o compat.o dns.o fatal.o hostfile.o msg.o readpass.o utf8.o sshbuf.o sshbuf-getput-basic.o sshbuf-misc.o ssherr.o log.o xmalloc.o misc.o dh.o kexdh.o kexecdh.o kexgex.o kexc25519.o smult_curve25519_ref.o kexgen.o kexsntrup4591761x25519.o sntrup4591761.o kexgexc.o sshkey.o cipher.o cipher-chachapoly.o chacha.o poly1305.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o sshbuf-getput-crypto.o digest-openssl.o ssh-ed25519.o sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o authfile.o bitmap.o krl.o channels.o monitor_fdpass.o nchan.o ttymodes.o canohost.o dispatch.o hmac.o kex.o mac.o packet.o umac.o umac128.o addrmatch.o match.o ssh-pkcs11.o -lcrypto -lutil -lz
あっけなく作成完了。早速動作試験。
ob$ ./ssh -V OpenSSH_8.1, LibreSSL 2.9.1 ob$ ./ssh localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. : Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. sakae@localhost's password: Last login: Mon Oct 14 16:11:37 2019 from xxx.xxx.xxx.xxx OpenBSD 6.5 (GENERIC.MP) #5: Thu Aug 29 20:38:30 CEST 2019
無事に動いてますなあ。この調子で族をコンパイルしまくり、所定の位置にコマンドを置けば、バックポートが完了します。まあ、やってもいいけど、後少しすれば新しいOpenBSDが出てきますからねぇ。
OpenBSDのサイトに6.6の箱が出来て、パッケージの搬入が始まったな。もうすぐですよ。emacs 26.3がやって来るのは。