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
- /lib/systemd/system/bind9.service を編集する。
ExecStart=/usr/sbin/named -f -u bind -t /var/named/chroot/
と -t に続けてchroot先を指定するとchrootで動かせる。
systemctl daemon-reload
にて変更を有効化する。 - chroot環境の作成
mkdir -p /var/named/chroot/{etc,dev,var/cache/bind,/var/run/named}
にて必要なディレクトリを作成する。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を作成する。mv /etc/bind /var/named/chroot/etc
ln -s /var/named/chroot/etc/bind /etc/bind
とbind関連ファイルをchroot環境下へ移動させたあと、元の場所へシンボリックリンクを作成する。syslogなどでタイムゾーン情報が必要であれば
cp /etc/localtime /var/named/chroot/etc/
のようにタイムゾーン情報をchroot環境へコピーする。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}
にて各種ファイルの所有者情報やパーミッションを変更する。最後に、必要があればsyslog設定を変更する。
echo #\$AddUnixListenSocket /var/named/chroot/dev/log > /etc/rsyslog.d/bind-chroot.conf
Windows Vagrant VirtualBoxでdebian8なbase boxとかつくってみたはなし
やり方は本家のマニュアル見ましょう。
- vagrantのインストール。
インストール後、pathが通ってなければ通しましょう。 - sshのインストール
msys2とかMinGWとかcygwinとかなんでも(pathを通しましょう)
注意)msys2とかcygwinからwindowsのvagrantを使うときは
.bash_profile とかに export VAGRANT_DETECT_OS=cygwin
とやっておかないとttyありませんみたいに言われます。 - VirtualBoxのインストール。
- VirtualBoxへのdebian8インストール
HW設定にて オーディオとUSBサポートを無効
名前をたとえばdebian8に
rootのパスワードは vagrant
ユーザ vagrant パスワード vagrant でユーザを作る - 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 - 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 - box化
vagrant package --base debian8(VirtualBoxでつけた名前)
package.box という名前で作成される - vagrantにとりこみ (ここではbaseにしてるけど任意の名前にできる)
vagrant add box base package.box - vagrantで使ってみる
適当なディレクトリで
vagrant init (add box でbase以外を指定した場合はここにその名前を入力)
vagrant up - vagrantfile
config.vm.network "private_network", ip: "192.168.565.10"
とかやるとIPアドレス固定できる
vmstatに日時を付ける
vmstatに日時を付ける - いろいろつまみ食い という記事があったので
begin
while line = gets
puts Time.now.strftime("%Y/%m/%d %H:%M:%S ") + line
end
rescue KeyboardInterrupt => e
exit
end
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 にあります。 一応書いておくと
ダウンロードしたファイルを任意の場所に解答
中のsetup-ssh-lsa.cmdを管理者として実行
再起動
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_keysshdを起動
以上で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とかつくってみたはなし
やり方は本家のマニュアル見ましょう。
- vagrantのインストール。
インストール後、pathが通ってなければ通しましょう。 - sshのインストール
msys2とかMinGWとかcygwinとかなんでも(pathを通しましょう)
注意)msys2とかcygwinからwindowsのvagrantを使うときは
.bash_profile とかに export VAGRANT_DETECT_OS=cygwin
とやっておかないとttyありませんみたいに言われます。 - VirtualBoxのインストール。
- VirtualBoxへのCentOS7インストール
HW設定にて オーディオとUSBサポートを無効
名前をたとえばCentOS7に
rootのパスワードは vagrant
ユーザ vagrant パスワード vagrant でユーザを作る - 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 - 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 - box化
vagrant package --base CentOS7(VirtualBoxでつけた名前)
package.box という名前で作成される - vagrantにとりこみ (ここではbaseにしてるけど任意の名前にできる)
vagrant add box base package.box - vagrantで使ってみる
適当なディレクトリで
vagrant init (add box でbase以外を指定した場合はここにその名前を入力)
vagrant up - 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ユーザでやっているっぽいです。