このブログを検索

2013-06-30

Ubuntu12.04のインストールとSamba 4でActive Directory構築

久しぶりにUbuntuを再インストールしてみた。
以前RAID1によるHDD二重化をしていたけどそのうち片方が壊れた。
HDD追加で買うほど大切なデータも入れてないのでRAIDは今回はやめた。
代わりに、以前はUbuntuのバグか何かでうまくいかなかったLVMを使ってみた。

とりあえずインストール時に注意する要素として以前と同じく
・AdvancedFormatTechnologyのHDD
・AFTとなんだか相性の悪いマザーボード
・今のHDDだと微妙に2TB以下らしく標準インストールだとパーティションテーブルがGPTにならずMSDOSになる

といったところ。IntelliPark問題は前回対応済なので不要。
最近のUbuntuはAFTに対応しているっぽいけど、
GPTを使いたいがためにパーティショニングを手動で行う。

GPT周りについてのメモ
GRUBをMBRにインストールした場合、追加でBIOSブートパーティション/予約済み BIOS ブート領域(bios_grubフラグのたったパーティション)に情報を保存する。
もしなければ/bootの情報を使おうとする。そうすると何らかの原因でブートができなくなる可能性があるらしく、BIOSブートパーティションを設けたほうがいいらしい。
BIOSブートパーティションは最低31KB必要らしく、通常は多めに1MBほど確保される。
UbuntuではこれがないとGRUBインストールに失敗するとの情報あり。
RAID1を構築した場合、bios_grubはOSインストール後に手動でミラーにインストールするのが良さそう。

今回は関係ないけど/bootのメモ
/bootパーティションには起動するための情報が格納される。なければ/に格納される。
これは基本的にはRAIDの外に出さないといけないが、RAID1ははやくから対応されている。
RAID1の時、縮退すると起動できなくなってしまうので、/bootもRAIDに載せるほうがよいらしい。
ついでに、LVMの上に/bootを載せるのは少なくともうちの環境では動かないっぽい(RAIDは未確認

パーティショニングに関して参考にしたサイト
http://www.linuxmania.jp/raid_md_grub.html
http://www.ibm.com/developerworks/jp/linux/library/l-grub2/


で、OS入れる際にまたまたなかなかうまく行かなかったので色々実験結果をメモしとく。
インストール&起動の結果
◆MSDOS&RAIDなし&LVMなし→OK
◆GPT&RAIDなし&LVMなし→OK
◆GPT&RAIDあり(/bootと/)&LVMなし→NG(一瞬起動メニューが出て先に進むけど真っ黒の画面で止まる)
◆GPT&RAIDあり(/)&LVMあり(/)→成功?(起動しかけたところで単独RAIDが原因っぽいエラーが発生)

AFT&LVM&RAIDあたりの注意事項について細かく記載のあるサイトがあったのでメモ
http://green-rabbit.sakura.ne.jp/blog/2010/11/27/2191/
※意味がよくわからなかったので今回は気にしないことにした


AdvancedFormatTechnology対応したパーティショニングをGPartedで行う

注意としては、流用したHDDだと前の情報が残っていたりするっぽいので、適当なフォーマットと適当なラベル付を行う。

http://gparted.sourceforge.net/からGparted Live"gparted-live-0.16.1-1-amd64.iso"をダウンロードしてCDに焼く。
ディスクを入れて起動
  1. ・・・Live・・・
  2. Don't touch keymap
  3. 15: Japan
  4. 0) COntinue to start X to use GParted automatically
  5. 右上の/dev/・・・から操作したいHDDを選択、今回は"/dev/sda"
  6. メニュー→デバイス→パーティションの作成→詳細→[新しいパーティションテーブルの形式を選択]"gpt"→"Apply"
  7. まず、gpt用のgrub用領域を1MB分作成する。
  8. 未割り当てを選択→New→前方の空き領域"1"、新しいサイズ"1"MiB、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"grub"
  9. 次に、ブート用の領域を256MB分作成する。
  10. 未割り当てを選択→New→前方の空き領域"0"、新しいサイズ"256"MiB、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"boot" RAID化しておけば片方のHDD異常でも起動ができるらしい。
  11. 次に、スワップ領域をディスクの末尾に作成する。メモリが2GBでそれより多めにとる。
  12. 今回はとりあえず3GBととする。 未割り当てを選択→New→新しいサイズ"3072"MiB、後方の空き領域"0"、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"swap" なお、スワップ領域をRAID化する意味はないらしい。
  13. 最後に、それ以外のメイン部分の領域を残り全部で作成する。
  14. ただ、のちのち別HDDとRAID1化するので念の為少し小さめに数十MBくらい残しておく。 未割り当てを選択→New→前方の空き領域"0"、新しいサイズ"1904300"MiB、種類"基本パーティション"、ファイルシステム"ext4"※本来不要、ラベル"data"
  15. 念の為、これまで作成したパーティションを右クリックしてinformationから開始セクターを確認する。
  16. 8の倍数であることを確認する。
  17. ・・・確かApplyをクリックして適用。
  18. Exitをダブルクリックして終了。
