рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ 80 рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде рдУрдкрдирдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рд▓рдЧрднрдЧ 2 рдЬреАрдмреА рд░реИрдо рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рд╕рд╣рдордд рд╣реЛрдЧрд╛ - рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ OpenFire рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рджреВрд╕рд░реЗ, рдЕрдзрд┐рдХ рд╣рд▓реНрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдирд┐рдореНрди рдХрд╛рд░реНрдп: рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреИрдмрд░-рд╕рд░реНрд╡рд░ рдЕрд╢реНрд▓реАрд▓рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, ldap-record рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде, рдФрд░ ldap-user рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рдеред
рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ, рдореИрдВрдиреЗ Prosody рдХреЛ рдЪреБрдирд╛ред рд▓реЗрдХрд┐рди рд╕реАрдорд┐рдд рд╕рд╛рд╣рд┐рддреНрдп рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рд╕рдм рдХреИрд╕реЗ рджреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рддред
рдореИрдВ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░
рджрд┐рдпрд╛ AcidumIraeрдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рд╕рд╕рд▓реНрдереБрдж LDAP рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ saslauthd рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдЬреЛ userPrincipalName рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдореЗрд░реЗ LDAP рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЕрднреА рднреА рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдереАрдВ, рдЕрдм рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ рджреЛ рджрд┐рди рд▓рдЧ рдЧрдПред
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкреНрд░реЛрд╕реЛрдбреА рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕реЗ рдбреЗрдмрд┐рдпрди 6.0 рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд░реВрдЯ рдХреЗ рддрд╣рдд рд╕рднреА рдСрдкрд░реЗрд╢рди рдХрд░реВрдВрдЧрд╛ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдкреНрд░реЛрд╕реЛрдбреА рдкреИрдХреЗрдЬ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд╕реНрдХрд░рдг 0.7, рдЬрд┐рд╕рдореЗрдВ рдПрд▓рдбреАрдПрдкреА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдЕрддреНрдпрдВрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ
рдпрд╣рд╛рдВ рд╕реЗ 64 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг 0.8 рдбрд╛рд▓рд╛ред рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ LuaSec рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
LDAP рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░реЙрд╕рд┐рдХреЛрдбреА рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рди рд╣реЛрдВ: mod_auth_ldap, mod_storage_ldap, рд╕рд╛рде рд╣реА ldap.lib.lua (mod_lib -ldap) рдФрд░ vcard.lib.lua рд▓рд╛рдЗрдмреНрд░реЗрд░реАред
рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ -
0-8.prosody-modules.googlecode.com/hgMod_auth_ldap рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ
scm.stefant.org/svn/tools/stuff/trunk/patches/prosody рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдореЗрд░реЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ (рдЕрдЪрд╛рдирдХ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рдЬрдм рдЙрд╕рдиреЗ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди рдмрджрд▓ рджрд┐рдпрд╛, рдпрд╛ рдЕрдЪрд╛рдирдХ рджреБрдирд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ) рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдкрд╛рда рдХреЛ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рджреВрдВрдЧрд╛
mod_auth_ldap.lua local new_sasl = require "util.sasl".new; local nodeprep = require "util.encodings".stringprep.nodeprep; local log = require "util.logger".init("auth_ldap"); local ldap_server = module:get_option("ldap_server") or "localhost"; local ldap_rootdn = module:get_option("ldap_rootdn") or ""; local ldap_password = module:get_option("ldap_password") or ""; local ldap_tls = module:get_option("ldap_tls"); local ldap_base = assert(module:get_option("ldap_base"), "ldap_base is a required option for ldap"); local ldap_scope = module:get_option("ldap_scope") or "onelevel"; local ldap_filter = module:get_option("ldap_filter") or ""; local lualdap = require "lualdap"; local ld = assert(lualdap.open_simple(ldap_server, ldap_rootdn, ldap_password, ldap_tls)); module.unload = function() ld:close(); end local function ldap_filter_escape(s) return (s:gsub("[\\*\\(\\)\\\\%z]", function(c) return ("\\%02x"):format(c:byte()) end)); end local function find_userdn(username) local iter, err = ld:search { base = ldap_base;
рдЕрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
/etc/prosody/prosody.cfg.lua
1. рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬреЗрдВ --c2s_require_enc рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди = рдЕрд╕рддреНрдп, рдЕрд╕рддреНрдп рдФрд░ рдЕрд╕рддреНрдп рдХреЛ рд╕рддреНрдп рдореЗрдВ рдмрджрд▓реЗрдВ
2. LDAP рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
рдкреНрд░рдорд╛рдгреАрдХрд░рдг = "internal_plain" рдвреВрдВрдвреЗрдВ рдФрд░ рдмрджрд▓реЗрдВ
authentication = "ldap"; ldap_server = "localhost"; ldap_base = "ou=users,dc=example,dc=com"; ldap_rootdn = "cn=manager,dc=example,dc=com"; ldap_password = "password";
рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ -
code.google.com/p/prosody-modules/wiki/mod_auth_ldap3. рд╣рдо mod_storage_ldap рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ
Include '/etc/prosody/prosody-posix-ldap.cfg.lua'
4. рд╣рдорд╛рд░реЗ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
VirtualHost "example.com" ssl = { key = "/etc/prosody/certs/localhost.key"; certificate = "/etc/prosody/certs/localhost.cert"; }
рдирддреАрдЬрддрди, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓рд╛:
/etc/prosody/prosody.cfg.lua рд╣рдореЗрдВ mod_lib_ldap рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмрджрд▓реВрдВрдЧрд╛
cd /etc/prosody wget http://0-8.prosody-modules.googlecode.com/hg/mod_lib_ldap/dev/prosody-posix-ldap.cfg.lua chmod 755 prosody-posix-ldap.cfg.lua
рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдирдореВрдиреЗ рдпрд╣рд╛рдБ рд╣реИрдВ -
0-8.prosody-modules.googlecode.com/hg/mod_lib_ldod/devрдореИрдВ рддреБрд░рдВрдд рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рдирдореВрдирд╛ рджреВрдВрдЧрд╛:
/etc/prosody/prosody-posix-ldap.cfg.lua рд╕рдореВрд╣реЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рдореВрд╣реЛрдВ рдХреЛ LDAP рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдЙрдирдХреЗ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ /usr/lib/prosody/modules/mod_storage_ldap.lua рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдЖрдЗрдЯрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВредрд╣рдо /usr/lib/prosody/modules/mod_storage_ldap.lua рдореЗрдВ рд▓рд╛рдЗрди рдкрд╛рддреЗ рд╣реИрдВ
local filter = memberfield .. '=' .. tostring(username);
рдорд╛рди рдмрддрд╛рдПрдВ рдФрд░ рдмрд┐рдирд╛ рдорд╛рди рдмрддрд╛рдП рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ (/ var / log / prosody) рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ lualdap рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрдЪреНрдЪреЗ
lualdap рдФрд░
рдХрдВрдкрд╛рд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЕрдм рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╣реА рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред рдореЗрд░реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
make make install
рдпрд╣ рд╕рдм, рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