なんかてきとうに

わりと個人的な忘備録的ですよ。

GNS3 VM を proxy環境でupgrade

/etc/apt/apt.conf に proxy設定をする

Acquire::http::proxy "http://proxy.example.com:8080";
Acquire::https::proxy "http://user:password@proxy.example.com:8080";
Acquire::ftp::proxy "http://proxy.example.com:8080";

普通に環境変数

export http_proxy="http://proxy.example.com:8080"

等とやっても利用されない。

またこれだけだと失敗するので 上記状態でUbuntuのアップデートが終わったら Ctrl+Cなどでいったんshellに戻って

sudo pip3 install --proxy=http://proxy.example.com:8080 --pre --ignore-installed gns3-server

とやってインストールする必要がある。 その後、再起動すればバージョンアップされているのが確認できる。

Let's Encrypt を Windows Apacheで使ってみる。

無償で利用できるSSL証明書発行サービス Let's Encryptがpublic betaになったので試してみます。

なお、作業はWebサーバ上で行いましょう。

Windows用クライアントはletsencrypt-win-simple というのをgithubで公開されてる方がいますのでこれを利用しましょう。

IISなら何も考えずにいけるっぽいですが(IIS使ってないので知りません)。

何はともあれ、ダウンロードして解凍します。 別途.NetFramework4.0以上が必要なのでまだインストールしてなければインストールしておきましょう。

解凍して出てきたletsencrypt.exeを実行します。

Enter an email address (not public, used for renewal fail notices):

最初にこんな感じでE-mailを聞かれるのでちゃんと受け取れるメールアドレスを入力しましょう。

その後、

Do you agree to https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf? (Y/N)

利用規約に同意しますか?と聞かれますので、読んで問題なければYと入力し、同意しましょう。

Scanning IIS 7 Site Bindings for Hosts
 IIS Version not found in windows registry. Skipping scan.
No targets found.

 M: Generate a certificate manually.
 A: Get certificates for all hosts
 Q: Quit
Which host do you want to get a certificate for:

あとはIISがないとこんな感じで、 手動で生成しますか?みたいなことを聞かれますので Mを入力して手動で証明書の生成を行うようにしましょう。

Enter a host name:

ドメイン名を入力して。

Enter a site path (the web root of the host for http authentication):

apacheの設定ファイルに記載されている DocumentRootを記載します。

すると、認証用のファイルがDocumentRoot以下に設置されて、向こうからそこにアクセスが来て、アクセスができれば 認証されて秘密鍵、公開鍵証明書、中間CA証明書が
c:\Users\user名\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\
以下に現れます。
ドメイン名-key.pem
ドメイン名-crt.pem
ca-XXXXXXX.pem
あとはこれをapacheSSL設定に

SSLCertificateFile "path-to ドメイン名-crt.pem"
SSLCertificateKeyFile "path-to ドメイン名-key.pem"
SSLCertificateChainFile "path-to ca-XXXXXXX.pem"

とやってあげれば大丈夫です。 apacheを再起動してアクセスしてみましょう。

BIND 2

設定ファイルの置き場所とかその他。

CentoOSとDebianでは設定ファイルの置く場所などがいろいろ異なる感じです。

ディストリビューションごとの差異が出てる感じですね。

CentOSでは

/etc/named.conf

を基本として、

/etc/named/

以下にnamed.hoge.zones

などを配置してリソースレコードは

/var/named/naemd.example.com  
/var/named/named.192.168.0

みたいな感じで配置するようです。

Debianでは

/etc/bind/named.conf
/etc/bind/named.conf.options
/etc/bind/named.conf.example.com-zones

のような感じで配置して

リソースレコードも同一ディレクトリに

/etc/bind/db.example.com
/etc/bind/db.192.168.0

みたいな感じで配置するようになっています。

通常の運用では主として変更を加えるのはリソースレコードになると思いますので

CentOSではそこを明示的に分けて管理する手法ですね。

一方Debianではファイルのプレフィックスをdb.とすることで分けているような。

このあたりが思想の違いかなぁと思います。

chrootの方法

chrootの方法も違って。

CentOSでは named-chrootというchroot用のサービスが存在します。