今回はHDDひとつだったけど、RAID1用に複数あるなら全て同じようにパーティショニングする。


Ubuntu Server 64bit版をインストールする

http://www.ubuntu.com/server/から"ubuntu-12.04.2-server-amd64.iso"をダウンロードしてCDに焼く。
ディスクを入れて起動

インストール手順1(基本情報)

  1. [Language]画面"日本語"
  2. "Ubuntu Serverをインストール"
  3. [インストーラの翻訳は、選択された言語では完全ではありません]画面"はい"
  4. [場所の選択]画面"日本"
  5. [キーボードの設定]画面"日本語"→キーボードのレイアウト"日本語"
  6. [ネットワークの設定]画面の[このシステムのホスト名を入力して下さい]画面(ネットワーク手動設定のために)"戻る"→"ネットワークを手動で設定"→[IP address]任意入力"192.168.1.xxx"して"続ける"→[ネットマスク]任意入力"255.255.255.0"→[ゲートウェイ]任意入力"192.168.1.1"→[ネームサーバーアドレス]任意入力"192.168.1.1"→[このシステムのホスト名を入力して下さい]任意入力"ubuntu"→[ドメイン名]任意入力"mydomain"※他のドメイン名にあわせる
  7. [ユーザーとパスワードのセットアップ]画面の[新しいユーザーの本名]任意入力"TestUser"→[あなたのアカウントのユーザ名]任意入力"testuser"→[新しいユーザーのパスワードを選んで下さい]任意入力"xxxxxxxx"→[確認のため、再度パスワードを入力して下さい]先と同じ値を入力
  8. [ホームディレクトリを暗号化しますか]"いいえ"※持ち歩かない端末なので盗難は心配せず、パフォーマンス優先
  9. [時間の設定]画面で[your time zone is Asia/Tokyo]と出てるので[Is this time zone correct]"はい"

インストール手順2(パーティショニング)

概要としては、システム周りは先程パーティショニングした通りで、ルートなどはLVM上に構築していく。
あまり細かくはわけず、ルート(20GB)とホーム(残り)の2つに分ける。
ちなみにパーティションを遣り直したい際、論理ボリュームの削除ができない。
これは日本語のバグらしく、メニューを戻って言語からEnglishを選択すれば削除できるようになる。
  1. [ディスクのパーティショニング]画面→[パーティショニングの方法]"手動"
  2. [・・・sda・・・]の
  3. 1.(bios用領域)→
  4. [利用方法]"予約済みBIOSブート領域" [起動フラグ]"オフ"
  5. 2.(boot用)→
  6. [利用方法]"ext4" [パーティションの初期化]"初期化" [マウントポイント]"/boot" [起動フラグ]"オフ"
  7. 3.(swap用)→
  8. [利用方法]"スワップ領域" [起動フラグ]"オフ"
  9. 4.(rootなどその他用)→
  10. 論理ボリュームにするので触らない
  11. →"論理ボリュームマネージャの設定"→[LVM設定アクション]"ボリュームグループの作成"→[ボリュームグループ名]"vg0"→[新しいボリュームグループのデバイス]"/dev/sda4"(rootなど用)を選択して"続ける"
  12. →[LVM設定アクション]"論理ボリュームの作成"→[ボリュームグループ]"vg0"→[論理ボリューム名]"lv0"を入力して"続ける"→[論理ボリュームサイズ]任意入力"20GB"
  13. →[LVM設定アクション]"論理ボリュームの作成"→[ボリュームグループ]"vg0"→[論理ボリューム名]"lv1"を入力して"続ける"→[論理ボリュームサイズ]任意入力※残り全部※デフォルト値
  14. →[LVM設定アクション]"完了"
  15. →[LVM VG・・・lv0・・"の"1.・・・]を選択→
  16. [利用方法]"ext4" [マウントポイント]"/" [マウントオプション]"defaults"※デフォルト値 [ラベル]任意入力"root" [予約ブロック]"5%"※デフォルト値 [典型的な利用方法]"標準"※デフォルト値
  17. →"パーティションのセットアップを終了"
  18. →[LVM VG・・・lv1・・"の"1.・・・]を選択→
  19. [利用方法]"ext4" [マウントポイント]"/home" [マウントオプション]"defaults"※デフォルト値 [ラベル]任意入力"home" [予約ブロック]"5%"※デフォルト値 [典型的な利用方法]"標準"※デフォルト値
  20. →"パーティションのセットアップを終了"
  21. →"パーティショニングの終了とディスクへの書き込み"

