LightSquid + рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдВрдбрд▓

рдореИрдВ рд╕реНрдХреНрд╡реАрдб рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рд▓рд╛рдЗрдЯрд╕реНрдХреНрд╡рд┐рдб рд▓реЙрдЧ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдм, рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдВ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо, рдФрд░ 100+ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдХреЛрд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдареАрдХ рд╣реИ, рдЬрдм рдирд╛рдо рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдЪрдврд╝реЗрдВред рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдореИрдВрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдирд╛рдо рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╡рд░рдг рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред

рдореИрдВ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ LDAP рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд▓рд╛рдЗрдЯрд╕реНрдХреНрд╡рд┐рдб рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, Google рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдЧрд╛ред IP рдХреЛ рд╣реЛрд╕реНрдЯрдирд╛рдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде lightquid.cfg рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд DNS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

$ ip2name = "dns";

рдкрд╛рд░реНрд╕рд░ рдлрд╛рдЗрд▓реЗрдВ realname.cfg рдФрд░ group.cfg рдлрд┐рд░ рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

realname.cfg:
"рд╣реЛрд╕реНрдЯрдирд╛рдо" "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо"

group.cfg:
"рд╣реЛрд╕реНрдЯрдирд╛рдо" "рд╕рдореВрд╣ рд╕рдВрдЦреНрдпрд╛" "рд╕рдореВрд╣ рдХрд╛ рдирд╛рдо"

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


рдпрд╣ рдПрдбреА рд╣реЛрд╕реНрдЯреНрд╕ рд╕реЗ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╣реЛрд╕реНрдЯреНрд╕ рд╕реЗ рдмрдВрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд╛рдо, рдЬрд┐рди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд╣рд┐рдд рд╣реИрдВ; рдлрд┐рд░ рд╣рдо рдЙрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдпрд╣ рдХрд░рддреА рд╣реИ:

#!/usr/local/bin/perl # # ldap2lightsquid (c) Roman Melko <romanmelko@gmail.com> # Description: Synchronize users and computers of LightSquid with LDAP server # Requirements: Should run periodically # Version: 2012030601 # License: BSD # use strict; use Net::LDAP; my $domain = "example.ua"; # Domain is supposed to have 2 levels my @parts = split(/\./,$domain); my $domain0 = $parts[1]; my $domain1 = $parts[0]; my $user = "<username>"; # LDAP user my $password = "<password>"; # LDAP password my $cfgpath = "/usr/local/etc/lightsquid/"; # depends on OS my $realname = "$cfgpath/realname.cfg"; my $group = "$cfgpath/group.cfg"; # departments OU my @units = ( "MGT", "OPR", "PRO", "Sales "); # computers OU my @pcunits = ( "Developer servers", "Servers", "Workstation OPR", "Workstations PRO", "Workstations Sales", "Workstations Telemarketing" ); my @dep = ("no in group"); my $ldap = Net::LDAP->new("$domain") or die "$0"; $ldap->bind("CN=$user,DC=$domain1,DC=$domain0", password=>$password); my $base_path = "OU=<some path>,OU=<some path>,DC=$domain1,DC=$domain0"; # base LDAP path, change to yours my $num = @units; my $pcnum = @pcunits; my $attrs = "sn, givenname, department, samaccountname"; my $filter = "(objectcategory=CN=Person,CN=Schema,CN=Configuration,DC=$domain1,DC=$domain0)"; my $pcattrs = "cn, managedBy"; my $pcfilter = "(objectcategory=CN=Computer,CN=Schema,CN=Configuration,DC=$domain1,DC=$domain0)"; my $count; my $results; my %department_id = (); my %department_name = (); sub get_host_info { for (my $i=0; $i<$count; $i++) { my $entry = $results->entry($i); my $hostname = join(".",lc($entry->get_value('cn')),$domain); my @tmp_array = split(/,/,$entry->get_value('managedBy')); @tmp_array = split(/=/,$tmp_array[0]); my $fullname = $tmp_array[1]; if(!$fullname) { next; } print(REALNAME "$hostname\t$fullname\n"); print(GROUP "$hostname\t$department_id{$fullname}\t$department_name{$fullname}\n"); } } sub get_user_info { for (my $i=0; $i<$count; $i++) { my $entry = $results->entry($i); my $depnum = @dep; my $depid = $depnum; $depid++; foreach $depnum (0 .. @dep) { if ($entry->get_value('department') eq $dep[$depnum]) { $depid = $depnum; } } if ($depid > $depnum) { $dep[$depid] = $entry->get_value('department'); } if (length $depid < 2) { $depid = "0".$depid; } my $name = $entry->get_value('givenname'); my $surname = $entry->get_value('sn'); $name =~ s/^\s+//; $name =~ s/\s+$//; $surname =~ s/^\s+//; $surname =~ s/\s+$//; my $fullname = join(" ",$name,$surname); $department_id{$fullname} = $depid; $department_name{$fullname} = $entry->get_value('department'); } } open (REALNAME, ">", $realname) or die $!; open (GROUP, ">", $group) or die $!; # Getting real names and departments foreach $num (0 .. @units) { my $base = 'OU='.$units[$num].','.$base_path; $results = $ldap->search(base=>$base,filter=>$filter,attrs=>$attrs); $count = $results->count; if ($count > 0) { get_user_info(); } } # Getting pc names and owners, writing results to conf files foreach $pcnum (0 .. @pcunits) { my $base = 'OU='.$pcunits[$pcnum].',OU=Resources,'.$base_path; $results = $ldap->search(base=>$base,filter=>$pcfilter,attrs=>$pcattrs); $count = $results->count; if ($count > 0) { get_host_info(); } } # Closing connection to LDAP and files $ldap->unbind; close (REALNAME); close (GROUP); exit 0 


рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ:
- AD рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╣реЛрд╕реНрдЯ рдореЗрдВ, рдкреНрд░рдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣реЛрд╕реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ;
- AD рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ, рд╡рд┐рднрд╛рдЧ рдлрд╝реАрд▓реНрдб рднрд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ, рд╣рд╛рде рдЕрд╕рд▓реА рд╕рдореВрд╣реЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рдХрдИ рд╕рдореВрд╣реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ);
- рдЗрдХрд╛рдЗрдпреЛрдВ рдФрд░ PCunits рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднрд░рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрди рдореЗрдВ;
- рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рд╕рдХреЗ рддрд╣рдд AD рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреНрд╕реЗрд╕ рдХреА рдЧрдИ рд╣реИ, AD рдХреА рдЬрдбрд╝ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдореБрдЭреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧрд╛;
- рдорд╛рдирдХ рдПрд▓рдбреАрдПрдкреА рдбреЗрдЯрд╛рдмреЗрд╕, рдзреБрдЖрдВ рдорди рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рдХреНрддрдЪрд╛рдк рдХреЗ рд╕рд╛рде рдорддрднреЗрдж рд╣реИрдВред

Source: https://habr.com/ru/post/In139525/


All Articles