GNU Screen の設定あれこれ

リモートで接続する時に限らず、ローカルで作業する時でも便利なGNU Screen
自分なりの設定を入れる事でさらに使いやすく作業効率が上がる。
かっこ良くできれば、厨二病パワー炸裂で毎日ハッピーw

Fedora18のyumコマンドでインストールされたscreenを使うよ。
上側に作業用のメインウィンドウ、下にコマンド用(左)とtopコマンド結果用(右)の3つに画面を分割する。
左右に画面分割するので、確か4.1以降でないと正しく表示できない設定。

早速~/.screenrcの内容

escape ^Tt 
hardstatus alwayslastline "%{r wm}%01=%H >> %{+b kM} %`%-w%{ wb} %n %t%{-}%+w %-040=%{-b wm}| %l | %Y/%m/%d %C %A"
caption string '%?%F%{=b cW}%:%{= Kk}%?%2n%f%07=%t%='
term xterm-256color

# Ctrl-t y でウィンドウ制御モード(仮)に移行する
# Escキーが入力されるまで継続する
bind y eval 'echo "Operate Window"' 'command -c operate'
bind -c operate j eval 'focus down' 'command -c operate'
bind -c operate k eval 'focus up' 'command -c operate'
bind -c operate h eval 'focus left' 'command -c operate'
bind -c operate l eval 'focus right' 'command -c operate'
bind -c operate t eval 'focus top' 'command -c operate'
bind -c operate + eval 'resize -v +1' 'command -c operate'
bind -c operate - eval 'resize -v -1' 'command -c operate'
bind -c operate > eval 'resize -h +1' 'command -c operate'
bind -c operate < eval 'resize -h -1' 'command -c operate'
bind -c operate = eval 'resize -h =' 'command -c operate'

# Window間の行き来はCtrl-tと以下のキーの組み合わせで簡単に
# Vimと同じキーバインド
bind j eval 'focus down'
bind k eval 'focus up'
bind h eval 'focus left'
bind l eval 'focus right'
bind > eval 'resize -h +1'
bind < eval 'resize -h -1'

# Create window
screen 0
screen 1
screen -t status 2 nice top #3番目はtopコマンド結果を表示

# Create layout
layout new 0:layout0:horizontal

# レイヤーを上下に分解
layout select 0
split

# 下側
focus down
resize -v 12    #高さ指定
split -v        #左右に分割
select 1        #screen1を表示
title 'command line'

# 下右側
focus right
resize -h 80
select 2        #screen2を表示
title 'status'

# 上側をアクティブにしてscreen0を表示
focus up
select 0
title 'workspace'

実は最近tmuxに浮気した。個の記事をかなり前に下書き保存したまま放置してたのを発見したので浮気後にアップする。
キミとは短いような長いような付き合いだったが、今までありがとう。(何事

てことで、もうScreen使っていないので設定ファイルが正しいか確認してない。
まぁ今まで使ってたファイルからのコピペだろうから大丈夫なはずだ。(ずいぶん前に書き込んだから記憶が曖昧)

tmux設定あれこれ

SSHでサーバにリモート接続してあれこれ作業って時に!!
画面を分割できたり、ネットワーク切断でもセッションを保持していて切断前の状態をキープしていてくれる優れもの。
そう、そいつの名はtmux。

元々は GNU Screen 使ってたけど、縦分割した際に時々境界線がずれたりする不具合があったりして乗り換え。

設定ファイル

今回インストールした環境はFedora18だったので、インストールは yum install tmux コマンドで終わり。
~/.tmux.conf ファイルを作成して環境設定を行う。

  • Ctrl-t で色々操作できる様にする
  • 日本語に対応させる
  • 256色対応にさせる
  • マウススクロールに対応させる
  • コピーモードのキーバインドをvi風にする
  • ペイン移動もvi風なキーバインドにする
  • 格好よさげな色に変更してやる気を出す

以上の要件を満たす設定ファイルがこれだ!

#プレフィックスをCtrl-bからCtrl-tに変更
unbind C-b
set -g prefix C-t
bind C-t send-prefix

#日本語対応
setw -g utf8 on
set -g status-utf8 on

#キーバインドをvi風に
set-window-option -g mode-keys vi

#256色対応
set -g default-terminal "xterm-256color"
set -g terminal-overrides "term:colors=256"
set -g display-time 2000

# 異なるサイズの端末からアクセスした時にリサイズ
setw -g aggressive-resize on

#マウススクロール反映
set-window-option -g mode-mouse on

#-------------
# Keybind変更
#-------------
unbind r
bind r source-file ~/.tmux.conf \; display "Config file is reloaded!"

# Keybind ウィンド分割
bind | split-window -h #縦分割
bind - split-window -v #横分割

# Keybind ウィンド切り替え
bind -r C-p select-window -t :-
bind -r C-n select-window -t :+

# Keybind ペイン切り替え(Vim風)
bind j select-pane -D #down
bind k select-pane -U #up
bind h select-pane -L #left
bind l select-pane -R #right

# カーソルキーでペインの大きさ変更(連打対応)
bind -r Up resize-pane -U
bind -r Down resize-pane -D
bind -r Left resize-pane -L
bind -r Right resize-pane -R


### COLOUR (Solarized dark改)

# default statusbar colors
set-option -g status-bg colour235 #base02
set-option -g status-fg colour136 #yellow
set-option -g status-attr default

# default window title colors
set-window-option -g window-status-fg colour244 #base0
set-window-option -g window-status-bg default
set-window-option -g window-status-attr dim

# active window title colors
set-window-option -g window-status-current-fg colour166 #orange
set-window-option -g window-status-current-bg default
set-window-option -g window-status-current-attr bright

# pane border
set-option -g pane-border-fg colour240 #base01
set-option -g pane-active-border-fg colour166 #orange

# message text
set-option -g message-bg colour235 #base02
set-option -g message-fg colour166 #orange

# pane number display
set-option -g display-panes-active-colour colour33 #blue
set-option -g display-panes-colour colour166 #orange

# clock
set-window-option -g clock-mode-colour colour64 #green

色に関しては、「tmuxのおすすめ設定 - Qiita」を参考に、「https://github.com/altercation/solarized/tree/master/tmux」の設定を若干変更して貼り付け。
使ってるターミナルが背景透過してて、そのままの色では見えなかったのよ・・・

起動時に画面分割

んで。起動時にウインドウ分割させる。「tmux起動時に分割する - Qiita」を参考に作る。
上に作業メインのウィンドウを表示し、下側にコマンド実行用ウィンドウを表示する。その右側にtopコマンドが常に表示されるように分割してみる。

+----------+
|workspace |
|          |
+------+---+
|cmd   |top|
+------+---+

まず、~/.tmux/new-session ファイルに以下のウインドウ分割コマンドを書く。

  • lの数値 25 や 80 は分割したウィンドウの高さ(幅)なので、環境に応じて変更する。

上下に分割した後に下のウィンドウを左右に分割すればよい。

#画面を分割して右下はtopコマンド実行
select-pane -t 0
split-window -v -l 25
select-pane -t 1
split-window -h -l 80 top

#メインのペインをアクティブにする
select-pane -t 0

tmuxはバックスラッシュ[\]とセミコロン[;]でマルチコマンドができる。
これを利用して新規セッション確立時に先ほどの分割コマンドを読み込めばいいのだ。複数コマンドで長くなるので別途ファイルに記載したのよ。

tmux new-session \; source-file ~/.tmux/new-session

でもこれだと、毎回あれだしね。エイリアスに登録して一発起動させよう。
ついでなので、セッションが残っている場合にはアタッチするようにしておこう。
今回構築した環境では、ターミナル起動した時点で $SHLVL が 2 を返していたので以下の様になる。echo $SHLVL コマンドで自分のtmux起動前の環境を確認しよう。
bashの人は.bashrcだし、zshの人は.zshrcだね。そのファイルに追記してしまえばおkさ。

if [ $SHLVL = 2 ]; then
  alias tmux="tmux attach || tmux new-session \; source-file ~/.tmux/new-session"
fi

2023.05.09 追記

最近またtmux活用する機会があったのだけど、仕様が変わってたので最新版設定。
ステータスラインの色設定方法とかが変更になっていた。

分割表示を new-session ファイル読み込みから、tmux内で Ctrl-T + / で実行できるようにした。
それなので、alias設定は不必要となる。
その設定が最終行にあるのだが、そこで設定しているlayout情報が必要になる。
とりあえずはコマンド駆使して理想のレイアウトに分割する。
できあがったら tmux list-window コマンドを実行する。そうすれば以下のような値が取得できる。
この場合であれば dfa0 から 36,3}] までの値が必要になる。