インストール手順3(ソフトウェア周り)

  1. [taskselを設定しています]画面の[このシステムのアップグレードをどのように管理しますか"自動的にアップデートしない"
  2. [ソフトウェアの選択]画面"OpenSSH server","Mail server"
  3. [Postfix Configuration]画面の[メール設定の一般形式]"インターネットサイト"
  4. →[システムメール名]任意入力"ホスト名.ドメイン名"
  5. ※何入れればいいかわからん Samba入れたら ホスト名.ドメイン名、いれなかったらホスト名がデフォルト値だった
  6. [ハードディスクへのGRUBブートローダのインストール]画面の[マスターブートレコードにGRUBブートローダをインストールしますか]"はい"
  7. [インストールの完了]画面でディスクを抜き"続ける"


この時点で再起動すると、"No bootable device"と出て起動できない。
どうやら、マザーボード(BIOS)がUbuntuの作るGPTを読めていないらしい。
というのも、Ubuntuから見たGPTはブートフラグは関係しない不要な属性らしいけど、
マザーボードによってはブートフラグ前提で動いていて純粋なGPTに対応してなかったりするらしい。
というわけで、Live版のUbuntuからHDDに細工をしてマザーボードから読めるようにする。
起動さえすればあとはGRUBとかがうまくやってくれるらしい。
なお、この問題は10.XXから発生しているらしく、確かに以前10.XXがダメだったから9.10を入れた。
最近は対応策が発見されたらしい。

適当なパーティションに起動フラグセット

どこか適当なパーティションに起動フラグをセットする必要がある、今回の構成だとスワップ以外につけられるところがないのでスワップをONにする。 http://www.ubuntulinux.jp/download/ja-remixから"ubuntu-ja-12.04.2-desktop-i386.iso"をダウンロードしてCDに焼く。 ディスクを入れて起動する。
  1. "Ubuntuを試す"で起動してDash→検索"terminal"
  2. $ sudo fdisk /dev/sda
  3. [GPTをサポートしません・・・]とか言われるけど無視する。
  4. とりあえず状態を確認
  5. : p
    デバイス ブート 始点 終点 ブロック ID システム /dev/sda1 1 39070・・・ 19535・・・ ee GPT
  6. パーティションをアクティブにする
  7. "a"→"1"→"w"
  8. 終了
  9. $ sudo shutdown -h 0
OSインストールの手順は以上、次は初期セットアップ以降の手順を。

ついでに調べた事項のメモ、RAID1構成にしてインストールした時に以下のようなメッセージが出る場合について。
[Do you want to boot your system if your RAID becomes degraded?]

Yes を選ぶと、degraded 時に case.1
No を選ぶと、degraded 時に case.2

case.1
起動時に以下のメッセージが出て、そのまま起動します。
started the RAID in degraded mode.

case.2
起動時に以下のメッセージが出ます。
Do you wish to start the degraded RAID? [y/N]:

いいえが無難かなぁ。

参考
https://forums.ubuntulinux.jp/viewtopic.php?id=9232

初期セットアップ以降の手順

文字化け対策

$ vim ~/.profile
以下を追記
case $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8 ;;
esac
:wq
$ sudo shutdown -r 0
今後の新規ユーザーにも適用する
$ sudo vim /etc/skel/.profile
自分の.profileと同じ変更をする(動作未確認)


念の為IP確認

$ ifconfig
IPはinet addr:・・・のところ
MACアドレスはHWaddr・・・のところ


ネットワーク設定確認

$ more /etc/network/interfaces
address 192.168.1.xxx
netmask 255.255.255.0
network 192.168.1.0
broadcase 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-search mydomain


ソフトウェアアップデート

※今回はapt-getではなく、aptitudeを採用してみる
$ sudo aptitude update
$ sudo aptitude full-upgrade
$ sudo shutdown -r 0

以降、SSHクライアントから作業する
今回は、以前インストールしたPederosaからやる。
注意なのは、今後mysqlをインストールする際には直接コンソールからやること。
なぜかSSHクライアントからだと操作不能になる。


インストール作業に用いるソフトウェアインストール

$ sudo aptitude install zip


時計のセットアップ

9.04と比べて設定ファイル名が変わっていた
今回はNTPサーバー機能は入れない
$ sudo sed -i 's/NTPSERVERS="ntp.ubuntu.com"/NTPSERVERS="ntp.nict.jp"/g' /etc/default/ntpdate
$ sudo ntpdate -u ntp.nict.jp
ハードウェアの時計に反映
$ sudo hwclock -w
なお、手動で日時変更する場合は
$ sudo date 1129225808
これで2008/11/29 22:58:00になる


↓winbindはsambaの兄弟で、今回はsambaをソースからインストールする関係で念のため入れないでおく

Ubuntu→Windowsの名前解決

そのままだとUbuntuからWindowsの名前を解決できない。
Windowsと同じようにNetBIOSの名前解決ができるようにする。
winbindをインストールし、名前解決方法にwinsを追加するとできるようになる。
$ ping Windows機ホスト名
→だめ
$ sudo aptitude install winbind
$ sudo vim /etc/nsswitch.conf
hosts: files dns となっているところを
hosts: files dns wins にする
$ sudo /etc/init.d/winbind restart
$ ping Windows機ホスト名


FireWallのセットアップ

UbuntuのFireWallはiptablesで行われる。
簡単に操作するためのuwfというツールもある。

FireWall初期設定の確認
$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
何も設定されていない。
仕組みはよくわからないけど、何も触らなくてもインストールしたソフトは自動で使える、みたいな状態。
一度設定した以降は、ちゃんとポート設定しないといけないっぽい?

今回色々設定したけど記事の趣旨からは外れるのでここでは説明しない。
多分そのままでも動作はするはずで、だめなら必要に応じて設定すればよい。


postfixによるメール設定

ここではgmailを使用する
$ sudo postconf -e relay_transport=smtp
$ sudo postconf -e relayhost=[smtp.gmail.com]:587
$ sudo postconf -e smtp_use_tls=yes
$ sudo postconf -e smtp_sasl_auth_enable=yes
$ sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
$ sudo postconf -e smtp_sasl_security_options=noanonymous
$ sudo postconf -e smtp_sasl_mechanism_filter=plain
$ sudo postconf -e smtp_tls_security_level=secure
$ sudo postconf -e smtp_tls_CApath=/etc/postfix/certs

ログイン情報を作成する
$ sudo touch /etc/postfix/sasl_passwd
$ sudo vim /etc/postfix/sasl_passwd
↓の行を記入する
[smtp.gmail.com]:587 メールアドレス:パスワード
$ sudo chmod 600 /etc/postfix/sasl_passwd
$ sudo postmap /etc/postfix/sasl_passwd

$ sudo mkdir /etc/postfix/certs
$ sudo chmod 600 /etc/postfix/certs
$ cat /etc/ssl/certs/Equifax_Secure_CA.pem | sudo tee -a /etc/postfix/certs/Equifax_Secure_CA.pem
$ cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/Thawte_Premium_Server_CA.pem
$ c_rehash /etc/postfix/certs
$ sudo vim /etc/postfix/submit.cred
submitcred version 1
hostname|username|password
$ sudo chmod 600 /etc/postfix/submit.cred
※submit.credは要らない可能性あり
$ sudo /etc/init.d/postfix restart
送信テスト
$ mail 宛先メールアドレス
本文は.で終了
うまくいかない場合は/var/log/mail.logを確認
"Server certificate not trusted"と出ている場合はpemがおかしい

参考:
http://ubuntu-tutorials.com/2008/11/11/relaying-postfix-smtp-via-smtpgmailcom/
http://stevejenkins.com/blog/2011/06/fixing-postfix-certificate-verification-failed-for-gmail-untrusted-issuer-error-message/

メール通知の設定
$ sudo vim /etc/aliases
最初はpostmaster: rootみたいな設定だけある
root: ユーザーアカウント
ユーザーアカウント: メールアドレス
という設定を追記
カンマ区切りで複数設定可能
$ sudo postalias /etc/aliases


これで基本的な初期セットアップ完了。

次はsamba4のインストールとActiveDirectoryの構築。
最近samba4のstable版がリリースされ、samba4からはActiveDirectoryのサーバー機能を備えている。
ActiveDirectoryに必要な機能はDNSサーバーとケルベロスサーバーで、samba4はこの辺を全て内包している。

sambaのサポートページ
http://wiki.samba.gr.jp/mediawiki/

aptitude等でsamba4を入れることもできるけどエラーが多発してインストールすらできない。
ソースからコンパイルして入れてみる。

参考
https://wiki.samba.org/index.php/Samba_4/OS_Requirements
http://paulcolfer.ie/os/linux/samba-4-domain-controller-on-ubuntu-server-12-04/


必要なパッケージインストール

$ sudo aptitude install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr docbook-xsl libcups2-dev xsltproc inkscape libpam0g-dev
※krb5-user はあとで入れる

$ sudo aptitude install gcc python2.7-dev make libacl1-dev python
※インストールされるものはなかった、上記のに含まれてるかも


openldapインストール

samba4をコンパイルするとwinbindやpam関連のsoファイルが生成されるべきだけど、
事前にopenldap関係のパッケージを入れておかないと生成されないっぽい?
$ sudo aptitude install slapd ldap-utils
管理者のパスワード: ※使わないのでなんでもよい

入れるのはいいけどかといって動作しているとなぜかADがおかしくなる。
なのでサービスから外しとく。
$ sudo update-rc.d -f slapd remove


samba4インストール

ソースをダウンロードしてmakeところから。
今回は4.0.6で試した。
$ cd
$ wget http://ftp.samba.org/pub/samba/samba-4.0.6.tar.gz
$ tar -zxvf samba-4.0.6.tar.gz
$ cd samba-4.0.6
$ ./configure
$ sudo make && sudo make install

さっそくADをセットアップする。
Realm(レルム/Kerberosの管理範囲)にはADドメインを、DomainにはNTドメインを入れるらしい。
NTドメインにはドットが含められないらしい。
Realmは組織のDNS名を大文字にしたもの(例えば、SALES.EXAMPLE.COM)を使うのが慣例で、DNSと紐づかない閉じた環境では名前 + ".LOCAL"とすることが多いらしい。
ちなみにOSインストール時のドメイン名は上書きされる感じになるので無視していい。
ServerRoleにはDomainControlerであるdcを選択。ActiveDirectoryのサーバー以外にしたりするなら他を選ぶ。
DNS backendにはDNSサーバーの種類を選ぶ、今回はsambaに任せるのでSAMBA_INTERNAL。
DNS forwarder ・・・には親となるDNSサーバーを選ぶ、今回はルーターを。

$ sudo /usr/local/samba/bin/samba-tool domain provision
Realm []: MYDOMAIN.LOCAL
Domain []: MYDOMAIN
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.1.1]:
Administrator password: パスワード
起動は単純に実行するだけ
$ sudo /usr/local/samba/sbin/samba
$ ps aux|grep samba
ずらずら表示されていたらOK
※4.0.5->4.0.6で数がだいぶプロセス減ってるような?


