なんかてきとうに

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

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をキャッチする方向に。

PowerShell/Win32-OpenSSH/ を触ってみたよ

microsoftがOpenSSHをサポート! という話から 10/13づけでとりあえず動くバイナリが出てましたのでちょっと触ってみました。

ダウンロードは PowerShell/Win32-OpenSSH · GitHub のreleaseから。 インストール方法は Deploy Win32 OpenSSH · PowerShell/Win32-OpenSSH Wiki · GitHub にあります。 一応書いておくと

  1. ダウンロードしたファイルを任意の場所に解答

  2. 中のsetup-ssh-lsa.cmdを管理者として実行

  3. 再起動

  4. ファイルを解凍した場所でコマンドプロンプトを開く
    もしくはコマンドプロンプトを開いた後、解凍した場所へ移動

  5. ssh-keygenで4種類のssh_host_keyを作るパスワードはなしで。(別に1個だけでもいいけどなんか警告が出る)
    ssh-keygen.exe -t rsa -f ssh_host_rsa_key
    ssh-keygen.exe -t dsa -f ssh_host_dsa_key
    ssh-keygen.exe -t ecdsa -f ssh_host_ecdsa_key
    ssh-keygen.exe -t ed25519 -f ssh_host_ed25519_key

  6. sshdを起動

以上でsshdが動かせます。

今回はローカルで試したのでローカルホストに接続してます。

クライアント側は ssh localhost でつなげると、パスワードを聞かれるので入力するとつながります。

つないだ先はpowershellかと思ったらどうもcmd.exeっぽく。

どこかにshell変更する設定ファイルがあるのかも。

で、ここからが挙動の話。

  • コマンド打つと、コマンド名が2回表示されます。自分の打ったのと合わせて3つ。
  • 存在しないコマンドを打つと、帰ってきたプロンプトに"そんなコマンドありません"的なメッセージがかぶります。
  • powershellを動かすと sshdが動いてるところでpowershellが動きます。 sshdが動いてるほうでpowershellを終了するまで応答が帰ってきません
    この件についてはwikiに書いてありました。
    powershell -File -
    とやるとpowershell使えます。
  • cmd.exeは普通にsshでログインしたプロンプトで動いてくれます。
  • sshdを動かしたあと、ログインされるとCtrl+C等でsshdが終了できなくなるのでtaskmanagerのお世話になる必要があります。(プロセス強制終了)
  • sshクライアントは Enterキーを押すまでキー入力を送ってくれないっぽいです。
  • 上記のことから、tab補完とかききません。

とりあえずさらっと触ってみたところこのくらい。

Enterキーを押すまでキー入力を送ってくれないっぽいので、 ssh した先でさらに sshしたりすると パスワードが*にならずそのまま表示されます。

これはさすがによろしくないのでは。

Windows Vagrant VirtualBoxでCentOS7な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へのCentOS7インストール
    HW設定にて オーディオとUSBサポートを無効
    名前をたとえばCentOS7に
    rootのパスワードは vagrant
    ユーザ vagrant パスワード vagrant でユーザを作る
  5. VirtualBox Guest Additionsのインストール
    yum install bzip2
    yum install gcc
    yum install kernel-devel-(バージョン).x86_64
    yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarc.rpm
    yum install dkms
    メニューのデバイスからGuest Additions CDイメージの挿入
    mount -r /dev/sr0 /mnt/
    /mnt/VBoxLinuxAdditions.run
  6. CentOS7の設定
    sudoers 行追加
    (1 vagrant ALL=(ALL) NOPASSWD: ALL )
    (2 Defaults:vagrant !requiretty)
    (3 Defaults:root !requiretty)
    vagrantユーザへ authorized_keys配置。
    chmod 700 .ssh
    chmod 600 authorized_keys
    いらないファイルの削除
    /etc/sysconfig/network-scripts/ifcfg-e*
    /etc/udev/rule.d/70-persistent-net.rules
  7. box化
    vagrant package --base CentOS7(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アドレス固定できる

(追記 sudoersへ3行目の追加。
vagrantfileに
config.vm.provision "shell", inline: <<-SHELL
sudo rpm -i /vagrant/some.rpm
SHELL
みたいなことをやったらttyがないとsudoできませんと怒られました。

provisionはrootユーザでやっているっぽいです。