samba 4.xのデータバックアップ手法

samba 4.xにおけるデータのバックアップ手法を調べた。

まず、公式記述:「Backup and Recovery
公式記述「Back up and Restoring a Samba AD DC」(2018/01/30 URLが変更になっていたため修正)

公式記述の要点
・ドメインコントローラを複数用意すれば、どれか1台でも残っていればデータは保持されるので失われることはないよ
・sambaの内部データベースとしてLDBとTDBの2種類ある
・標準ではインストールされないがsourceにsamba_backupというスクリプトが用意されている
・samba_backupを実行すると/usr/local/backupsにtar.bz2形式のバックアップができる
・リストアは、tarコマンドを使って行う

で、samba_backupを使うには、ソースファイルのディレクトリから/usr/local/sbinなどにコピーする必要があります。

[root@ホスト名 samba-4.1.16]# cp ./source4/scripting/bin/samba_backup /usr/local/sbin/
[root@ホスト名 samba-4.1.16]# mkdir /usr/local/backups
[root@ホスト名 samba-4.1.16]# chmod 750 /usr/local/backups
[root@ホスト名 samba-4.1.16]# 

ただ・・・このまま実行すると

samba_backup: line 54: tdbbackup: コマンドが見つかりません
Error while backuping ./private/idmap.ldb

といったエラーが出力されるかも?

これは、tdbbackupがPATHに無いため。
samba_backupスクリプトのWHERE=~行の次ぐらいに
「PATH=/usr/local/samba/sbin:/usr/local/samba/bin:$PATH」といった記述を追加して、tdbbackupコマンドにパスを通します。

[root@ホスト名samba-4.1.15]# /usr/local/sbin/samba_backup
[root@ホスト名 samba-4.1.15]# ls -l /usr/local/backups/
合計 5912
-rw-r--r--. 1 root root     415  3月 12 10:12 2015 etc.120315.tar.bz2
-rw-r--r--. 1 root root 6043216  3月 12 10:12 2015 samba4_private.120315.tar.bz2
-rw-r--r--. 1 root root     481  3月 12 10:12 2015 sysvol.120315.tar.bz2
[root@ホスト名 samba-4.1.15]#

Courier-IMAPからdovecotへの移行

Courier-IMAPの最近のバージョンが使っているcourier-authlibは、vpopmail連携機能が切られてしまい使えなくなってしまっているため代替策を検討中。

まず、dovecotに乗り換え実験中。

Dovecotのwikiを探すと「AuthDatabase/VPopMail」というページを発見。
vpopmail専用のデータベースファイルを使っている場合は、「–with-vpopmail」でコンパイル。
vpopmailからmysqlを使っている場合は、「–with-sql –with-mysql」でコンパイルということが分かる。

次に、設定。

うちの環境では、単純なvpopmailではなく、ユーザ管理にmysqlを利用している。
このため、vpopmail由来のmysqlを使う場合に重要なポイントのみを記載する。

・「/etc/dovecot/dovecot-sql.conf.ext」

password_query = SELECT CONCAT( pw_name,'@', pw_domain ) AS user,\
        pw_passwd AS password \
        FROM vpopmail  \
        where pw_name='%n' AND pw_domain='%d' ;
user_query = SELECT pw_dir as home, \
        <vpopmailのUID> AS uid, <vchkpwのGID> AS gid \
        FROM vpopmail \
        WHERE pw_name = '%n' AND pw_domain = '%d'

なお、動作確認時はmysqlを起動して「SELECT CONCAT( pw_name,’@’, pw_domain ) AS user, pw_passwd AS password FROM vpopmail where pw_name=’ユーザ名’ AND pw_domain=’ドメイン名’ ;」という感じで実行して、以下の様な感じで表示されればok。

# mysql -u root --password=パスワード
mysql> use vpopmail;
Database changed
mysql> SELECT CONCAT( pw_name,'@', pw_domain ) AS user, pw_passwd AS password FROM vpopmail where pw_name='ユーザ名' AND pw_domain='ドメイン名';
+---------------------+------------------------------------+
| user                | password                           |
+---------------------+------------------------------------+
| ユーザ名@ドメイン名   | 文字列~                           |
+---------------------+------------------------------------+
1 row in set (0.00 sec)