0: zsh* (3 panes) [200x54] [layout dfa0,200x54,0,0[200x35,0,0,0,200x18,0,36{114x18,0,36,2,85x18,115,36,3}]] @0 (active)

この情報を反映させた新しい設定が以下になる。

#プレフィックスをCtrl-bからCtrl-tに変更
unbind C-b
set -g prefix C-t
bind C-t send-prefix

#日本語対応
#setw -g utf8 on
#set -g status-utf8 on

#キーバインドをvi風に
set-window-option -g mode-keys vi

#256色対応
set -g default-terminal "tmux-256color"
set -g terminal-overrides ",xterm-256color:Tc"
set -g display-time 2000

# 異なるサイズの端末からアクセスした時にリサイズ
setw -g aggressive-resize on

#マウススクロール反映
#set-window-option -g mode-mouse on
set -g mouse on
bind -T root WheelUpPane   if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
bind -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"

#-------------
# Keybind変更
#-------------
unbind r
bind r source-file ~/.tmux.conf \; display "Config file is reloaded!"

# Keybind ウィンド分割
bind | split-window -h #縦分割
bind - split-window -v #横分割

# Keybind ウィンド切り替え
bind -r C-p select-window -t :-
bind -r C-n select-window -t :+

# Keybind ペイン切り替え(Vim風)
bind j select-pane -D #down
bind k select-pane -U #up
bind h select-pane -L #left
bind l select-pane -R #right

# カーソルキーでペインの大きさ変更(連打対応)
bind -r Up resize-pane -U
bind -r Down resize-pane -D
bind -r Left resize-pane -L
bind -r Right resize-pane -R


### COLOUR (Solarized dark改)

# default statusbar colors
set-option -g status-bg colour235 #base02
set-option -g status-fg colour136 #yellow

# ステータスラインの更新間隔を1秒にする
set-option -g status-interval 1

# ステータスラインを中央寄せ
set-option -g status-justify "centre"

# ステータスライン左側
set-option -g status-left-length 50
set-option -g status-left "#[fg=colour235,bg=colour136] Session: #S #[default]"

# ステータスライン右側
set-option -g status-right-length 50
set-option -g status-right "#[fg=colour235,bg=colour136] #h | %Y/%m/%d %H:%I:%S "

# ステータスライン中央
set-window-option -g window-status-format " #I: #W "
set-window-option -g window-status-current-format "#[fg=colour235,bg=colour136,bright] #I: #W #[default]"

set-option -g pane-border-style fg=colour240 #base01
set-option -g pane-active-border-style fg=colour166 #orange


# pane number display
set-option -g display-panes-active-colour colour33 #blue
set-option -g display-panes-colour colour166 #orange

# clock
set-window-option -g clock-mode-colour colour64 #green

# 「/」キーで固定レイアウトペイン分割
bind / select-pane -t 0\; split-window -v -l 40 /bin/zsh\; select-pane -t 1\; split-window -h -l 130 top\; select-pane -t 0\; select-layout "1fa0,200x54,0,0[200x35,0,0,0,200x18,0,36{114x18,0,36,1,85x18,115,36,2}]"

Samba4でADドメインコントローラ冗長化

既に構築済みのActive Directory環境に新たなドメインコントローラを構築して冗長化させるぜ。
Windowsサーバで構築するのではなく、Cent OS 6.4 に Samba 4.0.9 をインストールする。
WindowsはもちろんMacちゃんやLinuxたんもドメインの仲間に入れてあげる事を目標に。
端末以外でも、LDAP認証に対応したシステムは全て仲間入りさせて仲良しネットワーク作ろう。

標準リポジトリにSamba4.0があるんだけど、ドメインコントローラはまだパッケージにされてない?
妙に容量すくないんだよね。以前インストールした時も構築できなかったし。
だがだが、(たぶん)個人でリポジトリ公開してるサイトがあって、そこから4.0.9がyum installできるようになってた。

んでも今回はyum使ってのインストールは行わない。
gnutls-develがインストールされていない環境でコンパイルされたらしく、LDAPTLS (LDAPS) 対応していなかった。
実はこれに気づくまでに時間がかかってDLAP認証にしてたFedora18とかログインできなくて泣いた。
*1
今回は色々な環境の認証サーバとして頑張ってもらうから、自分でコンパイル&インストールをするんだぜ。

俺はTLS対応なんかされてなくても生きていける!って硬派な人は下のリンク先を参照するのお勧め。

ちょっと前に行ったFedora18で行ったドメイン構築の記録はここから!

この環境にスレーブとしてドメインコントローラを構築していく。
前置きが長くなったけど、早速開始だ!!