sambaのサービス化

毎回手動実行は大変なのでサービス登録する
$ sudo vim /etc/init.d/samba4

次のようなスクリプトを記述する。
#! /bin/sh
### BEGIN INIT INFO
# Provides: samba
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Samba
# Description: Samba Domain controller
# scheduler
### END INIT INFO
#
#
#
set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/local/samba/sbin/samba

test -x $DAEMON || exit 0

case "$1" in
start)
echo -ne "Starting Samba" "samba \n"
$DAEMON -D
;;
stop)
echo -ne "Stopping Samba" "samba \n"
PIDSMB=`ps -e | grep samba | awk '{ print $1 }'`
killall samba
;;
restart)
$0 stop
echo -ne "Sleeping 5 Seconds Before Start: \n"
sleep 5
$0 start
;;
*)
echo "Usage: /etc/init.d/samba4 {start|stop|restart)"

exit 1
;;
esac

exit 0
注意:ファイル名はsambaではだめなのでsamba4にしている、killallで処理中のこのスクリプトまでkillされてしまう

スクリプトを自動実行するようにする。
$ sudo chmod +x /etc/init.d/samba4
$ sudo update-rc.d samba4 defaults 98 02
ちなみにサービスの状態を確認するには
$ sudo aptitude install chkconfig
$ sudo chkconfig --list samba4
ランレベル毎に表示されるらしい。


