LDAP scripting

From Hobbynet Admin Wiki
Jump to navigation Jump to search

Inleiding

Omdat de ldap server in sneltreinvaart de bron voor allerlei services aan het worden is, ontstaat er ook een migratie van (veelal perl) scripts op scripting-int naar php scripts op ldap-lb1-int. ldap-lb1-int is net als scripting-int een server met verhoogde security. Er mag dus wel van deze server naar andere servers geconnect worden maar niet andersom. Dit is vergelijkbaar met de situatie op scripting-int. Deze mogelijkheid is essentieel voor de goede werking van sommige scripts.

Type scripts

Er zijn globaal een aantal soorten scripts te onderscheiden:

  • De eigenlijke scripts die een bepaalde taak uitvoeren en vaak naar stdout schrijven (.php soms geen extensie).
  • De cronjob scripts. Gewoonlijk herkenbaar aan de .sh extensie. Deze scripts bundelen vaak meerdere php scripts tot complete oplossingen.
  • Scripts die voor initialiseren en backuppen van de ldap directory nodig zijn (init_ldap, dump_ldap en restore_ldap). Behalve dump_ldap mogen deze scripts nooit zomaar gedraaid worden; de ldap directory zou vernield worden.

Overzicht scripts

0_DIT_IS_EEN_LOCAL_DIR            gen_passwd_code2.php              LDAP_include_telefoon.php         sync_hccforums.php
check_ms                          gen_passwd_hcc.php                LDAP_lid_weg.php                  sync_hobbynetbin_2.sh
cron_joomla.php                   gen_shadow_admin.php              LDAP_maak_hccOptOutTokens.php     sync_hobbynetdata_2.sh
cron_joomla.sh                    gen_shadow_code2.php              _LDAP_schoon_4045431_op.php       sync_hobbynetetc_2.sh
database-onderhoud.sh             gen_shadow_hcc.php                LDAP_schoon_database.php          sync_hobbynetfw_2.sh
dump_ldap.sh                      gen_xml_fw_ip4.php                LDAP_schoon_mysql_op.php          sync_hobbynetlib_2.sh
enquete-specials                  gen_xml_fw_ip6.php                LDAP_schoon_testleden_op.php      tel_unieke_bezoekers-volgens-LDAP_en_SQL.php
forum-specials                    get_all_mailbox_sizes.sh          LDAP_vul_leden.php                tel_unieke_bezoekers-volgens-LDAP.php
gen_bezoekersstatistiek_xml.php   get_ip4                           LDAP_vul_profielbekend.php        tel_unieke_bezoekers-volgens-LDAP.sh
gen_compusers_csv.php             get_ip6                           mailman-specials                  test.php
gen_dmarc_hcc.php                 getip-http                        mail_tripolis_export_report.sh    tripolis_import
gen_fw.sh                         hccforums_db.php                  optouts                           unblock_joomla.php
gen_group_admin.php               hcc.nl.mx.fallback                other-specials                    unblock_joomla.sh
gen_group_code2.php               huisgenoot_lidmaatschappen.php    popbull-specials                  update_domeinen.php
gen_group_hcc.php                 huisgenoot_lidmaatschappen.sh     postcode-specials                 update_domeinen.sh
gen_hobbyabon.php                 init_ldap_mdb.sh                  purge_hccforums.php               update_hccforums.sh
gen_iplist_partners.php           init_ldap.sh                      renameusers_joomla.php            update_joomla.php
gen_iplist_partners.sh            kader_maak_html.php               renameusers_joomla.sh             update_joomla.sh
gen_kader_csv.php                 kader_maak_lijsten.sh             restore_ldap.sh                   upd_code2_accounts.sh
gen_kaderfunc.php                 kader_maak_txt.php                rss_joomla.php                    upd_hcc_accounts.sh
gen_kaderlist.php                 kader_maak_xb_csv.php             rss_joomla.sh                     upd_ldap_dev.sh
gen_ldap_bul_export.php           LDAP_bepaal_startconditie.php     ruim_lock_files_op.sh             upd_ldap-test-dev.expect
gen_ldap_cor_export.php           ldap.conf.ldif                    ruim_pdf_facturen_op.sh           upd_ldap_test.sh
gen_ldap_hoofdbestuur_export.php  LDAP_controleer_groeperingen.php  ruimsmsverstuurdsmsop.sql         upd_mailserver_report.sh
gen_ldap_kader_export.php         LDAP_controleer_kader.php         run_maand_rapport.sh              upd_mailserver.sh
gen_ldap_ledenraad_export.php     LDAP_controleer_users.php         run_tripolis_export.sh            upd_nameserver.sh
gen_ldap_niet_leden_export.php    LDAP_copyright.txt                schoon_alles_op_include.php       upd_srv
gen_leden_csv.php                 LDAP_cronjob.sh                   schoon_alles_op.sh                upg_vmware_tools
gen_leden_dubbel.log              LDAP_forceer_CSV.sh               schoon_breg_token_tabel_op.php    upload_bezoekersstatistiek.sh
gen_leden_dubbel.php              LDAP_ftps_lget_CRM_leden.sh       schoon_forms_database_op.php      upload_compusers_csv.sh
gen_maand_rap.php                 LDAP_herstel_profielbekend.php    schoon_JoomlaTokens_tabel_op.php  upload_kader_csv.sh
gen_mail_exclude_txt.php          LDAP_include_henz.php             schoon_LDAP_en_hcc_Bezoek_op.php  upload_leden_csv.sh
gen_mx_hcc-fallback.php           LDAP_include_ISO.php              set_menu_joomla.sh                vergelijk_scripts.readme
gen_mx_hcc.php                    LDAP_include_Joomla_db.php        set_menu.php                      verrijk_factuur.php
gen_mx_hobby.php                  LDAP_include_mail.php             statistiek_xml.php                verrijk_factuur.sh
gen_passwd_admin.php              LDAP_include.php                  statistiek_xml.sh