の前にw
今回のゴールを掲げておこう(大げさ

ドメイン:YOUR-DOMAIN.LOCAL

元々あるDC 今回構築するDC
IPアドレス 192.168.0.1 192.168.0.2
ホスト名 dc-server0 dc-server1

インストールの巻

インストール対象はCentOS6.4。
既にネットワーク設定などOSの基本的な事は終わっている事が前提で記録を残してるのよ。
コマンドが使えなかったら yum install するんだ。makeとかgccとかwgetとかね。(最小構成のインストールだと入ってないぞ)
管理者権限が必要なコマンド多数なので、rootでログインした状態で作業を進めるよ。

関連ツールのインストール

では。先ず始めに必要ヘッダー類のインストールを行う。
Samba 4/OS Requirements (日本語) | Case-of-T を参考にyumコマンド実行。

yum install libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig krb5-workstation zlib-devel setroubleshoot-server setroubleshoot-plugins policycoreutils-python libsemanage-python setools-libs-python setools-libs popt-devel libpcap-devel sqlite-devel libidn-devel libxml2-devel libacl-devel libsepol-devel libattr-devel keyutils-libs-devel cyrus-sasl-devel

gnutls-develがインストールされていないと、TLS接続できない状態でコンパイルされちゃうぞ!

ソースコードのダウンロード

次は公式サイトからソースコードを取得するよ。
http://ftp.samba.org/pub/samba/ にアクセスして、最新版のtar.gzファイルを取得しよう。
この時点での最新版である samba-4.0.9.tar.gz をダウンロード。*2
そんでもってtarファイルを展開する。

wget http://ftp.samba.org/pub/samba/samba-4.0.9.tar.gz
tar -xzf samba-4.0.9.tar.gz
Make アンド Install

tarを展開したディレクトリに移動し、コンパイルからインストールまで一気に行っちゃう!
とは言っても、頑張るのはCPU。人様は待ってる時間が長い。どれだけかかるかはCPUの性能次第だ。
ちなみに、自身の仮想環境ではトータルで10分位だったかな。

標準では全て /var/local/samba にインストールされるんだけど。
色々考えた結果、データベース等のデータファイルは /var/lib/samba ディレクトリ内に、設定ファイルは /etc/samba ディレクトリ内にインストールされるようにする。
オプション等詳しくは、./configure --help コマンドで確認してね。

cd samba-4.0.9
./configure --sysconfdir=/etc/samba --localstatedir=/var --with-privatedir=/var/lib/samba/private --with-cachedir=/var/lib/samba/cache --with-lockdir=/var/lib/samba/lock --with-logfilebase=/var/log/samba
make
make install
ポート開放

以下のポートを開放せよ。じゃないと泣く事になるぞ。まじで・・・

番号 プロトコル
88 tcp
135 tcp
139 tcp
389 tcp
389 udp
445 tcp
464 tcp
636 tcp
636 udp
1024 tcp
3268 tcp

389:udpポート開放忘れると、Windows7にインストールされたAD関連の管理ツールが脅してくるぞ!!

名前付け情報を検索できません。
理由:セキュリティに危害を与える試みが検出されました。認証したサーバに連絡してください。
システム管理者に問い合わせ、ドメインが正しく構成されていて、現在オンラインであるかどうかを確認してください。

setup-toolとsystem-config-firewall-tuiがインストールされていれば、setupコマンドまたはsystem-config-firewall-tuiコマンドから楽に設定しやすいね。
iptablesを直接編集するって紳士にはこれ。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 88 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 135 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 389 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 464 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1024 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3268 -j ACCEPT

ドメイン環境構築

ここからが本番だ!

ケルベロス設定

/etc/krb5.conf ファイルの以下の項目を設定する。

[libdefaults]
default_realm = YOUR-DOMAIN.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true

設定が正しく行えているかkinitコマンドで確認する。

kinit administrator@YOUR-DOMAIN.LOCAL
ドメイン参加

samba-toolコマンドの domain join を使用してドメイン参加処理を実行する。

samba-tool domain join your-domain.local DC -Uadministrator --dns-backend=BIND9_DLZ --realm=your-domain.local

ドメインのadministratorパスワードを聞かれるのでパスワードを入力してenterキーを「ッターーーン」と叩けばおっけーだ!
以下の感じで表示されていくはず。SIDの値とかは人によって違うから気にするな!!

Finding a writeable DC for domain 'your-domain.local'
Found DC dc-server0.your-domain.local
Password for [YOUR-DOMAIN.LOCAL\administrator]:
NO DNS zone information found in source domain, not replicating DNS
workgroup is YOUR-DOMAIN.LOCAL
realm is your-domain.local
checking sAMAccountName
Adding CN=DC-SERVER1,OU=Domain Controllers,DC=your-domain,DC=local
Adding CN=DC-SERVER1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=your-domain,DC=local
Adding CN=NTDS Settings,CN=DC-SERVER1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=your-domain,DC=local
Adding SPNs to CN=DC-SERVER1,OU=Domain Controllers,DC=your-domain,DC=local
Setting account password for DC-SERVER1$
Enabling account
Calling bare provision
No IPv6 address will be assigned
Provision OK for domain DN DC=your-domain,DC=local
Starting replication
Schema-DN[CN=Schema,CN=Configuration,DC=your-domain,DC=local] objects[402/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=your-domain,DC=local] objects[804/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=your-domain,DC=local] objects[1206/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=your-domain,DC=local] objects[1550/1550] linked_values[0/0]
Analyze and apply schema objects
Partition[CN=Configuration,DC=your-domain,DC=local] objects[402/1628] linked_values[0/0]
Partition[CN=Configuration,DC=your-domain,DC=local] objects[804/1628] linked_values[0/0]
Partition[CN=Configuration,DC=your-domain,DC=local] objects[1206/1628] linked_values[0/0]
Partition[CN=Configuration,DC=your-domain,DC=local] objects[1608/1628] linked_values[0/0]
Partition[CN=Configuration,DC=your-domain,DC=local] objects[1628/1628] linked_values[28/0]
Replicating critical objects from the base DN of the domain
Partition[DC=your-domain,DC=local] objects[99/99] linked_values[32/0]
Partition[DC=your-domain,DC=local] objects[476/377] linked_values[41/0]
Done with always replicated NC (base, config, schema)
Committing SAM database
Sending DsReplicateUpdateRefs for all the replicated partitions
Setting isSynchronized and dsServiceName
Setting up secrets database
Joined domain YOUR-DOMAIN.LOCAL (SID S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx) as a DC

DNS登録

クライアントがドメインコントローラを探せるように、DNSに登録せねばならぬ。
まずはguidが必要になるので、ldbsearchコマンドを駆使してguidをゲットする。

/usr/local/samba/bin/ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid

結果として以下の様に標準出力されるんだ。

# record 1
dn: CN=NTDS Settings,CN=DC-SERVER0,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=your-domain,DC=local
objectGUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# record 2
dn: CN=NTDS Settings,CN=DC-SERVER1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=your-domain,DC=local
objectGUID: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy

今回必要なのはDC-SERVER1のguidなので、上記の例で言うところの yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy が必要になる。
クリップボードにコピーするなり、メモるなり暗記するなり好きな方法で。

んで、DNSに登録する。君のゾーンファイルを編集するんだ。
$ORIGN _msdcs.your-domain.local に元々のdc-server0が登録されてるので、その下にCNAMEを追加する。

$ORIGN _msdcs.your-domain.local
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy CNAME dc-server1.your-domain.local

dc-server1.your-domain.local のAレコードがちゃんと登録されてなきゃダメだぞ!
なかったら、以下の内容を最後の方にでも追加しちゃいなさい。

$ORIGN your-domain.local
dc-server1 A 192.168.0.2

digコマンドでゾーン情報が引けるかな?

dig yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy._msdcs.your-domain.local

IPアドレスが取得できていれば登録大丈夫だ。

レプリケーション確認

samba-toolの drs showrepl コマンドでレプリケーション状態が確認できるのでお試しあれ。

/usr/local/samba/bin/samba-tool drs showrepl

Default-First-Site-Name\DC-SERVER1
DSA Options: 0x00000001
DSA object GUID: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
DSA invocationId: zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz

==== INBOUND NEIGHBORS ====

CN=Schema,CN=Configuration,DC=your-domain,DC=local
Default-First-Site-Name\DC-SERVER0 via RPC
DSA object GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Last attempt @ Thu Oct 24 11:07:01 2013 JST was successful
0 consecutive failure(s).
Last success @ Thu Oct 24 11:07:01 2013 JST



DC=your-domain,DC=local
Default-First-Site-Name\DC-SERCER0 via RPC
DSA object GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Last attempt @ Thu Oct 24 11:03:02 2013 JST was successful
0 consecutive failure(s).
Last success @ Thu Oct 24 11:03:02 2013 JST

CN=Configuration,DC=your-domain,DC=local
Default-First-Site-Name\DC-SERVER0 via RPC
DSA object GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Last attempt @ Thu Oct 24 11:04:03 2013 JST was successful
0 consecutive failure(s).
Last success @ Thu Oct 24 11:04:03 2013 JST

==== OUTBOUND NEIGHBORS ====

CN=Schema,CN=Configuration,DC=your-domain,DC=local
Default-First-Site-Name\DC-SERVER0 via RPC
DSA object GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)

