= README.ja

$Id$

== 名前

ActiveSambaLdap

== 説明

ActiveSambaLdapはSamba用LDAPエントリを管理するための
ActiveRecord風なライブラリです．また，smbldap-toolsのような
管理用コマンドラインツールも提供します．

== 作者

Kouhei Sutou <tt><kou@clear-code.com></tt>

== ライセンス

LGPL 2.1またはそれ以降のバージョン。詳細はlicense/lgpl-2.1.txtを見てください。

（Kouhei Sutouは受け付けたパッチも含めてライセンスを変更する権利があります。）

== 依存ライブラリ

* ActiveLdap >= 1.2.2

== インストール

  % sudo gem install activesambaldap

== メーリングリスト

asl-devel-ja@rubyforge.org

http://rubyforge.org/mailman/listinfo/asl-devel-ja/

== リファレンスマニュアル

http://asl.rubyforge.org/activesambaldap/

== 使用法

=== Railsと使う

まず、ActiveSambaLdapのgemを読み込みます。

config/environment.rbに以下を追加してください。

  config.gem "activesambaldap", :lib => "active_samba_ldap"

次に、Rails用ActiveSambaLdap環境を構築します．

  % script/generate scaffold_active_samba_ldap

config/ldap.ymlが生成されるので，環境にあわせて編集します．
指定できるオプションは，以下の「設定ファイルのオプション」の
項を参考にしてください．

==== 初期化

はじめに，Samba + LDAP環境を初期化する必要があります．
script/serverなどでRailsを起動し，
http://localhost:3000/sambaにアクセスしてください．
「Populate Samba + LDAP environment」というリンクがあるので，
それを使ってSamba + LDAP環境を初期化します．

あとは，ActiveRecordを利用した開発と同じように，
User/Computer/Groupクラスなどを使用して開発してください．

=== コマンドラインから使う

asl-*というコマンドを使います．asl-samba-*はsmb.confに設定す
るためのコマンドで，ターミナルから使うことはありません．

==== 設定

まず，あなたの環境にあわせて設定ファイルを編集します．デフォ
ルトで読み込まれるファイルは--helpオプションをつけて起動する
と確認できます．asl-*のどのコマンドでも表示されます．例えば，
asl-populateを使うとこうなります．

  % asl-populate --help
  ...
        --config=CONFIG              Specify configuration file
                                     Default configuration files:
                                       /etc/activesambaldap/config.yaml
                                       /etc/activesambaldap/bind.yaml
                                       /home/kou/.activesambaldap.conf
                                       /home/kou/.activesambaldap.bind
  ...

設定ファイルは上から順に読み込まれていきます．設定内容は後の
ファイルで上書きされます．上記の例だと，以下の順序で読み込ま
れていきます．

* /etc/activesambaldap/config.yaml
* /etc/activesambaldap/bind.yaml
* /home/kou/.activesambaldap.conf
* /home/kou/.activesambaldap.bind

config.yamlや*.confの後にbind.yamlや*.bindを読み込んでいるの
はセキュリティ上の配慮です．ホスト名などの見られてもよい情報
はconfig.yamlや*.confに書き，認証情報など見られてはまずい情
報はbind.yamlや*.bindに書き，適切なパーミッションを設定する
とよいでしょう．

==== 設定ファイルの書式

YAMLで記述します．三つのセクションからなります．

  update:
    # LDAPエントリを更新する時の設定
    ...

  reference:
    # LDAPエントリを参照する時の設定
    ...

  common:
    # 更新時／参照時で共有の設定
    ...

例えば，以下のようになります．

  common:
    sid: S-1-5-21-915876905-2926214379-2876160357
    base: dc=samba,dc=local,dc=net
    host: localhost
    method: :tls

  update:
    bind_dn: cn=admin,dc=local,dc=net
    password: admin

  reference:
    allow_anonymous: true

passwordはbind.yamlや*.bindに記述するとよいでしょう．

baseは必ず設定してください．また，sidも設定しておくとよいで
しょう．sidの値は以下のコマンドで確認できます．

  % sudo net getlocalsid

sidを設定しておかないと，毎回net getlocalsidをするため，効率
が悪くなります．

==== 設定ファイルのオプション

設定可能なオプションは以下の通りです．