mysql> quit
Bye
#

・「/etc/dovecot/conf.d/10-auth.conf」と「/etc/dovecot/conf.d/auth-sql.conf.ext」
上記で作成したsql設定ファイルをここで指定
10-auth.confでは、下記の「sql」に関するところだけを修正。(vpopmailはいじらない)

!include auth-sql.conf.ext

auth-sql.conf.extでは、dovecot-sql.conf.extのパスがきちんと指定されていることを確認。

・「/etc/dovecot/conf.d/10-mail.conf」
Maildirを操作する際のユーザ権限のチェックをしている項目の設定を変更する。
今回は元々vpopmailの1アカウントのみで全ユーザを動かしていたため、UIDを1つだけ指定している形になる。

first_valid_uid=<vpopmailのUID>
last_valid_uid=<vpopmailのUID>
first_valid_gid=<vchkpwのGID>
last_valid_gid=<vchkpwのGID>

なお、この設定をしていないと、POP3などでログインしてみると、/var/log/maillogに以下のようなエラーが出力される。

Feb 25 15:21:46 サーバ名 dovecot: pop3: Error: user ユーザ名@ドメイン名: Mail access for users with UID <vpopmailのUID> not permitted (see first_valid_uid in config file, uid from userdb lookup).
Feb 25 15:21:46 サーバ名 dovecot: pop3: Error: Invalid user settings. Refer to server log for more information.

・POP3の未読管理の移行
標準設定だとPOP3のUIDLコマンドの出力結果が全然違うので、メーラ側の未読管理がリセットされる。
dovecot公式wikiに「Migration」という項目がある。

「/etc/dovecot/conf.d/20-pop3.conf」内の「pop3_uidl_format」を定義することで対処できる、とあるが、20-pop3.conf内に記載されている「Courier: %f or %v-%u (both might be used simultaneosly)」を設定してみると、「%f」と「%v-%u」は、Courier-IMAPでの結果と異なるものになる。

よく見てみると、「Migration/Courier v0.43 and later to Dovecot v1.1+」と専用の項目がある。
「courier-dovecot-migrate.pl」を使って、各Maildir内にある「courierimapuiddb」などをdovecot用の「dovecot-uidlist」にコンバートする、というもの。
コレを実行することで、同じUIDLの結果が得られるようになった。

・「/etc/dovecot/conf.d/15-mailboxes.conf」
IMAP用メールボックスの標準名調整。
いままで下書きフォルダ名「Draft」、スパムメール用「Spam」と設定していた。
dovecotの標準設定では「Drafts」、「Junk」であるため、読み替え設定を入れる

  mailbox Draft {
    special_use = \Drafts
  }
  mailbox Spam {
    special_use = \Junk
  }
  mailbox Trash {
    special_use = \Trash
  }

・・・・・・・

で、ここまでやって気がついたこと。
Courier-IMAPでも、vpopmail関係無く、直接MySQLを見れば良かったんじゃね?ということ。

まぁ、2つのバージョンの並行動作が難しいので、動作確認がしにくく、やりたくはないですがね。

RoundCubeは次の1.1でIE8とFirefox 3.6のサポートを切る

Webmailソフトの「RoundCube」に、version 1.0.1が出ていたのに気がついて、アップデート。

ついでに、「System Requirements」を確認・・・

Internet Explorer 6 (Windows 2000/XP) – not supported since Roundcube 1.1
Internet Explorer 7 (Windows XP) – requires legacy_browser plugin since Roundcube 1.1
Internet Explorer 8 (Windows XP/7) – requires legacy_browser plugin since Roundcube 1.1
Firefox 3.6 (Windows XP, Linux) – requires legacy_browser plugin since Roundcube 1.1

おや?
次のバージョン 1.1から、古いブラウザのサポートをやめるようです。

RoundCube 1.1から、内部で使用しているjQueryのバージョンを2.xに変更するようで、そのjQuery 2.xがこれらのブラウザをサポートしていない(jQuery 2.0 Releasedより)ということに起因する変更点である模様です。