DC=your-domain,DC=local
Default-First-Site-Name\DC-SERVER0 via RPC
DSA object GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Last attempt @ NTTIME(0) was successful
0 consecutive failure(s).
Last success @ NTTIME(0)

==== KCC CONNECTION OBJECTS ====

Connection --
Connection name: zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzz
Enabled : TRUE
Server DNS name : DC-SERVER0.your-domain.local
Server DN name : CN=NTDS Settings,CN=DC-SERVER0,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=your-domain,DC=local
TransportType: RPC
options: 0x00000001
Warning: No NC replicated for Connection!

各項目が was successful ってなっていればいいんだが、failed とかあっちゃうとレプリケーション失敗してる。
失敗していれば、ネットワーク構成とかDNSとかポートを再度確認するなりして障害となっている箇所の原因特定と解決するしかない。

ちなみに。Windowsの「Active Directory ユーザとコンピュータ」管理ツールからも確認できる。
該当のドメインコントローラ(デフォではDomain Controllersに所属)のプロパティを開いて NTDSの設定 を開く。
接続タブに レプリケート元・レプリケート先 の一覧があるので双方にレプリケーション相手がいればいいのだよ。

GPOレプリケーション

GPO、それはグループポリシーオブジェクトの事だ。
だが、これから話す内容はとてもショッキングな出来事だ。落ち着いて聞いてほしい。

新規に追加したサーバのGPOファイルを見るんだ。
どこにあるかは、/etc/samba/smb.conf ファイルの [sysvol] セッション内にある path に指定されている。
今回の環境では /var/lib/samba/sysvol になる。そのディレクトリ内にドメイン名のディレクトリが存在する。そのドメインディレクトリに Policies って名前で存在している。
つまりは、 ls -l /var/lib/samba/sysvol/your-domain.local/ コマンドを実行すれば表示されるわけだ。

な?表示されないだろ??

それってどういう事か、わかるか?!

