2016年9月23日金曜日

Xspice + virt-viewer でインターネット分離?

巷では「インターネット分離」ってのが流行しているようで。

単に VDI で Windows すれば良いというのだと思うんだけど、思いの外 VDI はコス
ト高のようで、なんとか安く出来ないかっていう悩みもちらほら聞いたりする。

すると、次に考えるのが無償 OS 使えってんで矢面に立つのが最近は Ubuntu だそ
うで。どうも私は Ubuntu が嫌いであんな激重な Linux を良く使える気になるなと。

それは置いておいて、じゃぁその無償 OS 上で動かした Web ブラウザの画面をユー
ザの手元の Windows クライアントに表示しようと考えた時、ロートルの私としては
たいてい Windows に Cygwin なりで X Server をインストールして、X の画面だけ
飛ばすって方法。

しかし昨日のブログにも書いたが、これがどうも firefox や chrome だと激重なん
だよね。xcalc とか xclock だったらサクサク動くんだけどね(当たり前だけど)。
ssh の X11Forwarding で、-C で圧縮して -c でアルゴリズムを圧縮率の高いものに
指定すると多少速くなるんだが、エンタープライズ的な運用に乗るレベルじゃない
んだよね。

じゃぁ、VNC なり SPICE なりでターミナルごと画面飛ばしした方が速いんじゃな
いか、などと考えて行き着いたのが Xspice。

Xspice なら、OS が上がった状態でユーザ別に独立して Xspice のプロセスを動か
すことが出来るので(ユーザ毎別ポートで)、1 台のマシンに remote-viewer から
複数人接続できる。

起動はこんな感じ。

Xspice --port 5901 :1.0 --disable-ticketing 

これで remote-viewer spice://x.x.x.x:5901 につなぐと真っ黒画面が出るので、
Xspiceを起動している側でさらに DISPLAY=:1.0 firefox などとすると、
remote-viewer 側にfirefox 出現。これが X で画面飛ばすよりも速い。

Xspice のオプションに --xsession /usr/bin/gnome-sesson などとすると、
gnome が上がるらしいが、手元の環境だと立ち上がらない。

ということで上記コマンドを忘れそうなのでメモりたいがためにこのブログ
を書きました。まぁ、これをエンタープライズ用途で使えるようにするにはま
だハードルはいっぱいありそうです...







2016年9月22日木曜日

startx の Xorg で 6000 を Listen させる

何年ぶりかで手元の Fedora で startx で起動した X サーバにリモートの画面を表示させ
ないといけない状況になった。
ssh  の -X とか -Y じゃなくて、生の X プロトコルで。
かなりレガシィなお題なので余裕かましてたらハマったのでメモ。

とりあえず xhost + して、リモート側に DISPLAY 変数設定してリモートで
firefox 起動。普通に firefox の画面が出るかと思ったら、あれ?出ない。

昔だったら普通にできたよねぇ、、、と思いつつ ss -tan したら 6000 LISTEN が無い。 
しかも ps すると Xorg に -nolisten tcp がついてる。

あぁ、そういや startx になんかオプション必要だったっけ。と、/usr/bin/startx を読み解
くと「--」のあとに -listen をつければ良いらしいと。

startx -- -listen

これで -nolisten 消えたろうと ps したらまだついてる。まさか...
 $ which startx
alias startx='/usr/bin/startx -- -nolisten tcp'
    /usr/bin/startx
なんだよそれ。とりあえず \startx -- -listen で起動したら -nolisten 消えたぞと。
これで良いだろうと思いまたリモートから firefox 起動したけど X に接続できないエラー。
また ss -tan したら 6000 LISTEN してないじゃん。えーー?
「Xorg -listen tcp」で確認したら 6000 は LISTEN できてる。
んーーー、こりゃ startx の問題だなぁと。

なんやら、/usr/bin/startx の中を見ると、~/.xserverrc がそのまま X のサーバとして
実行されてるので、ここにいろいろ書いてみた。
 #!/bin/sh
 /usr/bin/Xorg -listen tcp
しかし parse_vt_settings: Cannot open /dev/tty0 (No such file or directory)
などというエラー。もう面倒なのでこれを手がかりにググる。

 https://bbs.archlinux.org/viewtopic.php?id=205959

上記発見。~/.xserverrc を以下の内容にしてやっとのことで 
 #!/bin/sh
exec /usr/bin/X -listen tcp vt${XDG_VTNR} "${@}"
いやいや、なんだか基本的なことなのにトラップが多かったなぁ。
しかし X で飛ばした firefox の遅いこと。これはまた後で調べよう...