とりあえずは、legacy_browser pluginを使うという、救済処置がIE6以外にはあるようです。

samba 4.xでドメイン/フォレストの機能レベルを変更する

2016/07/19追記

Samba 4.4.5における現状についてを「Samba 4.4.xでActive Directoryを1から立てる」にて公開中です。

2018/02/01追記
Samba 4.7.4に置ける機能レベルについて下記の記事に追加しました。


Samba 4.xでActive Directoryを1から立てる」で作成したActive Directoryは、ドメインの機能レベル/フォレストの機能レベルが共に「Windows Server 2003」となっていた。

Sambaのコマンドで確認すると、以下の様になっていた。

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'

Forest function level: (Windows) 2003
Domain function level: (Windows) 2003
Lowest function level of a DC: (Windows) 2008 R2
[root@adtest ~]#

で・・・2014年5月現在、機能レベルの変更をWindowsから行うことはできないらしい。

samba公式Wikiの「Raising the functional levels」に「Hint: This way does not work at the moment! 」として注意書きがついている。

samba-toolコマンドで変更する、とのこと。
samba 4.1.7の段階で指定できる機能レベルは’2003′, ‘2008’, ‘2008_R2’の3種類。
2018/02/01時点で最新のsamba 4.7.4でも、2012と2012_R2はサポートされていません。(Kerberos関連の動作改善などが取り入れられていない)

まずは、ドメインレベルの上昇から・・・

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level raise --domain-level=2008_R2
Domain function level changed!
All changes applied successfully!
[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'

Forest function level: (Windows) 2003
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
[root@adtest ~]#

続いて、フォレストレベル・・・

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level raise --forest-level=2008_R2
Forest function level changed!
All changes applied successfully!
[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level show
Domain and forest function level for domain 'DC=adosakana,DC=local'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
[root@adtest ~]#

ちなみに、先にフォレストレベルを上げようとすると、以下の様なエラーとなります。

[root@adtest ~]# /usr/local/samba/bin/samba-tool domain level raise --forest-level="2008_R2"
ERROR: Forest function level can't be higher than the domain function level(s). Please raise it/them first!
[root@adtest ~]#

Samba 4.0で必要なポートとRHEL用iptables設定

Samba 4.0で必要なポートについて、Sambaの公式wiki「Samba port usage」を参考に設定を作成した。

とりあえず、上記のページから必要なポートについて引用

Global Cataloge3268tcp

Service Port protocol
DNS 53 tcp/udp
Kerberos 88 tcp/udp
End Point Mapper (DCE/RPC Locator Service) 135 tcp
NetBIOS Name Service 137 udp
NetBIOS Datagram 138 udp
NetBIOS Session 139 tcp
LDAP 389 tcp/udp
SMB over TCP 445 tcp
Kerberos kpasswd 464 tcp/udp
LDAPS (only if “tls enabled = yes”) 636 tcp
Global Cataloge SSL (only if “tls enabled = yes”) 3269 tcp
Multicast DNS 5353 tcp/udp

また、Microsoft公式の「Windows のサービス概要およびネットワーク ポート要件」も参照して、必要そうなポートについて、以下のように設定した。

# for DNS
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
# for Kerberos
-A INPUT -p udp -m udp --dport 88 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 88 -j ACCEPT
-A INPUT -p udp -m udp --dport 464 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 464 -j ACCEPT
# for LDAP
-A INPUT -p udp -m udp --dport 389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 636 -j ACCEPT
# for SMB
#-A INPUT -p udp -m udp --dport 137 -j ACCEPT
#-A INPUT -p udp -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
# for RPC and SYSVOL
-A INPUT -p tcp -m tcp --dport 135 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5722 -j ACCEPT
# for Global Catalog
-A INPUT -p tcp -m tcp --dport 3268 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3269 -j ACCEPT
# for Multicast DNS
-A INPUT -p udp -m udp --dport 5353 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5353 -j ACCEPT

上記をRHEL/CentOSの/etc/sysconfig/iptablesの適切な位置に追加する。

for SMBのUDP 137,138については、samba wikiの方にいるポートとして記載されているが、無くても動くようなのでコメントにしている。