Crontab

Wijzigingen

vbs20220516: Tripolis Import en rapportage uitgeschakeld.

##############################################################################################################
# Wijzigingen graag ook aanbrengen op deze wiki pagina: https://wiki.hobby.nl/index.php?title=LDAP_scripting #
##############################################################################################################

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

# Update rssfeeds joomla
1 */1 * * * /usr/local/hobbynet/bin/rss_joomla.sh >>/var/log/rss_joomla.log

# Synchroniseer firewall regels van ldap-lb1 naar ldap-lb2
55  5 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh
55 11 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh
55 17 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh
55 23 * * * /usr/local/hobbynet/bin/sync_hobbynetfw_2.sh

# Herstart Firewall
 0  6 * * * /etc/init.d/hobby-firewall restart >/dev/null
 0 12 * * * /etc/init.d/hobby-firewall restart >/dev/null
 0 18 * * * /etc/init.d/hobby-firewall restart >/dev/null
 0  0 * * * /etc/init.d/hobby-firewall restart >/dev/null

# Check op updates en download deze alvast ivm Nagios detectie
 0  6 * * * apt-get clean -y >/dev/null ; apt-get update >/dev/null ;apt-get upgrade -d -y >/dev/null
 0 18 * * * apt-get clean -y >/dev/null ; apt-get update >/dev/null ;apt-get upgrade -d -y >/dev/null

# Maak een beveiligde backup
45 23 * * * /usr/local/hobbynet/local/backup-encrypted.bash >>/var/log/backup_encrypted.log

# Sync bin dir naar ldap-lb2
50 23 * * * /usr/local/hobbynet/bin/sync_hobbynetbin_2.sh
# Sync etc dir naar ldap-lb2
51 23 * * * /usr/local/hobbynet/bin/sync_hobbynetetc_2.sh
# Sync lib dir naar ldap-lb2
52 23 * * * /usr/local/hobbynet/bin/sync_hobbynetlib_2.sh

# Voer de cron_joomla.sh cronjob uit voor de bit backup
01  0 * * * /usr/local/hobbynet/bin/cron_joomla.sh >>/var/log/cron_joomla.log

# Voer de cron_joomla.sh cronjob uit voor 'update_joomla.sh'
15  1 * * * /usr/local/hobbynet/bin/cron_joomla.sh >>/var/log/cron_joomla.log

# Forceer dat er een verse set CSV bestanden klaar wordt gezet
05  3 * * * /usr/local/hobbynet/bin/LDAP_forceer_CSV.sh >/dev/null

# Doe alle processing CRM->LDAP
10  3 * * * /usr/local/hobbynet/bin/LDAP_cronjob.sh >>/var/log/LDAP_cronjob.log

# Maak /usr/local/hobbynet/apache2conf/iplists/iplist-partners-24 aan
 7  3 * * * /usr/local/hobbynet/bin/gen_iplist_partners.sh

# Ververs postfixadmin op mail-lb1 en mail-lb2. Mail report
26  3 * * * /usr/local/hobbynet/bin/upd_mailserver.sh >/var/log/upd_mailserver.log
30  3 * * * /usr/local/hobbynet/bin/upd_mailserver_report.sh

