Samba4ã«ã¯çµ±åãããPythonã€ã³ã¿ãŒãã§ã€ã¹ããããŸãã å€ãã®ãŠãŒãã£ãªãã£ïŒããšãã°ãsamba-toolïŒã¯ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠPythonã§å®å
šã«å®è£
ãããŠããŸãã
LDAPã€ã³ã¿ãŒãã§ãŒã¹ããè¡ããããã¹ãŠã®ããšã¯ãSamba 4 Python Scriptingã§è¡ãããšãã§ããŸãã å©ç¹-ãã¡ã€ã«ã¢ã¯ã»ã¹ãããã¯ãLDAPã«ã¯ãªãé«éã§ããã€ãã®æ©èœãæå³ããŸãã ããšãã°ãããããŒã¿ããŒã¹ãããŠãŒã¶ãŒãã¹ã¯ãŒãã®ããã·ã¥ãååŸããŠãå¥ã®ããŒã¿ããŒã¹ã«è»¢éã§ããŸãã ãŸããSIDããã¹ã¯ãŒãããã®ä»ãã¹ãŠãåãããŠãŒã¶ãŒèªèº«ãå¥ã®ãã¡ã€ã³ã«è»¢éããå¿
èŠããããŸãïŒSIDã®å±¥æŽã«åé¡ã¯ãããŸããïŒã
ããã¥ã¡ã³ãã ãã§ã¯ååã§ã¯ãããŸãããã
ãœãŒã¹ãããå Žåã¯
<samba-source> / python / sambaãã£ã¬ã¯ããªã«ããããã以å€ã®å Žåã¯
/usr/lib/python2.7/dist-packages/sambaã«ãããŸãã
æãè峿·±ãã®ã¯ãsamdb.pyãã¡ã€ã«ã§ããããã¯ãADã®ã»ãšãã©ã®æäœã®å®è£
ã§ãã
ADãã¡ã€ã³ã³ã³ãããŒã©ãŒã®æ§æã«Samba4ãã€ã³ã¹ããŒã«ãããŠãããšããŸãã Pythonããã°ã©ã ããADããŒã¿ããŒã¹ã«æ¥ç¶ããŠã¿ãŸãããã ãŸããå¿
èŠãªã©ã€ãã©ãªãã€ã³ããŒãããŸãã
ã¡ã€ã³ããŒã¿ããŒã¹/sam.ldbãžã®æ¥ç¶ïŒ
lp = samba.param.LoadParm() lp.load(samba.param.default_path())
ïŒSamba4ã€ã³ã¹ããŒã«ã®ãã¡ã€ã«ããã³ãã£ã¬ã¯ããªã®éæšæºã®é
眮ãããã«ã¯å¥ã®äžæããŒã¹ã«æ¥ç¶ããããšãå¯èœã§ããããã«ã€ããŠã¯ä»¥äžãåç
§ããŠãã ãããïŒ
ããã§ãsamãªããžã§ã¯ãã䜿çšããŠãLDAPæ§æã«å®å
šã«åŸã£ãŠADããŒã¿ããŒã¹ãæ€çŽ¢ããã³å€æŽã§ããŸãã
ããšãã°ãããŒã¿ããŒã¹æ€çŽ¢ïŒããŒã¹ã¯ãCN =ãŠãŒã¶ãŒãDC = myDomãDC = lanãã¿ã€ãã®LDAPããªãŒããŒããåŒã¯ãªãã·ã§ã³ã®éžææ¡ä»¶ãattrsã¯å¿
èŠãªå±æ§ã®ãªã¹ãã§ãïŒïŒ
res = sam.search(base=base, expression=expression, attrs=[*])
ãŠãŒã¶ãŒãOSã«æšªãããããšãèš±å¯ããŸãã
base = "OU=myUsers,DC=myDom,DC=lan"
ãã¹ã¯ãŒããsecretãã§ãŠãŒã¶ãŒãtstããäœæããŸãã SamDBã¯ã©ã¹ã«ã¯æ¢è£œã®ã¡ãœãã-newuserïŒïŒããããŸãããããã詊ãããšãã§ããŸãã
newUsr = "tst" usrPass = "secret" ld = {'dn': 'CN=%s,%s' % (newUsr,base), "sAMAccountName": newUsr, "userPrincipalName": "%s@%s" % (newUsr,"myDom.lan"), "objectClass": "user", "displayName": newUsr, "description": newUsr, "homeDirectory": r"\\%s\users\%s" % ("myHost",newUsr), 'scriptPath': "loginScr.cmd", } sam.transaction_start() try: sam.add(ld) sam.setpassword("(samAccountName=%s)" % ldb.binary_encode(newUsr), usrPass, False) except: sam.transaction_cancel() print '!!!error' else: sam.transaction_commit()
ã芧ã®ãšãããSamDBã¯ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŠããŸãã
ADããŒã¿ããŒã¹å
šäœãããã»ã©å€§ãããªãå Žåã¯ã次ã®ã³ãã³ãã§è¡šç€ºïŒããã³ç·šéïŒã§ããŸãã
:~
ãã ãã-sãŸãã¯-bïŒããŒã¹ïŒãªãã·ã§ã³ã䜿çšããŠéžæãå¶éããããšãã
å§ãããŸããããšãã°ã
-b 'CN = RID Manager $ãCN = SystemãDC = myDomãDC = com'ã§ãã
ãã¹ã¯ãŒãããã·ã¥ã®è»¢éã¯ã次ã®ããã«å®è¡ã§ããŸãã
Samba4ã«ãå€ãADããŒã¹ããããšããŸãã æ°ããSamba4ã€ã³ã¹ããŒã«ã远å ã®AD DCãšããŠæ¥ç¶ããããšã«ãããWindows ADããããŒã¿ããŒã¹ã®ã¬ããªã«ãååŸã§ããŸã-ããææžåãããç°¡åãªæé -
ãã¡ããåç
§ããŠ
ãã ãã ã
ã³ããŒããŠæ¥ç¶ããŸã-æ¥ç¶sam0ãåŒã³åºããŸãããã éæšæºãã¹ãšã®æ¥ç¶ïŒåãå Žæã§/ tmp / privãšsmb.confã«ã³ããŒãããŠãã ããïŒïŒ
lp0 = samba.param.LoadParm() lp0.load('/tmp/priv/smb.conf') lp0.set('private directory','/tmp/priv') sam0 = SamDB(lp=lp0,session_info=system_session())
ãŠãŒã¶ãŒã®ãªã¹ãå
šäœãååŸãããã¹ã¯ãŒãã䜿çšããŠã次ã®ãªã¯ãšã¹ããè¡ããŸãã
res = sam0.search(base="DC=oldDom,DC=myDom,DC=ru",expression="(&(objectCategory=person)(objectClass=user))", attrs=['*','unicodePwd'])
ãŠãŒã¶ãŒããŒã¹ãäžŠã¹æ¿ããŠãæ°ããããŒã¿ããŒã¹ã«è¿œå ããŸãã æŠç¥çã«ã¯ã次ã®ããã«ãªããŸãã
for r in res: dn = str(r.dn)
ããã§ãWin 2003ã®ãã¡ã€ã³ããSamba4ã«ãŠãŒã¶ãŒã転éããå®éã®äŸã§ãã
å€ããã¡ã€ã³ã«ã¯åé¡ãèç©ãããŠããŸãïŒééã£ããã¡ã€ã³åã§å§ãŸã£ãŠããŠãïŒã DCããSamba4ãžã®éåžžã®ã¬ããªã±ãŒã·ã§ã³ïŒå察æ¹å-Samba4 DC-> W2003 DCïŒã¯ããããããã¡ã€ã³å
ã®åé¡ãåå ã§éå§ãããŸããã§ããã
ã¿ã¹ã¯ã¯Samba3äžã®ãã¡ã€ã«ãµãŒããŒã®ååšã«ãã£ãŠæªåãããããSAM3ã«æ¢ã«ååšããsAMAccountName <->ãããã³ã°ïŒUIDãGIDïŒïŒéåžžã¯
/var/lib/samba/winbindd_idmap.tdb ïŒãä¿åããå¿
èŠããããŸããã å®éã«ã¯ãã¿ã¹ã¯ã¯
ããã§èª¬æããã¿ã¹ã¯ã«äŒŒãŠã
ãŸãã ã
ãã¹ãŠã®å®éšãšæçµããŒãžã§ã³ã¯ãOpenVZã³ã³ãããŒïŒCentOS 6ïŒã§å®è¡ãããŠããUbuntu 14.04ãµãŒããŒã§è¡ãããŸãã
Samba4ã®ã€ã³ã¹ããŒã«ãæ§æã¯äœåºŠã説æãããŠããŸãã ããšãã°ããã§ã«
ããã§èšåã
ããŠã
ãŸã ã
rfc2307ã䜿çšããã¹ããŒã ã§ã®Unix IDã®éåžžã®è¡šç€ºã«ã¯ã
sssdã䜿çšãããŸããã ã¡ãªã¿ã«ãå€ãã®äººããå§ãããsernet Samba4ã¢ã»ã³ããªã¯äœ¿çšããªãã»ãããã-sssdããã±ãŒãžãšåéã«ãªãã®ã¯é£ããã
ãŠãŒã¶ãŒã®ãã¹ã¯ãŒããšSIDãä¿åããã«ã¯ãåè¿°ã®ããã«ãå€ãADããŒã¿ããŒã¹ããã©ã€ããŒããã£ã¬ã¯ããªSamba4ã®åœ¢ã§æ¢ã«ååšããŠããå¿
èŠããããŸãã 詳现ïŒ
ãããåç
§ïŒããsamba-tool domain join samdom.example.com DC -Uadministrator --realm = samdom.example.comããã¹ããããããšãå¿
èŠãªããŒã¿ããŒã¹ãæ¢ã«äœæãããŠãããããsambaãµãŒãã¹ãéå§ããã«ããã§åæ¢ã§ããŸãã ã ããŒã¿ããŒã¹ãããã«æŽæ°ããå¿
èŠãããå Žåã¯ãsambaãµãŒãã¹ãéå§ããã«è¡ãããšã¯ã§ããŸããã
æ¢åã®Win ADãã¡ã€ã³ãžã®åœ±é¿ã¯æå°éã§ãïŒã»ãšãã©ã¢ã€ãã«ç¶æ
ã®ã³ã³ãããŒã©ãŒããã1ã€äœæãããããããã°ã«å€ãã®NTDSã¬ããªã±ãŒã·ã§ã³ãšã©ãŒãçºçããŸãïŒãã¹ã¿ã³ãã¢ãã³ADããŒã¿ããŒã¹ãäœæããåŸããªã¹ã¯ãªãã§ä»®æ³ç°å¢ã§å®è¡ã§ããŸãã MS Winãã¡ã€ã³ããã°ããã®éæ£åžžã«åäœããå¿
èŠãããå Žåããã®äžæçãªSamba4ã匷å¶çµäºããåäœäžã®DCãããã®DCã«é¢ããæ
å ±ãã¯ãªãŒã³ã¢ããããããšããå§ãããŸãã
çµæã®ãã©ã€ããŒããã£ã¬ã¯ããªïŒéåžž
/ var / lib / samba / privateãŸãã¯
/ usr / local / samba / private ïŒã¯å°æ¥ã®Samba4ã«ã©ããã«ã³ããŒãã/ etc / sambaããsmb.confãã³ããŒããå¿
èŠããããŸãã ããã§ãå€ããã¡ã€ã³ã«é¢ãããã¹ãŠã®ããŒã¿ã1ãæã«ä¿åãããããŒã«ã«FSã§ã䜿çšã§ããããã«ãªããŸããã
Samba3ã«ãã¡ã€ã«ãµãŒããŒããŸã ããå ŽåãSamba3ã§éçºããidmapãä¿æãããå Žåã¯ãSamba3ãã
/ var / lib / sambaãã£ã¬ã¯ããªã眮ãå¿
èŠããããŸãïŒwinbindd_idmap.tdbãšgroup_mapping.tdbã®2ã€ã®ãã¡ã€ã«ãå¿
èŠã§ãïŒã ã
conf.pyãã¡ã€ã«ã®åœ¢åŒã§åæãã©ã¡ãŒã¿ãŒããã©ãŒãããããŸãã
ã¡ã€ã³ã®äŒé颿°ã1ã€ã®ãã¡ã€ã«ã«éããŸããã
lib1.py
mk_domïŒïŒé¢æ°ã®å€éšããã°ã©ã ãšããŠget_dom_sid.pyã®åŒã³åºãããããŸã-æ°ãããã¡ã€ã³ãåæåããŸãã
get_dom_sid.pyã¯ãå€ããã¡ã€ã³ã®SIDãåºåããã ãã§ãïŒ
ããã¯ãæ°ãããã¡ã€ã³ãäœæããã®ãšåãã¹ããªãŒã ã§å€ããã¡ã€ã³ã®ããŒã¿ããŒã¹ã«æ¥ç¶ãããšãã«ãç°å¢å€æ°ãå€ãããŒã¿ã§çœ®ãæãããããããå®è¡ããå¿
èŠããããŸããã
ãããã£ãŠãå¿
èŠãªãã¹ãŠã®ããã±ãŒãžïŒsamba4ãsssdãããã³äŸåé¢ä¿ïŒãã€ã³ã¹ããŒã«ãããåŸãå€ãããŒã¿ããŒã¹ã®ãã£ã¬ã¯ããªãé©åãªå Žæã«ã³ããŒãããæ°ãããã¡ã€ã³ã®äœæãéå§ã§ããŸãã
ãã¡ã€ã³ã®åæå-mk_dom.pyãèµ·åããŸãã
ãã¹ãŠãããŸããã£ãå ŽåïŒãã°ãã¡ã€ã«ã®ååã¯log_ïŒ
y-ïŒ
m-ïŒ
d_ïŒ
HïŒïŒ
MïŒïŒ
S.txtïŒãsmb.confãèŠãŠã[global]ã»ã¯ã·ã§ã³ã«äžæçã«è¿œå ããŸãã
dns forwarder = <å€ãDCã¢ãã¬ã¹>ïŒã¯ãŒã¯ã¹ããŒã·ã§ã³ãæ°ãããã¡ã€ã³ã«è»¢éããæç¹ïŒã
/ var / lib / samba / privateãã/ etcã«krb5.confãã³ããŒããŸãïŒãŸãã¯ã·ã³ããªãã¯ãªã³ã¯ãäœæããŸãïŒã 次ã«ãã¹ã¯ãªãããå®è¡ããŠãå€ããã¡ã€ã³cp_dom.pyã®ãªããžã§ã¯ããã³ããŒããŸãã
ãšã©ãŒã¯å¿
ç¶çã«ãã°ãã¡ã€ã«ã«åé¡ãããŸãã æãæ·±å»ãª-3ã€ã®æåãïŒã åã«ã ã¿ã€ãïŒ
!!! ãŠãŒã¶ãŒè¿œå ãšã©ãŒïŒ5CA6ADDF-A2C8-46E5-A
!!! ãã¹ã¯ãŒãèšå®ãŠãŒã¶ãŒã®ãšã©ãŒïŒ5CA6ADDF-A2C8-46E5-Aã»ãšãã©ã®å Žåããããã¯çŸåšã®ã¹ããŒã ã«ã¯ååšãããæ¬è³ªçã«äžèŠãªãªããžã§ã¯ãã§ãã ãã¡ã€ã³å
ã®ãã©ã¬ã¹ãã«å¥ã®ãã¡ã€ã³ããã®ãŠãŒã¶ãŒãããå Žåããããã®è¿œå ãæ©èœããããã°ã«èšé²ãããŸãã åãšã©ãŒã¯
éèŠã§ã¯ãããŸãã
!! MinRid ERRïŒDCOMãŠãŒã¶ãŒãã¹ãŠãèããããå Žåã¯ãSambaãèµ·åããŸãã
start samba-ad-dc
sssdèšå®ã«ã€ããŠå°ã詳现ã«ã€ããŠã¯ã
ããã§èª¬æã
ãŸã ïŒæ¹æ³1ïŒKerberosãä»ããADãžã®æ¥ç¶ïŒã
sssdçšã®Kerberosã®æºåïŒ
samba-tool domain exportkeytab /etc/krb5.sssd.keytab --principal=<myHostName>$ chown root:root /etc/krb5.sssd.keytab chmod 600 /etc/krb5.sssd.keytab
ãã¡ã€ã«/etc/sssd/sssd.confïŒ
[sssd] services = nss, pam config_file_version = 2 domains = newdom.lan [nss] [pam] [domain/newdom.lan] id_provider = ad auth_provider = ad ldap_schema = ad krb5_keytab = /etc/krb5.sssd.keytab access_provider = ad ldap_id_mapping=false enumerate = true
sssdãã£ãã·ã¥ããªã»ããããŸãã
sss_cache -GU
sssdã®åèµ·åïŒ
restart sssd
ãšããã§ãsssdãã£ãã·ã¥ããã©ãã·ã¥ããŠããADã«å€§ããªå€æŽãå ããããªãå ŽåããããŸãã æ¬¡ã«ãsssdã忢ãããã/ var / lib / sss /ãããã£ã¬ã¯ããªãåé€ããç©ºã®æ§é ãïŒã€ã³ã¹ããŒã«ããã±ãŒãžããïŒåŸ©å
ããå¿
èŠããããŸãã
ãŠãŒã¶ãŒãšã°ã«ãŒãã®è¡šç€ºã確èªããŸãïŒsssdããŒã¿ããŒã¹ã¯ãã°ããã®éãã£ã±ãã«ãªã£ãŠããŸãïŒã
getent passwd getent group
ãŠãŒã¶ãŒããã©ãã°ã¢ã³ãããããããæãç°¡åãªæ¹æ³ã¯ã
netdom.exeãŠãŒãã£ãªãã£ïŒnetdom.exe move /ïŒïŒã䜿çšããŠãå€ããµãŒããŒã®ãã°ãªã³ã¹ã¯ãªããã«è¿œå ããããšã§ãã OSã«é©ãã
netdom.exeã®ããŒãžã§ã³ãå®è¡ããå¿
èŠããããŸãã SIDãGIDãUIDãããã³ãŠãŒã¶ãŒãã¹ã¯ãŒããä¿åãããŠãããããç§»åã¯ãŠãŒã¶ãŒã«å¯ŸããŠã»ãšãã©ééçã§ããããŒã«ã«ãã©ã«ããŒã¯ãããã¯ãŒã¯ãªãœãŒã¹ãå«ãããŸãŸã§ãã Sambaãã¡ã€ã«ãµãŒããŒæ§æã§ãã¡ã€ã³ã®ååã倿Žããã ãã§ãã
ç§ã«ãšã£ãŠã¯ããã«ç°¡åã§ãã-åç©åå
šäœãOpenVZã®äžã«äœãã§ãããããå¥ã®FSäžã®ãããã¯ãŒã¯ãªãœãŒã¹ã¯ç°ãªããã¡ã€ã«ãµãŒããŒã«åæã«ç°¡åã«ããŠã³ãã§ãïŒDCããã¡ã€ã«ãµãŒããŒã«ããããšãå¯èœã§ãïŒãã¢ã¯ã»ã¹ã®åé¡ã¯GIDãšUIDãäžèŽãããããšã§èªåçã«è§£æ±ºãããŸããã
ã°ã«ãŒãããªã·ãŒãªããžã§ã¯ãã¯æ°ãããã¡ã€ã³ã«ç§»è¡ãããŸããã§ããã