named-chrootが何をやっているかというと、 chrootディレクトリに各種必要ファイルをマウントしてそこを起点にbindを実行するようなことを行っています。

named-chroot.serviceの実行時にマウント動作を行うので、設定変更についてはchroot先のことを全く意識しなくて良いようになっています。追加のnamed.conf関連ファイルを

/etc/named/

ディレクトリ以下に置くのはそのためです
( /etc/named.confとか /etc/named*なファイルはマウントファイルとしてハードコードされているので新規に作る設定ファイルは/etc/named/以下に置かないとchroot環境では使えない)

Debianではわざわざchroot用のサービスを定義するようなことはしておらず、

chroot用ディレクトリに自分でファイルを配置しましょうというやり方です。
そのため /etc/bindを chroot用ディレクトリに移動させて /etc/bindにシンボリックリンクを張る運用を標準としています。

どっちが良いんだろうなぁ

chrootで使う時と chrootせずに使う時みたいなのがあるんだとすれば、CentOSのやり方のほうがうまいんでしょうね。

設定ファイルの配置については

CentOS
/etc/named.conf , /etc/named/*
みたいなことになるんならいっそ /etc/named/named.conf にしてくれれば……と思わなくもないです。
/etc/にメイン設定ファイルを置いて、サブディレクトリにその他のコンフィグを置くのがRedHat流なんでしょうね。

mklinkでシンボリックリンク(管理者権限いらず)

windows vista くらいからある mklinkによるシンボリックリンクの作成機能ですが、 標準では管理者権限がないと作成できません。

その理由はどうやらシンボリックリンクを正しく理解できないアプリケーションがあり、 それらがシンボリックリンクを使用することによるセキュリティ上の懸念があるためのようです。

シンボリックリンクの作成には SeCreateSymbolicLinkPrivilege という権限が割り当てられています。 これについての権限設定は ローカルセキュリティーポリシー ユーザ権利の割り当て シンボリック リンクの作成

と辿っていくと設定できます。 標準では Administrators のみが許可されています。 ここに Users などを追加すると標準ユーザでもシンボリックリンクが作成できます。

これでWindows7まではUsersグループに入ってさえいれば作成できますが Windows8移行はAdministratorsグループに入っているとやはり管理者権限が必要となります。 UACをオフにすればよいのですが……

これは管理者権限でシンボリックリンクを作成すると、当然、管理者にしかアクセスできないようなところへもシンボリックリンクが作成できてしまうため、 セキュリティ上の懸念があるためではないかと思います。

なのでWindows8移行でAdministratorsでシンボリックリンクを作る際は cmdを"管理者として実行"しましょうという点は変わりません。

BIND

BINDを触ってみる。

そもそもBINDとは

BINDとはLinuxで使用されている有名なDNSサーバ。
権威サーバとしての機能とキャッシュサーバとしての機能を持っている。
またchrootで実行でき、セキュリティに配慮されている。
その他、DNSsecなどのセキュリティ関連機能も使用できる。

DNSとは

DomainNameSystemの略。
Domain名とIPアドレスの相互変換をするためのもの。
これのおかげで各Webサイトにアクセスするときなどにわかりにくくまた、変更される可能性があるIPアドレスを用いずにアクセスできている。

BINDのインストール

BINDは有名なので各種パッケージシステムから直接インストールできる。

CentOS7

yum install bind bind-chroot bind-utils

Debian8

apt-get install bind9 dnsutils

なお、bind-utilsやdnsutilsは必須ではないが、ないとdigやnslookupなどの確認コマンドが使用できない。

chroot

セキュリティのことを考えると外部に公開するサービスはchrootで利用したい。
BINDはchrootに対応しているため、各種設定を行うことでchroot環境にて使用できる。
ここではchroot先として/var/named/chroot/を想定している。
CentOS7は bind-chrootというchrootにするためのパッケージが用意されているのでお手軽です。 debianについてはBind9 - Debian Wikiにやり方が記載されています。

CentOS7

/usr/libexec/setup-named-chroot.sh /var/named/chroot/ on

Debian8

  1. /lib/systemd/system/bind9.service を編集する。
    ExecStart=/usr/sbin/named -f -u bind -t /var/named/chroot/
    と -t に続けてchroot先を指定するとchrootで動かせる。
    systemctl daemon-reload
    にて変更を有効化する。
  2. chroot環境の作成
    1. mkdir -p /var/named/chroot/{etc,dev,var/cache/bind,/var/run/named}
      にて必要なディレクトリを作成する。

    2. mknod /var/named/chroot/dev/null c 1 3
      mknod /var/named/chroot/dev/random c 1 8
      chmod 600 /var/named/chroot/dev/{null,random}
      にて/dev/nullと/dev/randomを作成する。

    3. mv /etc/bind /var/named/chroot/etc
      ln -s /var/named/chroot/etc/bind /etc/bind
      とbind関連ファイルをchroot環境下へ移動させたあと、元の場所へシンボリックリンクを作成する。

    4. syslogなどでタイムゾーン情報が必要であれば
      cp /etc/localtime /var/named/chroot/etc/
      のようにタイムゾーン情報をchroot環境へコピーする。

    5. chown -R bind:bind /etc/bind/*
      chmod 775 /var/named/chroot/var/{cache/bind,run/named}
      chgrp bind /var/named/chroot/var/{cache/bind,run/named}
      にて各種ファイルの所有者情報やパーミッションを変更する。

    6. 最後に、必要があればsyslog設定を変更する。
      echo #\$AddUnixListenSocket /var/named/chroot/dev/log > /etc/rsyslog.d/bind-chroot.conf

Windows Vagrant VirtualBoxでdebian8なbase boxとかつくってみたはなし

やり方は本家のマニュアル見ましょう。

  1. vagrantのインストール。
    インストール後、pathが通ってなければ通しましょう。
  2. sshのインストール
    msys2とかMinGWとかcygwinとかなんでも(pathを通しましょう)
    注意)msys2とかcygwinからwindowsvagrantを使うときは
    .bash_profile とかに export VAGRANT_DETECT_OS=cygwin
    とやっておかないとttyありませんみたいに言われます。
  3. VirtualBoxのインストール。
  4. VirtualBoxへのdebian8インストール
    HW設定にて オーディオとUSBサポートを無効
    名前をたとえばdebian8に
    rootのパスワードは vagrant
    ユーザ vagrant パスワード vagrant でユーザを作る
  5. VirtualBox Guest Additionsのインストール
    apt-get install gcc
    apt-get install linux-source
    apt-get install dkms
    メニューのデバイスからGuest Additions CDイメージの挿入
    mount -r /dev/sr0 /mnt/
    /mnt/VBoxLinuxAdditions.run
  6. debian8の設定
    apt-get install sudo
    sudoers 行追加
    (vagrant ALL=(ALL) NOPASSWD: ALL )
    vagrantユーザへ authorized_keys配置。 apt-get install curl
    mkdir ~/.ssh curl -o ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub chmod 700 .ssh
    chmod 600 authorized_keys
  7. box化
    vagrant package --base debian8(VirtualBoxでつけた名前)
    package.box という名前で作成される
  8. vagrantにとりこみ (ここではbaseにしてるけど任意の名前にできる)
    vagrant add box base package.box
  9. vagrantで使ってみる
    適当なディレクトリで
    vagrant init (add box でbase以外を指定した場合はここにその名前を入力)
    vagrant up
  10. vagrantfile
    config.vm.network "private_network", ip: "192.168.565.10"
    とかやるとIPアドレス固定できる

vmstatに日時を付ける

vmstatに日時を付ける - いろいろつまみ食い という記事があったので

rubypythonでも書いてみよう!と。

ruby

begin  
  while line = gets  
    puts Time.now.strftime("%Y/%m/%d %H:%M:%S ") + line  
  end  
rescue KeyboardInterrupt => e  
  exit  
end

python

try:
    for line in iter(sys.stdin.readline,""):
        print datetime.strftime(datetime.now(),"%Y/%m/%d %H:%M:%S "),line.rstrip()
except KeyboardInterrupt:
    exit()

ただそれだけなんですけどね。
perlのdefineみたくいい感じのがあればよかったのだけれど見つけられなかったので

exceptionをキャッチする方向に。