そうだ。GPOが同期されてないー!!って事だ。
これは一大事だ。そんな状況下で以下の記事を見つけた。 8. Active Directory各種設定 — samba4 AD mini HowTo 1.0 documentation
挙動といいネット情報といい、「GPOが同期されないのは仕様です(キリッ」で間違えなさそうだ。

だからと言って諦めてはダメだ!人間諦めたら終わりだ。
同期されないのであれば、自力でどうきさせてしまえばいいのだよ。

rsyncコマンドを駆使してやればいけそうだから安心したまえ!
対象のファイルはroot権限が必要なのでrootアカウントでssh経由のrsyncを鍵認証で行う。

鍵作成

サーバ間のファイル同期のために ssh接続でのrsyncコマンドで行う。
実行はcronに登録して行う予定なので、同期先でパスワードなしの鍵作成を行う。rootユーザーで/rootディレクトリ内で作業を実施。

ssh-keygen -t rsa -N "" -f .ssh/rsync-gpo

これで .sshディレクトリ内にrsync-gpoって名の秘密鍵と公開鍵の二つが作成される。この公開鍵を同期元のサーバに配置する。
scpコマンドで同期元にコピーを作成するが、通常はrootアカウントはSSH接続できなくしてると思うので、SSH接続できるユーザ user でログインしてホームディレクトリに一旦置く。

scp .ssh/rsync-gpo.pub user@dc-server0:~/
同期元サーバ設定

rootアカウントでもSSHでログイン可能にする。ただし、セキュリティを考慮して実行できるコマンドを限定した設定にする。
/etc/ssh/sshd_config ファイルの以下の項目を変更とする。

PermitRootLogin forced-commands-only

設定を変更したらsshdを再起動。

/etc/init.d/sshd restart

先程コピーした公開鍵をauthorized_keysに登録する。
あと、パーミッションを変更してrootのみが読み書き出きるようにする。

cat /home/user/rsync-gpo.pub >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

実行できるコマンドを限定するため、authorized_keysに登録する。
とその前に、rsyncコマンドがコピー先サーバでどのように実行されるのか調べる。
同期先から実行予定のrsyncコマンドに-vvオプションを追加して実行する。この時点では同期先の設定ができていないのでエラーを吐いて終了してしまうが必要な情報は取得できるので気にしない。

rsync -aAXu -e "ssh -i /root/.ssh/rsync-gpo" user@dc-server0:/var/lib/samba/sysvol/your-domain.local/ /var/lib/samba/sysvol/your-domain.local/ --vv

想定通りエラーでこける。こけなきゃおかしい。それで、標準出力つまり画面に opening connection using: ssh ... なるメッセージがある。以下のような感じだ。

opening connection using: ssh -i /root/.ssh/rsync-gpo -l root dc-server1 rsync --server --sender -vvulogDtpAXre.iLs . /var/lib/samba/sysvol/your-domain.local/

このケースでは、 rsync --server -vvulogDtpAXre.iLs . /var/lib/samba/sysvol/your-domain.local/ の部分が該当する。
このコマンドを同期先のauthorized_keysにcommandオプションとして登録する。
同期先の /root/.ssh/authorized_keys の該当公開鍵情報の前にvim等のエディタで追加する。-vvオプションは実際の同期処理では必要ないので除外した。
ついでにアクセス元を限定し、万一に備えて他のサーバからはアクセス出来ないようにした。

command="rsync --server --sender -ulogDtpAXre.iLs . /var/lib/samba/sysvol/your-domain.local/",from="192.168.0.2" ssh-rsa AAAA.... root@dc-server1

ssh-rsa より前に記載する。commandとfromはカンマ区切りとし、スペースを含めてはならない。ssh-rsaの前に必ずスペースを含めればよい。

同期先からrsyncコマンド叩いて同期できればグッジョブだ。

できなければ、authorized_keysを疑おう。commandの内容を"ls"だけにして、単純にsshコマンドで接続してみる。
/rootディレクトリの内容が表示されて接続が切れれば commandオプション内のrsyncコマンドの記載(特にオプション関連怪しい)が違っている事になる。
接続出来ないとかだと、authorized_keysへの書き方が違うか、違う公開鍵情報に設定してしまったかだ・・・

自動同期設定

crontabに登録して定期的に同期させる。今回は15分に一度同期する様に設定したぜ。
まずは、同期先から同期元へrsyncコマンドを実行させるので、同期先のcrontabに登録する。
同期した後、権限の設定反映を行わないといけないので、合わせてsamba-toolコマンドも登録する。

 */15 * * * * rsync -aAXu -e "ssh -i /root/.ssh/rsync-gpo" root@dc-server0:/var/lib/samba/sysvol/your-domain.local/ /var/lib/samba/sysvol/your-domain.local/
 1-59/15 * * * * /usr/local/samba/bin/samba-tool ntacl sysvolreset

規程の時間に実行されていればおkだ。
時間をずらして反対方向の同期処理も実行した方がいいな。


構築した環境では、同期を行うようになってから administrator 意外GPO編集できなくなってしまったのはなんでなんだぜ?
これについては調べなければ・・・今のところ原因不明
(2013-12-13追記) グループポリシー管理ツールのファイルメニューからオプションを選択し、ファイルの削除ボタンをクリックしてツール再起動で直った。

*1:2014/02/24追記:どうやら対応された見たいですが時間がなくて実施できず

*2:この記事を作成時点でリンクを確認したら4.0.10がアップされてた。恐らく同じ手順でいけるはず。バージョン番号は適時読み替えて!

Samba4.0.3でActive Directoryドメイン環境を構築

Samba4がリリースされたんだってねー。
MSも協力して、Active Directoryに完全対応したんだってねー。

じゃぁ早速構築してみようではないか!!
最終的には、以下の事ができるようにする。

Samba4のインストール

今回はFedora18にインストールする。
Samba4が既にパッケージ化されているのだが、うまく行かなかった。
ADの機能が本体とは別のパッケージになっている様なのだが、まだバイナリはパッケージングされていないのか?容量が数百KBしかないし、色々と動かない。
なので、コードからコンパイルする事にした。

依存関係にあるライブラリをインストール

公式サイトで書かれていた必須・推奨のライブラリをインストールする。

yum install libacl-devel libblkid-devel gnutls-devel python-devel gdb pkgconfig libattr-devel krb5-workstation
コード取得とmake実行

公式サイトから最新版(この時点では4.0.3)を取得しコンパイルを実行してインストールする。
後にパッケージがちゃんとリリースされた際は簡単に削除できる様、デフォルトの/usr/localではなく/opt/samba4にインストールする事にした。

wget http://ftp.samba.org/pub/samba/samba-4.0.3.tar.gz
tar -xzf samba-4.0.3.tar.gz
cd samba4.0.3
./configure --prefix=/opt/samba4
make
make install

makeコマンドを実行すると、色々と不足してそうな内容が標準出力されるけど気にしないw

環境設定 (Samba3引き継ぎ)

環境設定を対話式に行ってくれる便利コマンドsamba-toolを実行する。
パッケージインストールではこれが見つからなかった。

  • ドメインはYOUR-DOMAIN.LOCAL
  • サーバのホスト名はaddc_server
  • DNSはSamba内蔵ではなく既に構築済みのBIND9.8を使用
  • LDAPはSamba内蔵を使用

今回は、既にSamba3で運用していた情報を引き継ぐ。
Samba3もLDAPも今回と同じ端末にインストールされていた場合である。
ただし、途中でこける。SIDは引き継がれるのだが、ユーザやグループは引き継がれない。なぜ・・・
きっと誰かが解決してくれる事を祈って、SIDだけ引き継ぐ。

/opt/samba4/bin/samba-tool domain classicupgrade --testparam=/usr/bin/testparam --realm=YOUR-DOMAIN.LOCAL --dns-backend=BIND9_FLATFILE /etc/samba/smb.conf
環境設定 (新規構築)

まぁ、SIDだけ引き継いでもねーとか、新規構築だぜ!って場合は以下のコマンドを実行。
rfc2307を使える用にしてLinux系アカウントをLDAPで認証できる様に対応しておく。

/opt/samba4/bin/samba-tool domain provision --use-rfc2307 --interactive


実行すると、環境を聞かれるので答えていくと色々設定していくログが表示される。
重要な箇所は、

  • Realmにレルムを入力する。既にBindで使用しているゾーンと同じにならない様にする事。
  • Server Roleはドメインコントローラであるdcを選択
  • DNSはBIND9_FLATFILEを選択
Realm [LOCALDOMAIN]: YOUR-DOMAIN.LOCAL
 Domain [YOUR-DOMAIN]: 
 Server Role (dc, member, standalone) [dc]: 
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_FLATFILE
Administrator password: 
Retype password: 
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=your-domain,DC=local
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=ado-tech,DC=local
rndc: 'freeze' failed: not dynamic
See /opt/samba4/private/named.conf for an example configuration include file for BIND
and /opt/samba4/private/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /opt/samba4/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              addc_server
NetBIOS Domain:        YOUR-DOMAIN
DNS Domain:            your-domain.local
DOMAIN SID:            S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx

これが実行結果のキャプチャ。
Administratorパスワードは複雑で推測されにくいものを設定しよう!!

/opt/samba4/sbin/samba -i -M single

上記コマンドで、シングルプロセスで起動しデーモンとしてではなくインタラクティブに起動する。
ログも標準出力されるので、お試し起動する際にはこのパラメータを渡すとよさげ。

DNS設定

ADではDNSとの連携が必須となる。
別件で既にDNSサーバ (bind9.8) を構築してあるので、今回は内蔵DNSを使用せずにそちらを利用する。
samba-toolが既にSamba側の設定ファイルを用意してくれているので、それを読み込む用にするだけ。
bindのバージョンが9.8より古いと設定方法が違うので要注意。詳しくは公式サイトなどを参照。

named.conf修正

/etc/named.confのoptionタグ内とグローバル領域に以下の項目を追加する。
optionタグ内は他の設定が既にあるので、タグ内の最終行あたりに追加すればいい。

options {
    ## [他の設定] ##
    tkey-gssapi-keytab "/opt/samba4/private/dns.keytab"
}
include "/opt/samba4.private/named.conf"

設定を終えたらnamedプロセスを再起動。

systemctl restart named.service
namedの確認
host -v SRV _ldap._tcp.your-domain.local

上記コマンドを実行する。以下のような結果が返れば問題なく稼働している。

_ldap._tcp.your-domain.local has SRV record 0 100 389 addc_server.your-domain.local

自動起動設定

/opt/samba4/sbin/samba4 を実行するだけでサーバが起動する。
けどこのままでは、毎回rootでログインしてsambaを実行してからでないと他のアカウントでログインできない。

OSが起動したら自動でサーバが起動できる様にする必要がある。
自動起動するにはサービスに登録する。Fedoraのサービスはsystemdで管理されている。
まずは/lib/systemd/system/samba.serviceファイルを作成。

[Unit]
Description=Samba Active Directory Domain Controller Daemon

[Service]
PIDFile=/opt/samba4/var/run/samba.pid
ExecStart=/opt/samba4/sbin/samba

[Install]
WantedBy=multi-user.target

forkする様にすると調子悪いので、単純に起動させる。
これを自動実行できる様にコマンドで登録する。

systemctl enable samba.service

Windows7 ProのADドメイン参加

Samba3で構築したNTドメインに参加する設定とほぼ一緒。(Fedora14でWindowsドメインサーバ構築 - クマーのえんじにありんぐ)
レジストリ変更を行わなくてよいので、その処理を省く。既にレジストリ追加している場合は削除。

Linux(Fedora18)をSamba4提供のLDAP認証へ

OpenLDAP認証の設定とほぼ一緒。(Fedoa14でLDAPサーバを構築 - クマーのえんじにありんぐ)
/etc/sssd/sssd.conf の内容が違うだけ。変更箇所は[domain/default]セクション。
以下の設定ファイルは、ADサーバにOU=kumaに所属に所属しているユーザでunix設定を施したアカウントをログイン対象にする。
ユーザ検索用に別途アカウントを用意しておく。
(今回はアカウント名がldapbindでパスワードをPASSWORD_FOR_BIND_DNとした場合)

[domain/default]
ldap_tls_reqcert = never
id_provider = ldap
min_id = 1000
ldap_id_user_start_tls = True
entry_cache_timeout = 60
ldap_uri = ldap://addc_server.your-domain.local
ldap_search_base = dc=your-domain,dc=local
ldap_schema = ad
ldap_default_bind_dn = cn=ldapbind,cn=Users,dc=your-domain,dc=local
ldap_default_authtok_type = password
ldap_default_authtok = PASSWORD_FOR_BIND_DN
ldap_access_filter = memberOf=ou=kuma,dc=your-domain,dc=local

ldap_user_search_base = ou=kuma,dc=your-domain,dc=local
ldap_user_object_class = user
ldap_user_search_filter = (&(objectClass=user)(uidNumber=*))
ldap_user_name = sAMAccountName
ldap_user_uid_number = uidNumber
ldap_user_gid_number = gidNumber
ldap_user_home_directory = unixHomeDirectory
ldap_user_shell = loginShell
ldap_account_expire_policy = ad
ldap_user_principal = userPrincipalName

ldap_group_search_base = ou=kuma,dc=your-domain,dc=local
ldap_group_object_class = group
ldap_group_name = msSFU30Name
ldap_group_gid_number = gidNumber
ldap_group_search_filter = (&(objectClass=group)(gidNumber=*))

Mac OS X 10.6以降でLDAP認証

LDAPサーバを構築してあるので、Macのアカウント管理もLDAPで行うことにした。
その為の設定が以下の通り。

  1. ドックまたはりんごメニューから「システム環境設定」を開く
  2. ユーザとグループのアイコンをクリック
  3. 左下の方にある「ログインオプション」をクリック
  4. 右下の方にある「ネットワークアカウントサーバ」の欄の「接続」(既に他の設定がされている場合は「編集」)をクリック
  5. ディレクトリユーティリティー」ボタンをクリックして「ディレクトリユーティリティー」を開く
    1. 左下鍵マークアイコンをクリックしてロック解除
    2. 管理者アカウントのパスワード入力
    3. 「サービス」内にある一覧から「LDAPv3」を選択して鉛筆アイコンをクリック
      1. 「新規」ボタンをクリック
        1. 「サーバ名またはIPアドレス」項目にLDAPサーバを入力 (ex:ldap.your-domain.com)
        2. 「認証に使用」をチェック
        3. 「続ける」をクリック
      2. 登録したサーバが一覧に表示されるので、選択して「編集」ボタンをクリック
        1. 「接続」タブ内の「設定名」を好きな名称に変更し、必要に応じてSSLを設定
        2. 「検索とマッピング」タブの「このLDAPv3にアクセスする時に使用」を「WFC2307(Unix)」に変更
        3. 「セキュリティ」タブの「クリア・テキスト・パスワードを使用不可にする」をチェック
        4. 「OK」ボタンをクリックして反映させる
      3. 「OK」ボタンをクリックして閉じる
    4. LION以降の場合は「ディレクトリエディタ」アイコンをクリック
    5. 「ノード」を「/LDAPv3/ldap.your-domain.com」に変更し、「表示」を「Users」に変更して登録済みのアカウントが表示されれば設定おk
  6. 「ネットワークアカウントサーバ」が緑ランプになっていればサーバ接続ができている
  7. 「ネットワークユーザにログインウインドウでログインする事を許可」をチェックして有功にする

コンソールでもユーザ検索を行うことでLDAPユーザ情報が取得可能か判定できる。
dscl(ディレクトリクライアント??)コマンドを起動して対話的にコマンドを入力して進める。

# dscl
> ls
> cd LDAPv3/ldap.your-domain.local/Users
> ls
> read ldapuser
  • ls、cdコマンドはbashのコマンドと同様のコマンド
  • read コマンドにアカウント名を渡すと、アカウント情報が表示される

ログオフすれば、LDAPユーザでログイン可能となる。

LION以降で認証できない問題

Reopard(スペルあってるっけ?)では問題無いんだけど・・・
山LionにアップグレードしたらLDAPユーザではログイン出来なくなった。
Lion以降はSambaを実装しないで、Apple独自のアプリを実装した事が原因っぽい。
いろいろ調べていくと、「クリア・テキスト・パスワードを使用不可にする」の設定に関わらず、SASL認証を行ってしまうらしい。
サーバ側がSASL認証に対応しているんだが、APPLE側のバグ??で関係ない箇所でもSASLを実行してしまうとか何とか。(詳しくは不明)

なので、Macでサーバが対応しているSASLの認証プロトコルを無効にする事が必要。
まずはサーバが対応しているSASLを取得

dapsearch -x -h ldap.your-domain.local -b "" -s base "(objectclass=*)" supportedSASLMechanisms

このコマンドでDIGEST-MD5・GSSAPI・CRAM-MD5が返ってきたので、これらを除外する設定をMacに施す。

sudo /usr/libexec/PlistBuddy -c "add ':module operations:ldap:Denied SASL Methods:' string DIGSET-MD5" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/ldap.your-domain.local.plist
sudo /usr/libexec/PlistBuddy -c "add ':module operations:ldap:Denied SASL Methods:' string GSSAPI" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/ldap.your-domain.local.plist
sudo /usr/libexec/PlistBuddy -c "add ':module operations:ldap:Denied SASL Methods:' string CRAM-MD5" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/ldap.your-domain.local.plist

このplistファイルはバイナリ形式でテキストエディターでは編集が困難なので、コマンドを使って編集する。
Xcodeがあればopenコマンドで編集する事が可能なのだが、パーミッションの関係で開けない。
sudoコマンド使っても開けないのでchmodコマンドでパーミッション変更しなければならないっぽい。
編集が終わったら元のパーミッションに戻したりでめんどいし、忘れたらセキュリティ的にあれなのでコマンドで実行した。

Fedora14でWindowsドメインサーバ構築

社内にはWindowsサーバが存在していない。そしてアカウント管理とかされていない。
端末ごとにアカウント生成したりで面倒くさいし、サーバ用アカウントと端末各種のアカウントのパスワードの同期がとれない。

そこでだ!!

Linux系とMacLDAPで認証を行う。
Windows機に関してはOpenLDAP, Samba の組み合わせでWindowsドメイン認証を行う。

専用のサーバはまだ用意できていないので、とりあえず実験的にFedora14がインストールされているデスクトップ機で構築。

LDAPサーバ

LDAPの構築については Fedoa14でLDAPサーバを構築 - クマーのえんじにありんぐ で構築済み。
ただこのままではSambaとの連携はできないので、一部設定の追加・修正を行う。

/etc/openldap/slapd.conf


#以下のスキーマを追加
include /etc/openldap/schema/samba.schema

#access to attrs=userPasswordの項目を修正
access to attrs=userPassword,SambaLMPassword,SambaNTPassword
by self write
by dn="cn=admin,dc=your-domain,dc=com"
by anonymous auth
by * none

#以下を続けて追加
access to attrs=shadowLastChange,loginShell,cn,sn,givenName,mail
by self write
by dn="cn=admin,dc=your-domain,dc=com"
by * read

本来であれば、動的にDBを書き換えればいいんだけど・・・slaptestコマンドで再構築(てへ

Samba構築

まずはSambaと便利ツールをインストール。インストールされるSambaは3.5.11。


yum install samba smbldap-tools

さくっと /etc/samba/smb.conf を変更


[global]
#文字コード設定
dos charset = CP932
display charset = UTF-8

#ドメイン名設定
workgroup = YOUR-DOMAIN.COM

#DNS的に言うWindowsネットワーク専用ホスト名
netbios name = PDCSERVER
server string = %h

#Sambaアカウント用パスワード保存DBにLDAPを指定
passdb backend = ldapsam:ldap://localhost

#ログ
log file = /var/log/samba/log.%m
max log size = 50

#SambaのパスワードとLinux用パスワードの動機を行うためのスクリプト指定
add user script = /usr/sbin/smbldap-useradd '%u'
delete user script = /usr/sbin/smbldap-userdel "%u"
add group script = /usr/sbin/smbldap-groupadd -p '%g'
delete group script = /usr/sbin/smbldap-groupdel "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
add machine script = /usr/sbin/smbldap-useradd -w '%u'

#移動プロファイルは使用しない
logon path =

#ドメイン認証機能を使用する
domain logons = Yes

# この
os level = 65
preferred master = Yes
domain master = Yes
wins support = Yes
ldap admin dn = cn=admin,dc=your-domain,dc=com
ldap group suffix = ou=Group
ldap machine suffix = ou=Computers
ldap passwd sync = yes
ldap suffix = dc=your-domain,dc=com
ldap user suffix = ou=People
admin users = Administrator
hosts allow = 127., 192.168.0.
cups options = raw

Samba起動&ユーザー登録

/etc/init.d/smb start

これでSambaが起動。

ユーザ管理はsmbldap-user*系コマンド、グループ管理にはsmbldap-group*系コマンドを使用する。
このコマンドで管理することによってSambaのアカウントとUnix系のアカウントの同期が行われる。

え?アカウントが二つあるのかって??
どうやら、samba自身は自前でアカウント情報を保持していて認証を行う。
認証されればそのアカウントでファイルシステムなどの操作を行うらしい。
つまり、両方にアカウントが存在しないと、ファイル共有などで読み書き出来ないって事か。
同じアカウントを二種類用意しなければならないけど、ldapとsmbldap-*系のツールを使えば一元管理ができるって作戦だ。

管理者権限を付与したいユーザには、「Domain Admin」グループに所属させる。
FedoraではgidNumber1000のfoobarグループに所属し、Windowsではシステム管理者としてログインするhogeアカウントを生成する方法

smbldap-groupadd -g 1000 foobar
smbldap-useradd -g 1000 hoge
smbldap-groupmod -m "Domain Admin" foobar

その他詳細のパラメータは、各コマンドに -? オプションでヘルプを確認できる。

Windows7クライアント設定

Win7Pro での設定です。
HomeEditionではそのままではアクティブディレクトリに参加できません。(レジストリ編集で可能になるみたいですが・・・)

レジストリ修正

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters 以下に DWORD で定義した以下の値の変数を二つ追加する。

DNSNameResolutionRequired = 0
DomainCompatibilityMode = 1

再起動するといいと思うよ。

ドメイン参加処理
  1. コントロールパネルからシステムを開く
  2. 開いたシステムウィンドウにある「設定の変更」をクリックする
  3. 「コンピュータ名」タブ内にある「変更」ボタンをクリック
  4. 「所属するグループ」項目を「ドメイン」に変更し、「ドメイン名」欄に参加するドメイン名(DOMAIN-NAME.COM)を入力して「OK」をクリック
  5. ドメイン管理者のアカウントを尋ねられるので、ドメイン管理者のID(Administrator)とパスワードを入力

無事に参加できると、ようこそダイアログが表示される。
再起動すればPDC(Samba)アカウントでログイン出来る様になってる。

ログインの方法は至って簡単。

  1. 起動したら[Ctrl]+[Alt]+[Del]を押せって画面が出る
  2. 言われた通りに三つのキーを同時に押す
  3. アカウントとパスワードを入力する画面が出るので入力する
    • アカウントが入力できない場合は「ユーザ切り替え」ボタンから「その他のユーザ」を選択する
    • 下記にある設定を行ってログイン画面の表示方法を切り替える
  4. ログオン先にドメインが指定されているか確認
    • 違うドメインやローカル認証になっている場合は、アカウントに「DOMAIN-NAME.COM\account_name」の様に入力すればおk
  5. ログオンする


再起動後ログイン画面がアカウントとパスワードを入力する画面になってない(最後のログインしたアカウントが表示されている)場合

  1. ローカルセキュリティポリシーを起動する
    1. スタートメニューまたは[Win]+[R]キーでアプリケーションの検索を開く
    2. 「ローカル」と入力して候補をだすか、「secpol.msc」と入力して直接起動する
  2. 「ローカル ポリシー」内の「セキュリティ オプション」を開く
  3. 一番下にある「対話型ログオン:最後のユーザ名を表示しない」をダブルクリック
  4. 「ローカルセキュリティの設定」タブを開いて「有効」を選択
  5. 「OK」をクリック

の操作を行って常にアカウントとパスワードを入力させる様にする

Redmine2.2 インストールしたよ

Redmineのインストール - Redmineガイド

Ruby(Ruby on Rails)の知識が乏しかったので苦労した。
公式マニュアル通りインストールしたけど、なんやかんやで環境が整っていなかったのでそれも併せた構築メモ。

  • サーバのOSはFedora14。
  • データベースには、MySQLを使用。

Redmine本体をダウンロード

既にSubversionがインストール済みの環境なので、SVNリポジトリからダウンロード。
インストールしたいディレクトリに移動してSVNコマンド実行

svn checkout http://svn.redmine.org/redmine/branches/2.2-stable redmine

Redmineを動かす為の環境構築

以下redmineをコピーしたディレクトリ内で実行。
公式マニュアル通りに gem install bundle から bundle install 実行したのだけれども、色々ライブラリ等足りなかったみたいでエラー出まくり。
エラーメッセージ(キャプチャ忘れた)を順に対応していった結果が以下のコマンド。
足りない物は全てyumコマンドからインストール可能でした。
suでroot権限に昇格するかsudoコマンドで実行する。

gem install bundle
yum install ruby-devel
yum install gcc 
yum install ruby-mysql
yum install mysql-devel
yum install ImageMagick-devel
gem install rails
bundle install --without development test postgresql sqlite

データベース構築

無事本体のインストールが終わったので、次はデータベース構築。
既にMySQL自体の構築は終わっていたのでSQL実行のみ。
データベース作成とユーザー作成を行う。MySQLにrootでログインして以下を実行。

  • データベース名はredmine
  • 接続するアカウント名はremineuser
  • 接続アカウントのパスワードはreminepass (実際には推測されにくい文字列にしよう!)
CREATE DATABASE redmine;
GRANT ALL PRIVILEGES ON redmine.* TO redmineuser@localhost IDENTIFIED BY 'redminepass';

構築した環境に合わせて設定ファイルを作成。
config/database.ymlを作成。config/database.yml.EXAMPLEからコピーすると簡単。
production環境のみをyamlファイルに記載。

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmineuser
  password: redminepass
  encoding: utf8

これでRedmineからDBにつながるようになったので、テーブルとデフォルトのレコードをInsert。
これらは公式マニュア通り実行。

rake generate_secret_token
RAILS_ENV=production rake db:imigrate
RAILS_ENV=production rake redmine:load_default_data

Apacheと連携

Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 — Redmine.JP

Passengerを使って、ApacheモジュールとしてRedmineを動かせるように構築。
Passenderをインストールしてpassenger-install-apache2-moduleコマンドを実行すればいい。

gem install passenger
passenger-install-apache2-module

だけじゃなかった (T_T)

Welcome to the Phusion Passenger Apache 2 module installer, v3.0.19.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.

--------------------------------------------

Checking for required software...

 * GNU C++ compiler... not found
 * Curl development headers with SSL support... not found
 * OpenSSL development headers... found
 * Zlib development headers... not found
 * Ruby development headers... found
 * OpenSSL support for Ruby... found
 * RubyGems... found
 * Rake... found at /usr/bin/rake
 * rack... found
 * Apache 2... found at /usr/sbin/httpd
 * Apache 2 development headers... not found
 * Apache Portable Runtime (APR) development headers... not found
 * Apache Portable Runtime Utility (APU) development headers... not found

Some required software is not installed.
But don't worry, this installer will tell you how to install them.

Press Enter to continue, or Ctrl-C to abort.

色々足りないって怒られちった。
not foundで指定されたライブラリをインストール。以下のコマンドを実行すれば大丈夫。

yum install gcc-c++ httpd-devel libcurl-devel

再度passenger-install-apache2-moduleコマンドを実行すればok。
最後の方にApacheの設定ファイルのサンプルが出力されるのでキャプチャ。
モジュール読み込みの設定。

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19
   PassengerRuby /usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

こっちはVertualHost設定のサンプルをキャプチャ。

Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public    
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
https://www.phusionpassenger.com

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

パーミッション変更

Passengerはrailsのconfig/environment.rbファイルのオーナーで実行するらしので所有者変更。
Passengerの実行ユーザーをapacheにしたいのでchmod実行でついでに全てのファイルオーナーをapacheに。

chown -R apache:apache /path/to/redmine/public

Apacheの設定

先ほどのPassengerインストール時に現れたサンプルを元にApacheの設定。
モジュール読み込み設定はhttp.confに記載して、それ以外の固有の設定はredmine.confという新たに作成したファイルに記載する。
そしてVirtualHostで分けていない環境なので、サブディレクトリにredmineを配置。
http://servername/redmine で起動できるようにする。

サブディレクトリで実行させるためには

と言った内容が当たり前のように書かれている。
なのに、403エラーになった。

[Redmine Rails] Passenger がシンボリックリンクを解決してくれない | Javable.Jp

偶然見つけたブログのおかげで解決できたので最終的な設定を。
要約すると、今回使ったPassengerではデフォルトではシンボリックリンクに対応していないと。
それを設定ファイルに明記すれば使えるんだぜ。PassengerAppRoot大事。
後は、RailsBaseURIとAliasを設定すればおk。

/etc/httpd/conf.d/redmine.conf

PassengerAppRoot /var/www/redmine
RailsBaseURI /redmine
Alias /redmine /var/www/redmine/public

<Directory /var/www/redmine/public>
    Options -MultiViews -Indexes -FollowSymLinks -ExecCGI
    Allowoverride on
</Directory>

Redmineのインストールは苦労するって噂を以前聞いた事あったけど・・・苦労し過ぎorz
インストールに一日半かかったがな :(
でもこれで、次からは楽にできるかな。


次がこない事を祈ろう。

はまった(2013-03-15追記)

OSをアップデートしたらうごかなくなった。
ブラウザからアクセスでも、rakeコマンド実行でも同じ内容のエラーが返る。

Please install the mysql adapter: `gem install activerecord-mysql-adapter` (mysql is not part of the bundle. Add it to Gemfile.)

どうやら、database.ymlのadapter項目を「mysql2」としなければならないようだ。
それに合わせて、mysql2, activerecord-mysql2-adapter をインストールしなければならない。
本来であれば、bundle install でmysql2がインストール&設定されるんだけど、アップデート行ったせいで整合性がとれなくなったみたい。
共有の場所にインストールすると整合性の不具合とかおきそうなので、redmineのローカル内に再インストール。

bundle install --path vender/bundler --without development test postgresql sqlite


あれ?
エラー再発で括弧の中身が変わった。(cannot load such file -- mysql2/mysql2) とかなったけど・・・
試行錯誤の末、端末再起動で解決した。キャッシュか?原因不明・・・

追記

サーバを再起動したら、403エラーでた。
Apacheのエラーログしらべたら、「Unable to start the Phusion Passenger watchdog」なるものが。
ググった結果、SELinuxが関係している事が判明。
環境構築中の記憶の片隅にあった記憶を思い出す。

「とりあえず、setenforce 0 実行しておくか。」

setenforceコマンドは再起動後は元の設定に戻ってしまうのでこれが原因。
ちゃんと設定しないとだけど、とりあえずsetenforce 0実行しておくか。
(後日繰り返しw

追記2(2013-15-09)

Subversionと連携したけれど、「リポジトリに、エントリ/リビジョンが存在しません。」とエラーな感じ。
試しに、redmineを動かしているアカウントで下記のコマンドを実行してみる。

sudo -u redmineアカウント svn list --xml https://svnのドメイン/リポジトリ

あらまぁそりゃそうだ。オレオレ証明書だからエラー出してる・・・

'https://svnのドメイン:443' のサーバ証明書の認証中にエラーが発生しました:
 - 証明書は信頼のおける機関が発行したものではありません。証明書を手動で認証
   するためにフィンガープリントを用いてください!

つわけで、redmine自体にオレオレ証明書を無視する様に修正する。
/path/to/redmine/lib/redmine/scm/adapters/subversion_adapter.rb の 263行目に --trust-server-cert を追加。(/path/to/はredmineがインストールされてるパスに置き換える)

        def credentials_string
          str = ''
          str << " --username #{shell_quote(@login)}" unless @login.blank?
          str << " --password #{shell_quote(@password)}" unless @login.blank? || @password.blank?
          str << " --no-auth-cache --non-interactive --trust-server-cert"
          str
        end

後はApacheを再起動することで無事に読み込み完了。

参考サイト