ネットワーク設定を正す

インストールしただけだとネットワーク関連の設定ファイルが全然だめな状態なので直す。

参考
http://www.be-dama.com/kb/samba4-ad-mini-howto/samba_init_setting.html

$ sudo vim /etc/hostname
もともと
ホスト名
となっているものを
ホスト名.レルム
を(多分)小文字で記述する
ubuntu.mydomain.local

$ sudo vim /etc/hosts
127.0.0.1 localhost
UbuntuサーバーIP ホスト名.レルム ホスト名

今回だと
192.168.1.xxx ubuntu.mydomain.local ubuntu

interfacesに書いてあるDNSサーバー情報とかを移動する。
interfaces辺りの編集を間違えててハマッタ
参考
http://d.hatena.ne.jp/studio-m/20080213/1202862706
http://iabsis.com/EN/article/35-2/Samba4-installation

$ sudo vim /etc/resolvconf/resolv.conf.d/base
もともと空
search レルム名
nameserver UbuntuサーバーIP
に変更する。
search mydomain.local
nameserver 192.168.1.xxx
$ sudo resolvconf -u
ポイントはnameserver(DNS)にルーターを指定せず自分を指定するところ。

interfacesから移動した記述を削除
$ sudo vim /etc/network/interfaces
もともと
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.xxx
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.1.1
dns-search mydomain

dns-*系があればコメントアウトする
# dns-* options are implemented by the resolvconf package, if installed
#dns-nameservers 192.168.1.1
#dns-search mydomain

ネットワーク再起動
$ sudo ifdown eth0 && sudo ifup eth0

問題なくサービス再起動することを確認
$ sudo /etc/init.d/samba4 restart

一通り終わったので再起動してみる。
$ sudo shutdown -r 0


ADの動作確認

ドメイン定義の確認
$ /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[XXXXXXXX] OS=[Unix] Server=[Samba 4.0.6]

Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba 4.0.6)
sysvol Disk
netlogon Disk
Domain=[XXXXXXXX] OS=[Unix] Server=[Samba 4.0.6]

Server Comment
--------- -------

Workgroup Master
--------- -------
みたいな感じで表示されればOK

DNSの確認
$ sudo host -t SRV _ldap._tcp.mydomain.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_ldap._tcp.mydomain.local has SRV record 0 100 389 ubuntu.mydomain.local.

ドメイン管理者でログオンできるか
$ /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%'パスワード' -c 'ls'
Domain=[XXXXXXXX] OS=[Unix] Server=[Samba 4.0.6]
. D 0 Sun May 19 22:48:09 2013
.. D 0 Sun May 19 22:48:20 2013