# Haal de opt-outs op van Tripolis
### disabled 20220516
###15  3 * * * /usr/local/hobbynet/bin/run_tripolis_import.sh >/var/log/run_tripolis_import.log

# Haal de handmatige Tripolis opt-outs op, en mail die naar Egbert
### disabled 20220516
###31  3 * * * /usr/local/hobbynet/bin/mail_tripolis_import_report.sh

# Maak en plaats de ledenlijst voor Kantoor
35  3 * * * /usr/local/hobbynet/bin/upload_leden_csv.sh >/dev/null

# Maak en plaats de kaderlijst voor Kantoor
40  3 * * * /usr/local/hobbynet/bin/upload_kader_csv.sh >/dev/null

# Deblokkeer actieve joomla gebruikers
45  3 * * * /usr/local/hobbynet/bin/unblock_joomla.sh >>/var/log/unblock_joomla.log

# Haal de aantallen bezoekers, en zet die over naar de beschermde kantoor omgeving
47  3 * * * /usr/local/hobbynet/bin/upload_bezoekersstatistiek.sh >/dev/null

# Maak overzicht van alle opt-ins voor Tripolis
50  3 * * * /usr/local/hobbynet/bin/run_tripolis_export.sh >/var/log/run_tripolis_export.log

# Hernoem in Joomla de users die zijn hernoemd in ldap
50 3 * * * /usr/local/hobbynet/bin/renameusers_joomla.sh >>/var/log/renameusers_joomla.log

# Haal het resultaat van de Tripolis export op, en mail die naar Egbert
52  3 * * * /usr/local/hobbynet/bin/mail_tripolis_export_report.sh

# Maak en plaats statistiek overzicht van alle HCC groeperingen
55  3 * * * /usr/local/hobbynet/bin/statistiek_xml.sh >/dev/null

# Start joomla onderhoud
0  4 * * * /usr/local/hobbynet/bin/update_joomla.sh >>/var/log/update_joomla.log

# Doe de Hobbynet maand rapportage
 0  4 1 * * /usr/local/hobbynet/bin/run_maand_rapport.sh >/dev/null

# Bepaal het aantal unieke (en totaal aantal) bezoekers van de laatste 12 maanden, mail dat aan VB
 5  4 1 * * /usr/local/hobbynet/bin/tel_unieke_bezoekers-volgens-LDAP.sh >/dev/null

# Maak een lijst van onjuiste huisgenoot-lidmaatschappen
10  4 1 * * /usr/local/hobbynet/bin/huisgenoot_lidmaatschappen.sh >/dev/null

# Schoon mySQL en LDAP op
 5  4 2 * * /usr/local/hobbynet/bin/schoon_alles_op.sh

# Verrijk een naar SFTP geupload factuur bestand met factuurtokens
15  * * * * /bin/bash /usr/local/hobbynet/bin/verrijk_factuur.sh >>/var/log/verrijk_factuur.log

# ruim sms database op
42 12 * * * cat /usr/local/hobbynet/bin/ruimsmsverstuurdsmsop.sql |mysql >/dev/null

# corigeer menu elke 4 uur
#42 */4 * * * /usr/local/hobbynet/bin/set_menu_joomla.sh >>/var/log/set_menu_joomla.log

Toepassingen

Soms zijn er een aantal scripts die bij elkaar horen en er voor een bepaalde toepassing zijn, zoals om de mailserver te updaten, dagelijkse bestanden voor Kantoor te maken, dagelijkse bestanden voor het Tripolis mail systeem en niet geheel onbelangrijk, scripts die ldap dagelijks bijwerken met de master data die in het HCC CRM wordt bijgehouden (als er een mutatie gemist is, b.v. omdat een JSON aanroep vanuit het CRM naar de Hobbynet XML-RPC server overdag mislukt is).

LDAP

Drie scripts zijn essentieel om de hele LDAP database te dumpen, te initialiseren en weer te vullen. Dit proces is nodig als een schema change moet worden aangebracht in de LDAP configuratie. Zie ook de pagina over de LDAP server.

  • dump_ldap.sh
    Dumpt alle ou's in afzonderlijke ldif bestanden in de data directory en maakt er ook een tarball van.
  • init_ldap.sh <beheer-password>
    Bouwt de hele LDAP structuur van de grond af op.
  • restore_ldap.sh
    Vult de hele LDAP structuur met file uit de dump_ldap stap.

Statistieken

Iedere nacht worden er door het script statistiek_xml.sh van alle groeperingen en van de complete HCC leden database statistieken in XML formaat gemaakt. Daarna worden deze statistieken met het script statistiek_xml.sh naar de kadernet server overgezet.