2016年9月10日土曜日

うちのドアの調整


子供が怪力でドアをガタガタやってしまい、閉めるときにドアが枠に当たるようになってしまった。その直し方を忘れそうなのでメモ。

うちのドアの場合、蝶番が上の写真のようになっていて、これを簡単に調節できるらしい。

まず 1 の「固定ネジ」を六角で緩める。その後 2 のネジを回すことにより蝶番側に倒すか、ラッチ側に倒すかを設定できる。ラッチってのは、ドアノブの横のガチャガチャ出
たり入ったりするところのこと。

今回、ドアノブ側の枠に当たるようになってしまったので、2 のネジを丁番側(写真右方向)に回して調整。

その後 1 を閉めて終わり。


2016年9月3日土曜日

サーバ引越し

本日、自分ちのサーバを webkeepers から vultr に乗り換えました。

2016年9月2日金曜日

pam_unix.so が NSS 見てる

以下、完全に自分のためのメモ。

恥ずかしながら、PAM と NSS は独立しているのだとばかり思いこんでいた。
例えば、PAM で認証して OK だったら NSS から passwd 情報等持ってくる的な..

が、ふと、
独立してるなら pam_mkhomedir なんかはどうやってホームディレクトリ取得してるん?NSS 経由していないん?
とか、
agetty でログインしたとき、パスワード入れる前に知らんユーザだと蹴られるよね、
あれって NSS を最初に持ってきてるんじゃないん?

とか、思い始め、あ、これもしかして間違って覚えてる?となった。

簡単な実験をしてみた。sss で LDAP 認証可能な Linux マシンにおいて、sssd.conf で
sssd_nss を起動しないよう(sssd_pam だけ起動する)に設定。で LDAP にいるユーザ
で ssh から認証をかけてみる。
自分の予想的には、パスワード認証は通るけど uid や loginShell が取れなくて蹴られる
的な動きをするんだろうと /var/log/secure を見てたら、違う。

  Failed password for invalid user user1

などと、ユーザがいない時と同じエラー。じゃぁ、/etc/pam.d/password-auth で
pam_unix.so や pam_env や pam_localuser (今回は関係ないけど)を auth からコメント
アウトしてみたが、何も変わらず。これはおそらく ssh が独自に PAM の前に NSS を見
てるんじゃ無かろうかと(推測)。

じゃぁ、getty で試してみるということで。とりあえず sssd.conf は pam と nss の
サービスを起動するように設定。/etc/nsswitch.confで、passwd, group, shadow から
sss を取り去り nss だけ LDAP 通信しないようにしてみる。もちろん /etc/pam.d/system-auth
は、auth pam_sss と account pam_sss の設定は残してあって、他は細工してない。

すると、agetty のログインプロンプトで ID 入力して Enter しただけで
「Login incorrect 」 のエラーが。パスワードすら入れさせてもらえない。
/var/log/secure には以下のエラーが。

 login: FAILED LOGIN 1 FROM tty1 FOR (unknown), User not known to the underlying authentication module


じゃぁ、この状態で /etc/pam.d/system-auth をいじってみようと。まず、auth の
pam_unix.so の行をコメントアウトしてみる。んで agetty からログイン。
するとですね、ログインは失敗するものの、/var/log/secure の中には auth の pam_sss
がちゃんと認証してくれたメッセージが。


 Sep  2 03:05:34 client login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=user1
 Sep  2 03:05:34 client login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=user1
Sep  2 03:05:34 client login: pam_unix(login:account): could not identify user (from getpwnam(user1))
Sep  2 03:05:34 client login: User not known to the underlying authentication module

system-auth から auth の pam_unix.so 行をコメントして上記メッセージが出るよう
になったということは、やっぱり pam_unix.so が NSS を見てるんだなと 90% くらい
確信。んで、/etc/nsswitch.conf の passwd, group, shadow に sss を戻してみる。
するとやっぱり問題なく認証された。

ちなみに、system-auth の auth と account の pam_unix.so をコメントアウトして
また nsswitch.conf から sss を排除してやってみると以下のようなエラー。

Session setup problem, abort.

/var/log/secure には以下のようなエラーが。

Sep  2 03:13:05 lient login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=user1
Sep  2 03:13:05 client login: Invalid user name "user1" in main:1229. Abort.

これこれ。最初に推測してた動き。pam_unix.so によるユーザ存在チェックが無ければ、
ちゃんと認証してから session で蹴られてる。

というわけで、おそらく pam_unix.so は NSS を介してユーザ存在チェックをしている
ということで(独自実装ではないということで)。