34196 blocks of size 524288. 27826 blocks available
※パスワードに'が含まれている場合は"で囲む


kerberosの確認

adの暗号認証が機能しているか確認する。
sambaでadが動いた時点でサービスとしては動いてるはずで、udp88とかがnmapで確認できればよい。
問題はネットワーク設定がちゃんとしてなくてローカルから確認が失敗することが多そう。
adとしては起動に必須ではないはずで動いてるかわからないため念のため動作確認する。

sambaでドメイン立ち上げた時にできるテンプレートファイルをコピーしておく
$ sudo cp /usr/local/samba/private/krb5.conf /etc/.

kerberosクライアントインストール
レルムにはADのレルムを、
ケルベロスサーバーと管理サーバーに自分のホスト名を入れる。
$ sudo aptitude install krb5-user
デフォルトのケルベロスバージョン 5 レルム:MYDOMAIN.LOCAL
あなたのレルムのケルベロスサーバ: ubuntu
あなたのケルベロスレルムの管理サーバー: ubuntu
※質問の順番がなぜか違う時がある

$ sudo shutdown -r 0
※再起動しないとなぜかだめだった

$ kinit administrator@MYDOMAIN.LOCAL
※レルム名は大文字
何も帰ってこないか、パスワードに関する警告が出ればOK

接続のチケット(許可?)の一覧
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@MYDOMAIN.LOCAL
みたいな感じで出ればOK


AD管理ツールでの確認

$ sudo /usr/local/samba/bin/wbinfo -t
checking the trust secret for domain MYDOMAIN via RPC calls succeeded
succeededと出ればOK

$ sudo /usr/local/samba/bin/wbinfo -u
$ sudo /usr/local/samba/bin/wbinfo -g
でドメインのユーザーとグループが表示されればOK

試しにパスワードポリシー表示
$ sudo /usr/local/samba/bin/samba-tool domain passwordsettings show
Password informations for domain 'DC=mydomain,DC=local'

Password complexity: on
Store plaintext passwords: off
Password history length: 24
Minimum password length: 7
Minimum password age (days): 1
Maximum password age (days): 42

他にも、SSHでログインできるようにもできるらしいけど今回は調べない。

セットアップ完了。
次会hADへのユーザー追加とかファイルサーバーのセットアップとか。


ユーザー追加
$ sudo /usr/local/samba/bin/samba-tool user add tester

この時点でWindows機から確認してみる。
ネットワークの設定からDNSのIPをUbuntuサーバー機にする。
念の為ネットワークアダプタを無効にしてから有効化。
ping mydomain.local
で通ることを確認。

でもって、コントロールパネルのシステムからドメイン情報を入力すると参加できた。


ADユーザーとUbuntu情報の連携
make時にwinbindやpamといった名前のついたファイルができている。
これらをシステムに組み込んでユーザー情報を連携させる。
その際、既にあるファイルを退避させとく。
$ sudo mv /lib/x86_64-linux-gnu/libnss_winbind.so.2 /var/tmp/.
$ sudo ln -s /usr/local/samba/lib/libnss_winbind.so.2 /lib/x86_64-linux-gnu/libnss_winbind.so
$ sudo ln -s /lib/x86_64-linux-gnu/libnss_winbind.so /lib/x86_64-linux-gnu/libnss_winbind.so.2
$ sudo mv /lib/x86_64-linux-gnu/security/pam_winbind.so /var/tmp/
$ sudo ln -s /usr/local/samba/lib/pam_winbind.so /lib/x86_64-linux-gnu/security/pam_winbind.so

sambaのシェル設定
$ sudo vim /usr/local/samba/etc/smb.conf
[global]
...
template shell = /bin/bash
...

連携する用に設定
$ sudo vim /etc/nsswitch.conf
passwd: compat
group: compat
shadow: compat

passwd: compat winbind
group: compat winbind
shadow: compat winbind
に変更

設定読み込み(再起動しても同じ効果らしい)
$ sudo ldconfig -v | grep winbind

winbindの動作確認
$ /usr/local/samba/bin/wbinfo -p
Ping to winbindd succeeded

ユーザー情報の連携確認
$ getent passwd
MYDOMAIN\Administrator:*:0:100::/home/MYDOMAIN/Administrator:/bin/bash
などがずらずらでればOK

これでActiveDirectoryのユーザーがLinuxから参照できる?
$ id Administrator
uid=0(root) gid=100(users) groups=0(root),100(users),3000004(MYDOMAIN\Group Policy Creator Owners),3000006(MYDOMAIN\Enterprise Admins),3000008(MYDOMAIN\Domain Admins),3000007(MYDOMAIN\Schema Admins)

UID/GIDに関してはよーわからんけど
$ sudo /usr/local/samba/bin/ldbedit -e vi -H /usr/local/samba/private/idmap.ldb
でUIDとかのマッピング情報が見られるらしく
lowerBound: 3000000
upperBound: 4000000
とかあるので、3000000~4000000の間でIDでが振られるのかもしれない