Mailserver

De mailserver kreeg tot voor kort 2 bestanden van scripting-int, husers en b3a.txt. De inhoud van beide bestanden kan ook uit ldap gehaald worden. Hiervoor zijn de volgende scripts in gebruik:

  • gen_hobbyabon.php.
    Dit script maakt een equivalent aan van husers en bevat alleen de betalende Hobbynet abonnees (enige tientallen regels).
  • gen_kaderfunc.php.
    Dit script is de vervanger van b3a.txt, de lijst van alle kaderfuncties (ongeveer 1200).
  • gen_kaderlist.php.
    Een hulp bestand met alleen de 7 cijferige lidnummers van alle kaderleden (ruim 700). Deze lijst wordt op de mailserver gebruikt om incidenteel kadermailboxen op te ruimen.
  • gen_mail_exclude_txt.php.
    Nog een hulp bestand waar in de interessegroepen staan die geen functionele mailadressen nodig hebben. Dit zijn vooral de ig's die geen echte ig zijn zoals de HCC zelf en de RvA en RvT maar wel als zodanig in ldap staan. Ook de cursus presentatoren vallen hieronder.
  • upd_mailserver_report.sh.
    Dit script mailt de dagelijkse logs ter controle of alles goed is gegaan.
  • upd_mailserver.sh.
    Bundelt de php scripts tot een cronjob die elke nacht loopt. Dit script draait de 4 php scripts, doet wat na bewerking, kopieert de output naar mail-lb1-int en start upd_mailserver_all op mail-lb1-int. Tenslotte worden nog de relay-domains opgehaald van mail-lb1-int (dat bestand is pas up-to-date nadat upd_mailserver_all op mail-lb1-int heeft gelopen).Hierna is mail-lb2 nog niet geheel up-to-date. Het script dat door ldap-lb1 is gestart, doet aan het eind een rsync van de datadir op mail-lb1 naar mail-lb2. Tenslotte start mail-lb1 een script op mail-lb2 om die ook up-to-date te maken. Dit is dus een drietraps systeem.

Maandrapportage

  • gen_maand_rap.php.
    Verzamelt alle data van Hobbynet abonnees en alle andere users in ldap. Optie -m mailt naar de accounthouder in het ldap record. Sinds medio 2020 krijgen hcc groepering webmasters deze mail niet meer, omdat ze nu allemaal gebruik maken van een Joomla template site, en daar geen 'eigenaar' meer van zijn.
  • run_maand_rapport.sh.
    Cronjob die bovenstaande scripts 1x per maand draait.

Passwd, shadow en group

  • gen_group_admin.php
  • gen_group_code2.php
  • gen_group_hcc.php
  • gen_passwd_admin.php
  • gen_passwd_code2.php
  • gen_passwd_hcc.php
  • gen_shadow_admin.php
  • gen_shadow_code2.php
  • gen_shadow_hcc.php
  • upd_admin_accounts.sh (is er niet)
  • upd_code2_accounts.sh
  • upd_hcc_accounts.sh

Deze scripts genereren de passwd, shadow en group entries voor de betalende leden (_code2), de admins (_admin, de lagere goden, op het moment niet gebruikt; er is wel een .hobby met alleen Roel v.d. Bussche erin) en voor de HCC groeperingen (_hcc). De output wordt op de shared etc omgeving neergezet zodat elke (web)server ze kan toevoegen aan de passwd.temp/shadow.temp/group.temp files. Hiervoor wordt de lokale job upd_usr (of upd_hobby_only) gedraaid.

HCC Verenigingsbureau

Het HCC Verenigingsbureau ('VB') heeft beschikking over een ledenlijst en een kader/kernledenlijst die dagelijks up-to-date zijn. Deze lijsten zijn in CSV formaat zodat men zelf in de hand heeft hoe het bestand gebruikt wordt. Ze worden dagelijks op de Hobbynet sftp server (dedicated server t.b.v. gebuik vanaf het VB) geplaatst.

Daarnaast krijgt VB iedere dag een actueel overzicht van de aantallen bezoekers (bezoekers statistiek).

  • upload_kader_csv.sh
    de cronjob
  • gen_kader_csv.php
    het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.
  • upload_leden_csv.sh
    de cronjob
  • gen_leden_csv.php
    het php script dat een bestand in CSV formaat maakt met de door VB gewenste velden.
  • upload_bezoekersstatistiek.sh
    de cronjob
  • gen_bezoekersstatistiek_csv.php
    het php script dat een bestand in CSV formaat maakt met de bezoekersstatistieken.

CompUsers