[_base_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_host_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_port_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_scope_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_bind_dn_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_password_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_method_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．
[_allow_anonymous_]
   ActiveLdap::Base.setup_connectionのオプションと同じ．

[_sid_]
   SambaサーバのSID(Security Identifier)．
[_smb_conf_]
   Sambaの設定ファイルsmb.confがあるパス．
[_samba_domain_]
   Sambaサーバのドメイン
[_samba_netbios_name_]
   SambaサーバのNetBIOS名

[_password_hash_type_]
   LDAP上のパスワードをハッシュ化する時に使用するアルゴリズ
   ム．指定できるの
   は+:crypt+, +:md5+, +:smd5+, +:sha+, +:ssha+です。

   LDAP上のパスワードはSambaの認証時ではなく，UNIX上のユーザ
   の認証時に利用されます．

   デフォルト: +:ssha+

[_users_suffix_]
   LDAP上のユーザエントリを格納するツリー．baseからの相対パ
   スを指定する．

   例: <tt>"ou=Users"</tt>

[_groups_suffix_]
   LDAP上のグループエントリを格納するツリー．baseからの相対パ
   スを指定する．

   例: <tt>"ou=Groups"</tt>

[_computers_suffix_]
   LDAP上のコンピュータエントリを格納するツリー．baseからの相対パ
   スを指定する．

   例: <tt>"ou=Computers"</tt>

[_idmap_suffix_]
   LDAP上のidmapエントリを格納するツリー．baseからの相対パ
   スを指定する．

   例: <tt>"ou=Idmap"</tt>

[_start_uid_]
   新しいユーザを作ったときに，はじめに使用するUID(User
   Identifier)．以降のUIDは1ずつ増えていく．

   デフォルト: +10000+

[_start_gid_]
   新しいユーザを作ったときに，はじめに使用するGID(Group
   Identifier)．以降のGIDは1ずつ増えていく．

   デフォルト: +10000+

[_user_login_shell_]
   新しく作成したユーザのログインシェル．

   デフォルト: <tt>"/bin/false"</tt>

[_user_home_directory_]
   新しく作成したユーザのホームディレクトリ．%Uはユーザ名に
   置換される．

   デフォルト: <tt>"/home/%U"</tt>

[_user_home_directory_mode_]
   ユーザのホームディレクトリを作成する際に設定するパーミッ
   ション用のモード．

   デフォルト: +0755+（8進数）

[_user_gecos_]
   ユーザのGECOSフィールドの値．%Uはユーザ名に置換される．

[_user_home_unc_]
   Windowsから見たときのユーザのホームへのパス．
   UNC(Universal Naming Convention)で記述する．%Uはユーザ名
   に置換される．

   デフォルト: <tt>"\\\\SambaサーバのNetBIOS名\\%U"</tt>

[_user_profile_]
   ユーザプロファイルへのパス．
   UNC(Universal Naming Convention)で記述する．%Uはユーザ名
   に置換される．

   デフォルト: <tt>"\\\\SambaサーバのNetBIOS名\\profiles\\%U"</tt>

[_user_home_drive_]
   ユーザのホームを割り当てるドライブ名．

   デフォルト: <tt>"H:"</tt>

[_user_logon_script_]
   ユーザがログオンしたときに実行するスクリプトファイル名．

   デフォルト: <tt>"logon.bat"</tt>

[_skeleton_directory_]
   ユーザのホームディレクトリを作成する時に雛型とするディレ
   クトリ．

   デフォルト: <tt>"/etc/skel"</tt>

[_default_user_gid_]
   デフォルトでユーザが所属するグループ．

   デフォルト: <tt>"Domain Users"</tt>グループ

[_default_computer_gid_]
   デフォルトでコンピュータが所属するグループ．

   デフォルト: <tt>"Domain Computers"</tt>グループ

==== 初期化

asl-*を用いてSamba + LDAP環境を管理する前に，一度だけ
asl-populateを起動してLDAPサーバに基本的なエントリを追加しま
す．

  % sudo asl-populate

もし，root権限が無くても実行できるのであれば以下のようにする
とよいでしょう．（root権限チェックは必要ないかもしれない）

  % fakeroot asl-populate

==== 管理

コマンドラインからはasl-user*, asl-group*, asl-populate,
asl-purge, asl-passwordを使って管理してください．各コマンド
の使いかたは--helpオプションを参考にしてください．

==== smb.confの設定

Srvtools[http://support.microsoft.com/kb/173673/]を使って
Windowsからユーザ管理を行いたい場合は，また，Sambaをドメイン
コントローラとして動作させたい場合は，以下のようにsmb.confを
設定します．ここでは，asl-samba-*を使います．

（ドメインコントローラとして動作させるけど，Srvtools でユー
ザ管理を行わない場合はadd machine script以外のなんとかscript
は設定しなくてもよい気がする．）

  passdb backend = ldapsam:ldap://127.0.0.0
  ldap admin dn = cn=admin,dc=local,dc=net
  ldap suffix = dc=samba,dc=local,dc=net
  ldap user suffix = ou=Users
  ldap group suffix = ou=Groups
  ldap machine suffix = ou=Computers
  ldap idmap suffix = ou=Idmap
  ldap passwd sync = yes

  admin users = "@Domain Admins"
  add user script = /.../asl-samba-useradd "%u"
  delete user script = /.../asl-samba-userdel "%u"
  add group script = /.../asl-samba-groupadd "%g"
  delete group script = /.../asl-samba-groupdel "%g"
  add user to group script = /.../asl-samba-groupmod "%g" --add-members "%u"
  delete user from group script = /.../asl-samba-groupmod "%g" --delete-members "%u"
  set primary group script = /.../asl-samba-usermod "%u" --gid "%g"
  add machine script = /.../asl-samba-computeradd "%u"

Sambaを起動する前に，以下を実行してldap admin dnで指定した
LDAP管理ユーザのパスワードを設定しておく必要があります．

  % sudo /usr/bin/smbpasswd -W

== トラブルシューティング

=== グループ一覧がでない

以下のコマンドでグループ一覧を表示する事ができます。

  % net rpc group list --user=USER_NAME

もし、asl-populateした後なのに上記のコマンドでひとつもグルー
プがでない場合は以下のことを確認してください。

* samba.schemaが古くないか

  sambaSIDのエントリに以下の設定がない場合は古い
  samba.schemaである可能性があります。最新のものに更新して
  ください。

    SUBSTR caseExactIA5SubstringsMatch

== 感謝

* Henrik Krög: バグを報告してくれました。
* Olivier DIRRENBERGER: バグを報告してくれました。
* Francesco Malvezzi: バグを報告してくれました。
* Kazuhiro NISHIYAMA: バグを報告してくれました。
* Orlando Marquina: バグを報告してくれました。
* Piotr Romanczuk: バグを報告してくれました。