ADユーザー情報
$ /usr/local/samba/bin/wbinfo --user-info Administrator
MYDOMAIN\Administrator:*:0:100::/home/MYDOMAIN/Administrator:/bin/false
UID=0 つまりroot

$ /usr/local/samba/bin/wbinfo --user-info tester
MYDOMAIN\tester:*:3000016:100::/home/MYDOMAIN/tester:/bin/false
UID=3000016 新たなID

ADグループ情報
$ /usr/local/samba/bin/wbinfo --group-info 'Domain Users'
MYDOMAIN\Domain Users:*:100:
GID=100 つまり users

というわけでグループを作ってみる
$ sudo /usr/local/samba/bin/samba-tools group add 'TestUsers'
$ sudo /usr/local/samba/bin/samba-tools group addmembers 'TestUsers' tester
※カンマ区切りで複数追加できるっぽい

ADグループ情報
$ /usr/local/samba/bin/wbinfo --group-info 'TestUsers'
MYDOMAIN\TestUsers:*:3000019:

参考
http://web.chaperone.jp/w/index.php?samba%2Fuser
http://wiki.samba.gr.jp/mediawiki/index.php?title=Samba_4.0.0%E3%81%AEDC%E4%B8%8A%E3%81%A7UID/GID%E3%81%AE%E5%80%A4%E3%81%ABUNIX%E5%B1%9E%E6%80%A7%E3%81%8C%E5%8F%8D%E6%98%A0%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84


ファイルサーバーセットアップ
sambaでファイルサーバーをセットアップする。

$ sudo vim /usr/local/samba/etc/smb.conf
# Global parameters
[global]
workgroup = MYDOMAIN
realm = MYDOMAIN.LOCAL
netbios name = UBUNTU
server role = active directory domain controller
dns forwarder = 192.168.1.1


[netlogon]
path = /usr/local/samba/var/locks/sysvol/mydomain.local/scripts
read only = No

[sysvol]
path = /usr/local/samba/var/locks/sysvol
read only = No
みたいな感じになっているところに
[global]
dos charset = CP932
unix charset = UTF-8

[share]
comment = share contents
path = /home/MYDOMAIN
read only = No
を追記する
$ sudo /etc/init.d/samba4 restart
$ sudo mkdir /home/MYDOMAIN
$ sudo chmod 755 /home/MYDOMAIN
$ sudo chown root:'MYDOMAIN\TestUsers' /home/MYDOMAIN

参考
http://sheepdogjam.cocolog-nifty.com/blog/2013/01/raspberrypi-sam.html

Windowsマシンから
\\192.168.1.XXX\
で共有フォルダが見えるようになる
ホスト名でも繋がるけど、何度かインストール手順を色々試してるとなぜかつながらないパターンがある。。。


プライマリグループの変更
このままだとドメインユーザーのプライマリグループがusersになっている。
ファイルサーバーで新規に作成したファイルのアクセス権設定がやりづらい。
設定ファイルを直接変更すれば変更できる。
$ sudo /usr/local/samba/bin/ldbedit -e vi -H /usr/local/samba/private/sam.ldb
/ユーザー名
などでユーザーの定義を探す
たぶん
objectClass: user
name: ユーザー名
となっていると思う
そこの
primaryGroupID: ・・・・
を変更先のグループに変える

IDを調べる方法は
$ /usr/local/samba/bin/wbinfo --name-to-sid グループ名
とした結果の末尾がID
今回だと
S-1-5-21-3800727457-1005178589-2210324449-1107 SID_DOM_GROUP (2)
となって、1107がIDとなる

primaryGroupID: 1107
とセットする
$ sudo /etc/init.d/samba4 restart
これで、プライマリグループの変更ができる。


おまけ

未確認やあまりはっきりしないことなど。

(20131031追記) Windows機をADに参加
普通にシステム詳細からドメインに参加すればよい。 ○○○○.LOCAL この時、アカウント情報を求められるが、ドメイン管理者(Domain Amins)の権限が必要らしい。 そうじゃない場合、Samba4だけかもしれないが次のようなエラーメッセージが出て混乱させられる。 「 ”***”という名前のコンピューターアカウントが以前、別の資格情報で作成された可能性があります。 別のコンピューター名を使うか、管理者に連絡して、競合を発生している無効なアカウントを削除してもらって下さい。 アクセスが拒否されました。」 なので、一般ユーザーを登録する場合は、まずはシステム詳細から管理者権限でドメインに参加し、 その後、一般ユーザーでPCにログインさせるといった感じになる。 また、WindowsVista以降では次の操作をしないといけないらしい(Pro未満の場合はレジストリ操作になる?) Windowsキー+R -> secpol.msc ローカルポシリー->セキュリティオプション ネットワーク セキュリティ: LAN Manager 認証レベル を変更する 未定義 -> 「NTLM応答のみ送信する」または「LMとNTLM応答を送信する」に変更する ※一度変更すると初期値(設定前)に戻せないので注意、初期値は「NTMv2応答のみを送信する」
AD管理をWindows7から
Ubuntuからだとコマンドベースで大変。
UIでやるならWindows7のリモート管理ツールというのが使えるらしい。