2020: VB heeft 'eigen' afspraken met CU gemaakt, en stuurt ze op eigen houtje zomaar ledenbestanden toe. Onze scripts zijn daarmee zinloos geworden.

Met CompUsers zijn speciale afspraken gemaakt door Kantoor in januari 2014. Zij krijgen een sterk verkorte lijst van ALLE leden voor hun administratie. Het streven is dit zo spoedig mogelijk te vervangen door een ander mechanisme zoals de partner check.

  • upload_compusers_csv.sh
    de cronjob
  • gen_compusers_csv.php
    het script dat een CSV maakt. Dit is een afgeslankt vorm van het gen_leden_csv.php script.

Koppeling met Tripolis

Het oude "popbull" systeem dat bij HenZ draait is in de zomer van 2013 vervangen door Tripolis. Tripolis wordt al jaren gebruikt door kantoor voor het versturen van Digizine en de Nieuwsflash. Per groepering wordt een account aangemaakt met beperkte rechten waar mee de Correspondent van de groepering mailings kan versturen. Om Tripolis en ldap in sync te houden wordt er elke nacht data uitgewisseld. Ldap is leidend in deze maar als mensen zich uitschrijven (opt-out) via de knop onder aan de mailing, moet dat doorgegeven worden aan ldap.

Sync van Tripolis naar ldap (uitgeschakeld vbs20220516)

  • run_tripolis_import.sh
    de eigenlijke cronjob
  • import_tripolis_csv.php
    vertaalt de CSV van opt-outs naar het wissen van de individuele optins.

Tripolis plaatst elke nacht om 00:01 een CSV bestand met de opt-outs per bulletin van de vorige dag. Dit gebeurt met datums. Als de datum van gisteren ingevuld staat is daar een optout geweest. Als er geen opt-outs zijn, bevat het veld slechts een lege string. Het bestand wordt naar de ldap server gehaald waar een aantal versies bewaard worden. De bestanden wordt verwijderd van de sftp omgeving. Vervolgens worden het gedownloade bestand verwerkt om bij het lid de hccOptIn van dit bulletin te verwijderen.

Sync van ldap naar Tripolis

  • run_tripolis_export.sh
    de eigenlijk cronjob
  • gen_ldap_bul_export.php
    maakt een volledige lijst aan van emailadres, lidnr en optins. Dit bestand gaat naar de sftp omgeving van Tripolis.
  • gen_ldap_cor_export.php
    maakt een lijst van alle correspondenten voor kantoor. Dit bestand gaat naar de sftp omgeving van Kantoor.

Het export bestand wordt elke nacht (om 02:50) op de sftp omgeving voor Tripolis klaargezet. Tripolis haalt het om 05:00 op. Omdat de opt-outs van Tripolis om 02:15 verwerkt worden, is dit bestand dus al bijgewerkt voor wat betreft die opt-outs. Alle andere wijzigingen komen van de hcc.nl profielpagina's of mutaties door derden op ldap (mutaties door Hobbynet staff of PC30).

Rapportage

Om ook de ledenadministratie in te lichten over leden die een optout op één of meer Tripolis mailings hebben gedaan, wordt na het verwerken van de optouts een mail gestuurd naar ledenadministratie@hcc.nl. Elke dag is er een nieuwe log file maar die wordt door dezelfde cronjob aan een archive geplakt. Zie mail_tripolis_reports.sh.

Egbert laat zich iedere nacht een rapportage mail sturen, zie mail_tripolis_export_report.sh.

Eénmalige jobs

Er zijn een aantal php scripts voor éénmalig gebruik gemaakt. Deze worden niet in de cronjobs gebruikt maar waren slechts bedoeld om de lijsten opgeleverd door VB in LDAP te krijgen. Deze scripts zijn in de subdirectory popbull-specials geplaatst.

  • import_digizine_csv.php
    de initiële Digizine lijst
  • import_nieuwsflash_csv.php
    de initiële Nieuwsflash lijst
  • import_popbull_csv.php
    de initiële lijst zoals die van HenZ (popbull provider) komt

ISIZ enquête

Op verzoek geschreven scripts voor eenmalig gebruik. Terug te vinden in in de enquete-specials subdirectory.

  • gen_enquete_csv.php
    enquête per email
  • gen_enquete_csv_no_mail.php
    enquête per post

Nameserver

  • gen_mx_hcc.php
  • gen_mx_hobby.php
  • upd_nameserver.sh

Firewall (op ldap servers)

  • gen_xml_fw_ip4.php
  • gen_xml_fw_ip6.php
  • sync_hobbynetfw.sh
  • gen_fw.sh