
Ubuntu日本語フォーラム

ログインしていません。
昨日、ldapのログが出力されていないスレを立てた人です(https://forums.ubuntulinux.jp/viewtopic.php?id=13356)。
ログの出力ができたので本来の目的のsamba、ldapの連携について調査を開始したのですが、どうにも連携がうまくいきませんでしたので、再度スレを立てました。
何度も申し訳ないです。
とりあえず、ldapによるunixアカウントのログイン(ubuntuにldapで登録したアカウントでログインすること)、sambaサーバでゲストログインができること、それぞれができるサーバを準備しました。
以下、
ldapサーバを「ldap server」
sambaサーバを「samba server」
というホスト名で話をしていきます。
sambaクライアントとなるwindowsマシンから「samba server」にアクセスして認証が必要なフォルダにアクセスしようとしたところ、認証に失敗してフォルダにアクセスすることができませんでした。
ゲストでアクセスできるフォルダには読み書き可能でアクセスできるようになっているので、sambaの設定自体は有効になっていると思います。
また、「samba server」には「ldap server」で登録したアカウントでログイン出きるので「samba server」と「ldap server」の疎通もうまくいっているものと思います。
以上の前提を踏まえて、ログを解析したところ、「samba server」に以下のようなログがありました。
.
.
.
[2012/04/24 14:33:03, 2] lib/smbldap.c:890(smbldap_open_connection)
smbldap_open_connection: connection opened
[2012/04/24 14:33:03, 3] lib/smbldap.c:1101(smbldap_connect_system)
ldap_connect_system: successful connection to the LDAP server
[2012/04/24 14:33:03, 4] lib/smbldap.c:1177(smbldap_open)
The LDAP server is successfully connected ・・・1
[2012/04/24 14:33:03, 4] passdb/pdb_ldap.c:1600(ldapsam_getsampwnam)
ldapsam_getsampwnam: Unable to locate user [chibam] count=0 ・・・2
[2012/04/24 14:33:03, 3] smbd/sec_ctx.c:418(pop_sec_ctx)
pop_sec_ctx (0, 0) - sec_ctx_stack_ndx = 0
[2012/04/24 14:33:03, 3] auth/auth_sam.c:282(check_sam_security)
check_sam_security: Couldn't find user 'XXXXX in passdb. ・・・2’
[2012/04/24 14:33:03, 2] auth/auth.c:320(check_ntlm_password)
check_ntlm_password: Authentication for user [XXXXX] -> [XXXXX] FAILED with error NT_STATUS_NO_SUCH_USER
[2012/04/24 14:33:03, 3] smbd/sesssetup.c:42(do_map_to_guest)
No such user XXXXX [MACHINE] - using guest account ・・・3
[2012/04/24 14:33:03, 4] passdb/pdb_ldap.c:2550(ldapsam_getgroup)
ldapsam_getgroup: Did not find group, filter was (&(objectClass=sambaGroupMapping)(gidNumber=65534))
.
.
.
上記のログから
1、「ldap server」と疎通はできているが
2、ユーザ「XXXXX」が見つからないので
3、ゲストユーザになりますよ
と判断しました。
次に、「ldap server」側がどうなっているかを見ると
.
.
.
Apr 24 14:33:04 ldapserver slapd[1420]: conn=1013 op=2 SRCH base="dc=YYYY,dc=com" scope=2 deref=0 filter="(&(uid=XXXXX)(objectClass=sambaSamAccoun
t))"
Apr 24 14:33:04 ldapserver slapd[1420]: conn=1013 op=2 SRCH attr=uid uidNumber gidNumber homeDirectory sambaPwdLastSet sambaPwdCanChange sambaPwdMust
Change sambaLogonTime sambaLogoffTime sambaKickoffTime cn sn displayName sambaHomeDrive sambaHomePath sambaLogonScript sambaProfilePath description s
ambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword sambaNTPassword sambaDomainName objectClass sambaAcctFlags sambaMungedDial sambaBa
dPasswordCount sambaBadPasswordTime sambaPasswordHistory modifyTimestamp sambaLogonHours modifyTimestamp uidNumber gidNumber homeDirectory loginShell
gecos
Apr 24 14:33:04 ldapserver slapd[1420]: conn=1013 op=2 SEARCH RESULT tag=101 err=0 nentries=0 text=
.
.
.
となっているので、ユーザを探しにきているがヒットしないので0を返している(nentries=0のところ?)と判断しました。
と言うわけで、unixアカウント自体はあり(ログインできている)、sambaのアカウントは有効になっていなさそうだと予測を立ててldapの中身を確認してみました。
まずは、unixのアカウントを確認します。
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "dc=YYYY,dc=com" "(&(uid=XXXXX)(objectClass=posixAccount))"
<SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: uid=XXXXX,ou=people,dc=YYYY,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: XXXXX
sn: Xxxxx
givenName:
.
.
.
ちゃんといます。
つづいて、sambaアカウントを確認します。
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "dc=YYYY,dc=com" "(&(uid=XXXXX)(objectClass=sambaSamAccount))"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
何も出ません...
というわけで、sambaSamAccountというobjectClassに中身が入ってないためにヒットしないのではないか?と考えましたが、そもそも、エラーの原因はこの解釈であってますか?
ということと、エラーの原因がsambaSamAccountが入っていないことだとしたら、そもそもこの値はどうやって設定するのでしょうか?
という二つについて有識者の方教えていただけないでしょうか?
ちなみに、「samba server」で「smbldap-useradd XXXXX」とやっても、
「/usr/sbin/smbldap-useradd: user XXXXX exists」
と出るので、sambaアカウントを新たに追加することはできなさそうです。
よろしくお願いいたします。
オフライン
この場合、どこをどうこう以前にsmb.confの設定に強く依存するので、あんちょこにしたページか現状のsmb.confを貼って頂かないと、識者でも回答はできないのではないかと思います。
https://help.ubuntu.com/10.04/serverguide/C/samba-ldap.html あたりをあんちょこに、/usr/share/doc/smbldap-tools/examples/smb.conf.gz あたりを使っている前提だと、「先に自分でLDAPユーザーを作らずにsmbldap-useraddする」か「先に作ってしまったら、自分で相当するldif書く」のどちらかかと。
オフライン
hitoさん返信ありがとうございます。
あんちょこはubuntuのserverguideを元にしています。
で、いろいろ試してみたんですが、unixアカウントを用意しておいてあんちょこの手順を踏むとsambaのユーザと共有できるのかと思ってたんですが、そうではなくて、smbldap-useraddとかでアカウントを新たに作らないといけないみたいですね。
すでにunixのアカウントがある場合に「smbldap-useradd」を使うと既にユーザがいる旨、表示されてしまうので、ldifを起こしてやらないとダメみたいですね。
なんかうまい方法が無いかもう少し調査してみます。
ありがとうございました。
オフライン
とりあえず何とかなった方法を書いておきます。
前提条件は
1, groupAというunixアカウント用のgroupが存在する。
2, \\samba\groupというフォルダはgroupAに所属しているアカウントのみ開ける
です。
smbldap-useradd -g groupA -a test2
と打ってsambaユーザを作ろうとすると
Error: SID not set for unix group 1002
check if your unix group is mapped to an NT group
と表示される。
sambaで使えるgroupの情報には「SID」が必要っぽいと辺りをつけて、「ldap server」でsambaのデフォルトのグループを見ると
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "ou=groups,dc=YYYY,dc=com"
dn: cn=domainadmin,ou=groups,dc=YYYY,dc=com
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: domainadmin
gidNumber: 1006
sambaSID: S-1-2-34-567...
sambaGroupType: 2
displayName: domainadmin
memberUid: domainadmin
.
.
.
となっているので、同様に「ldap server」でgroupAの状態を確認すると
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=groupA,ou=groups,dc=YYYY,dc=com"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=groupA,ou=groups,dc=YYYY,dc=com
objectClass: posixGroup
cn: groupA
gidNumber: 1002
となり、sambaGroupMappingがない。
地道にldifファイルを作って足りない項目を足すことにする。
cat > groupAaddsambagroup.ldif
dn: cn=groupA,ou=groups,dc=YYYY,dc=com
changetype: modify
add: objectClass
objectClass: sambaGroupMapping
-
add: sambaSID
sambaSID: S-1-2-34-567...
-
replace: sambaGroupType
sambaGroupType: 2
Ctrl-C
作成したldifを読み込む。
ldapmodify -x -D "cn=admin,dc=YYYY,dc=com" -W -H ldapi:/// -f ./groupAaddsambagroup.ldif
groupAを確認してみる。
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=groupA,ou=groups,dc=YYYY,dc=com"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=groupA,ou=groups,dc=YYYY,dc=com
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: groupA
gidNumber: 1002
sambaSID: S-1-2-34-56789.....
sambaGroupType: 2
ちゃんとsambaGroupMappingが追加されている。
再度「smbldap-useradd -g groupA -a test2」を実行。
windowsから「\\samba\group」フォルダにアクセスして認証が通ることを確認。
というわけで、なんとか新規ユーザの登録はできるようになりました。
同じように、地道に既存のunixユーザアカウントにsambaの情報を追加して行ってみます。
オフライン
すいません。
またしても自己レス。
上に書いたようなことしなくても
smbldap-groupmod -a groupA
ってやるだけでよさそう・・・。
そんでもって、ユーザも
smbldap-usermod -a 既存ユーザ
ってやって、smbldap-passwdで良さげな感じ・・・。
追加(add)じゃなくて変更(mod)だったか...orz
オフライン