http://www.microsoft.com/ja-jp/download/details.aspx?id=7887
Win7用リモート管理ツールをダウンロードしてインストール

コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化
役割管理ツール→AD DS およびAD LDSツール→AD DSツール→ActiveDirectory管理センタをチェックする
一緒にいくつかチェックされるのでそのままにしておく→OK

で、前提条件としてWindows機からドメインに管理者権限で参加しておく必要があるっぽい。

スタートメニュー→管理ツール→ActiveDirectoryユーザーとコンピュータ
エラーが出るけど気にしない

操作→ドメインコントローラの変更→次のドメインコントローラーまたはAD LDS インスタンス
ドメイン名を入力
状態がオンラインになればOK

参考
http://www.kurobuti.com/blog/?p=6318
http://d.hatena.ne.jp/rti7743/20110425/1303688263


RAID1構築後に2台目HDDのbiosgrubパーティションセットアップ
1台目の情報をコピーする。
$ sudo dd if=/dev/sda1 of=/dev/sdb1 bs=512
をする

参考
http://nabe.blog.abk.nu/0301
http://blog.lwlv.net/archives/323


samba起動エラー解消
そのままだとsamba起動時にエラーが出ている。
$ sudo vim /usr/local/samba/etc/smb.conf
[global]に以下を追記
printing = bsd
load printers = no
printcap name = /dev/null
$ sudo /etc/init.d/samba4 restart


SWATのインストール
sambaの管理UI
$ sudo aptitude purge openbsd-inetd
※なければそれでよい

$ sudo aptitude install xinetd
$ sudo update-inetd --enable 'swat'
$ sudo dpkg-reconfigure xinetd
$ sudo vim /etc/xinetd.d/swat
service swat
{
port = 901
socket_type = stream
wait = no
only_from = 127.0.0.1 192.168.1.0/24
user = root
server = /usr/local/samba/sbin/swat
log_on_failure += USERID
disable = no
}

$ sudo vim /etc/inetd.conf
からswatに関する記述をコメントアウト
なぜかconfが残りっぱなしでxinetdが若干影響受けてるっぽいので念の為
※もともとなければ不要

swatのヘルプページがなぜかおかしいのは放置
samba-docを入れてwelcome.htmlを修正すればいいらしいが・・・
全部修正するのは大変だしsamba4のdocumentでちゃんとしたのが見つからなかった

もいちど再起動
$ sudo dpkg-reconfigure xinetd

rootにパスワードを与える
$ sudo passwd root

Windows機から
http://Ubuntuホスト名:901/
でswatに繋がる

なお、Ubuntu12.04の通常のsambaとswatではなぜかswatには繋がるけど
何かすると真っ白になるという状態になった
samba4でイチからビルドした場合はうまくいくっぽい


名前解決
インストール内容によってはWinowsマシンからLinuxマシンを名前解決できないケースがある。
その場合は次の操作で繋がるパターンがあった。

nmbdを入れる
$ sudo aptitude install samba

nmbdだけ欲しくてsmbdはいらないのでサービス停止
$ sudo /etc/init.d/smbd stop

smbdはupstartでサービス登録されているけど
念の為 SysV init の停止もする。多分えらー
$ sudo update-rc.d smbd disable
upstartの記述を削除する
$ sudo vim /etc/init/smbd.conf
start on ・・・ という行を#でコメントアウト

これで再起動してもsmbdが起動しないようになる
なお、/etc/init.d/ではなくserviceコマンドを使うこともあるが
これはupstartとSysV initの区別をしなくてもいいコマンドらしい

この状態でWIndowsマシンから
> ping ホスト名
で名前解決できていることを確認


その他参考にしたかもしれないサイト

http://www.kurobuti.com/blog/?p=6278http://d.hatena.ne.jp/torutk/20130301/p1
http://blog.bis5.net/archives/138
http://paulcolfer.ie/os/linux/samba-4-domain-controller-on-ubuntu-server-12-04/
https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
http://www.matrix44.net/cms/notes/gnulinux/samba-4-ad-domain-with-ubuntu-12-04
http://d.hatena.ne.jp/vivid_skid/20130417/1366159279
http://krakenbeal.blogspot.jp/2011/03/ubuntuswat.html
http://www.aconus.com/~oyaji/samba/samba.htm
http://www.samba.gr.jp/doc/contrib/begin_samba2.0.html
http://askubuntu.com/questions/196272/how-to-install-and-configure-swat-in-ubuntu-server-12-04
http://www.samba.gr.jp/project/translation/Samba3-HOWTO/FastStart.html
http://fummy-net.blogspot.jp/2013/04/samba4-active-directory-pdc.html#centos_domain_login