none
[Active Directory - LDAP] Negare all'utente di modificare la password RRS feed

  • Domanda

  • Salve,

    ho creato con successo un server active directory domain controller 2008, ora sto costruendo un'interfaccia web per permettere agli amministratori di gestire alcune funzioni dell'AD da casa (non ho possibilità di creare VPN).

    Da interfaccia devo gestire anche la possibilità di negare per alcuni utenti il cambiamento della password.

    Tutto bene fino a qui... se non che il webserver è depositato su un server linux e l'interfaccia è in php.

    Fortunatamente posso fare richieste ldap al server ad quindi teoricamente posso comunque controllare il server.


    Ho cercato di capire l'articolo scritto da microsoft riguardo a quello che vorrei fare https://msdn.microsoft.com/en-us/library/aa746398(v=vs.85).aspx, solo che non sono riuscito a capire tutti i passaggi e soprattutto se si può fare solo tramite ldap.


    Inoltre non conosco molto bene come funziona il protocollo Active Directory, quindi non capisco come funzionano alcune cose.

    Nell'articolo c'è il codice in C++ che però non posso eseguire sul server linux (o richiamarlo ed eseguirlo).


    So che forse è chiedere un po' troppo, ma c'è qualcuno che potrebbe darmi una mano, indicando tutti i passaggi che devo fare solo tramite query ldap?.


    Grazie mille a tutti


    Genymus

    domenica 30 ottobre 2016 11:19

Risposte

  • Caro Genimus Sgfocpr,

    dopo la rivelazione, sono rimasto senza parole e lo dico da Debianista che ha iniziato a usare samba 1.7 nel 1995!  Non c'entra nulla il link di msdn microsoft, sei nel mondo linux e li ti devi relazionare!!!!!!!!!

    Ci sono varie possibili soluzioni, che dipendono dalla tua implementazione di Dominio (io solitamente evitavo ldap e usavo winbind, con samba4 ho solo dei member e non posso testare le soluzioni )

    http://serverfault.com/questions/599893/how-to-disable-password-change-for-openldap-user

    http://serverfault.com/questions/551742/restrict-smb-user-from-changing-password

    Ciao Gastone

    PS: Il non aver voluto essere sincero, ha portato tutti fuori strada, fatto perdere del tempo inutile in soluzioni infattibili (per il tuo AD linux) spero non sia il tuo modo di lavorare... non andrai molto lontano!

    Perchè mai usare una 10.4.1, sarà un colabrodo come sicurezza, quand oggi ci sarà almeno una 16.4...

    Il thread sarebbe da mettere in "off topics", ma ci sono talmente tanti riferimenti a windows, che può restare qui


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere




    mercoledì 2 novembre 2016 20:52
    Moderatore

Tutte le risposte

  • A mio parere la cosa migliore è utilizzare direttamente un prodotto "già pronto": ad esempio questo è gratuito per 50 utenti ma se cerchi sul web ce ne sono molti altri. Se puoi investire ti consiglio anche Microsoft Identity Manager: https://www.microsoft.com/en-us/cloud-platform/microsoft-identity-manager

    Secondo me non c'è motivo di sviluppare qualcosa da zero che poi potenzialmente può portare problemi (ovviamente verrà eseguita una fase di beta testing, ma qualcosa sfuggirà sempre rispetto ad un prodotto commerciale più diffuso). Senza contare il tempo da impiegare (se non sbaglio ci stai lavorando da Luglio) e il fatto che alcuni problemi potrebbero portare addirittura a falle di sicurezza, non dico che sia il tuo caso, ma il rischio c'è sempre.

    Comunque come specificato qui https://support.microsoft.com/en-us/kb/305144  il flag per impedire il cambio password non può essere impostato in maniera diretta ma solo via codice tramite le funzioni specificate nell'articolo, quindi sinceramente non sono sicuro che sia possibile farlo tramite PHP.

    domenica 30 ottobre 2016 19:16
    Moderatore
  • Grazie per la risposta,
    Il problema è che il "prodotto già pronto" lo dovrei modificare per personalizzarlo e non verrebbe mai come voglio.
    Anche a me preoccupano le falle di sciurezza, ma programmo con un occhio alla sicurezza e alla gestione corretta degli errori.
    Come avrai forse capito, lavoro (gratis come volontariato) in un Istituto Comprensivo (quindi Infanzia, Elementari e Medie), dove non è previsto un tecnico pagato dallo stato e nessuna sovvenzione statale diretta per il reparto network e tecnico.
    Quindi ovviamente la scuola non ha i soldi per acquistare software.
    L'articolo lo avevo letto e quindi (come dicevo sopra) so bene che quel flag non si può modificare modificando solo il flag su ldap... ma spero in un modo per farlo comunque inviando solo comandi ldap, senza quindi usare rsat o powershell o script/programmi (ricordo che lavoro su linux).

    Spero qualcuno possa aiutarmi lo stesso.

    lunedì 31 ottobre 2016 01:45
  • hai mai provato ad aiutarti con questo ?

    http://www.resources.fortunedesign.co.uk/jspack/asp2php.html


    Edoardo Benussi
    Microsoft MVP - Enterprise Mobility
    edo[at]mvps[dot]org


    lunedì 31 ottobre 2016 11:12
    Moderatore
  • Non so quale funzioni tu voglia implementare, su linux esite tutto un mondo che ti potrebbe aiutare, già stai reinventando l'acqua calda, almeno scegli la stada meno complessa, soprattutto cerca di capire cosa esiste già, come usarlo!

    http://www.linux-magazine.com/Issues/2013/152/adtool

    https://anothersysadmin.wordpress.com/2008/08/19/howto-managing-active-directory-users-under-linux-with-adtool/

    Mi viene anche da pensare che sarebbe più facile fare un front end php che manda comanda scandard a windows usando ssh (installi ssh su windows e poi invii comandi da linux...)

    oppore testi il livello di integrazione che c'è far powershell per linux e quella windows (non so se il remoting funzioni) https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/

    php genera comandi powershell li esegue via exec (e occhi all'escaping!) su linux verso server remoto ....


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    lunedì 31 ottobre 2016 13:30
    Moderatore
  • Salve,
    Innanzitutto grazie per le risposte.

    @Edoardo Benussi:
    Non capisco cosa centri asp, il codice di esempio nella pagina microsoft è C++.

    @Gastone Canali:
    La funzione che desidero implementare è l'unica cosa che non riesco a fare (oltre al rename, ma che non mi interessa fare, ma che potrei usare con adtool) ed è la possibilità di impostare un utente in modo che non possa modificare la password.
    adtool non permette di fare questo e quindi mi può essere utile per altre cose ma non nel mio caso.
    Per l'implementazione con powershell c'è un problema, sul server active directory non c'è e non è possibile installarla.
    Devo per forza modificare lo scheda del dominio da ldap o con un comando che possa funzionare su linux (vedrò il link che mi hai dato sulla powershell su linux).
    Quello che alla fine chiedo è che qualcuno mi dica i passaggi (LDAP) da fare per settare quel flag.
    Ho provato a convertire il programma in c++, ma non capisco alcune funzioni che usa.

    Grazie e cordiali saluti
    Genymus

    lunedì 31 ottobre 2016 15:26
  • @Edoardo Benussi:
    Non capisco cosa centri asp, il codice di esempio nella pagina microsoft è C++.

    il mio suggerimento voleva dire: prova ad aiutarti con un convertitore di codice che ti porti in un passo o in due passi da c++ a php


    Edoardo Benussi
    Microsoft MVP - Enterprise Mobility
    edo[at]mvps[dot]org


    lunedì 31 ottobre 2016 15:40
    Moderatore
  • Const ADS_UF_ACCOUNT_DISABLE = 2
    Const ADS_UF_HOMEDIR_REQUIRED = 8
    Const ADS_UF_LOCKOUT = 16
    Const ADS_UF_PASSWD_NOTREQD = 32
    Const ADS_UF_PASSWD_CANT_CHANGE = 64
    Const ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 128
    Const ADS_UF_NORMAL_ACCOUNT = 512
    Const ADS_UF_INTERDOMAIN_TRUST_ACCOUNT = 2048
    Const ADS_UF_WORKSTATION_TRUST_ACCOUNT = 4096
    Const ADS_UF_SERVER_TRUST_ACCOUNT = 8192
    Const ADS_UF_DONT_EXPIRE_PASSWD = 65536
    Const ADS_UF_MNS_LOGON_ACCOUNT = 131072
    Const ADS_UF_SMARTCARD_REQUIRED = 262144
    Const ADS_UF_TRUSTED_FOR_DELEGATION = 524288
    Const ADS_UF_NOT_DELEGATED = 1048576
    Const ADS_UF_USE_DES_KEY_ONLY = 2097152
    Const ADS_UF_DONT_REQUIRE_PREAUTH = 4194304
    Const ADS_UF_PASSWORD_EXPIRED = 8388608
    Const ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION = 16777216
    Const ADS_UF_NO_AUTH_DATA_REQUIRED = 33554432
    Const ADS_UF_PARTIAL_SECRETS_ACCOUNT = 67108864
    
    Set obj = GetObject("LDAP://cn=philipp,ou=user,dc=cerrotorre,dc=de")
    
    'The user is disabled (set flag bit):
    obj.userAccountControl = obj.userAccountControl or ADS_UF_ACCOUNT_DISABLE
    obj.SetInfo
    
    'The user is enabled (remove flag bit):
    obj.userAccountControl = obj.userAccountControl xor ADS_UF_ACCOUNT_DISABLE
    obj.SetInfo

    http://www.selfadsi.org/ads-attributes/user-userAccountControl.htm

    00000000000000000000000001000000 64   UF_PASSWD_CANT_CHANGE

    Come setti gli attributi da php, devi settare l'attributo Active Directory  userAccountControl  con il bit a 1


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    lunedì 31 ottobre 2016 18:09
    Moderatore
  • Ma hai php ldap_modify vedi bit da cambiare post precedente

    http://php.net/manual/en/function.ldap-modify.php

    <?php
    //esempio di modifica attributo da cambiare per disabilitare il cambio password function userchange($username,$enable=1,$domadlogin,$domadpw,$domctrl) { $ldapServer = $domctrl; $ldapBase = 'DC=foo,DC=bar'; $ds = ldap_connect($ldapServer); if (!$ds) {die('Cannot Connect to LDAP server');} $ldapBind = ldap_bind($ds,$domadlogin,$domadpw); if (!$ldapBind) {die('Cannot Bind to LDAP server');} ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); $sr = ldap_search($ds, $ldapBase, "(samaccountname=$username)"); $ent= ldap_get_entries($ds,$sr); $dn=$ent[0]["dn"]; // Deactivate $ac = $ent[0]["useraccountcontrol"][0]; $disable=($ac | 2); // set all bits plus bit 1 (=dec2) $enable =($ac & ~2); // set all bits minus bit 1 (=dec2) $userdata=array(); if ($enable==1) $new=$enable; else $new=$disable; //enable or disable? $userdata["useraccountcontrol"][0]=$new; ldap_modify($ds, $dn, $userdata); //change state $sr = ldap_search($ds, $ldapBase, "(samaccountname=$username)"); $ent= ldap_get_entries($ds,$sr); $ac = $ent[0]["useraccountcontrol"][0]; if (($ac & 2)==2) $status=0; else $status=1; ldap_close($ds); return $status; //return current status (1=enabled, 0=disabled) } // use this to disable an account: // userchange('john.doe@foo.bar',0,'admin@foo.bar', 'secret','domctrl.foo.bar'); // ..but this to enable it: // userchange('john.doe@foo.bar',1,'admin@foo.bar', 'secret','domctrl.foo.bar'); ?>


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere


    lunedì 31 ottobre 2016 18:12
    Moderatore
  • Grazie, allora:

    @Gastone Canali:
    Probabilmente non hai capito cosa chiedevo, io dovrei modificare il campo UserAccountObject precisamente il valore: PASSWORD_CANT_CHANGE... solo che, come spiegato da questo articolo https://msdn.microsoft.com/en-us/library/aa746398(v=vs.85).aspx non è possibile farlo settando il bit, ma seguendo la procedura del link che non riesco ancora a comprendere.
    Uso anchio ldap_modify, per settare il resto dei parametri utente, ma con questo non funziona.

    Grazie


    martedì 1 novembre 2016 20:49
  • Ho visto ora che quel bit da settare è l'unico che necessita di una procedura diversa

    https://support.microsoft.com/en-us/kb/305144
    PASSWD_CANT_CHANGE - The user cannot change the password. This is a permission on the user's object. For information about how to programmatically set this permission, visit the following Web site:

    http://msdn2.microsoft.com/en-us/library/aa746398.aspx

    "Quello che alla fine chiedo è che qualcuno mi dica i passaggi (LDAP) da fare per settare quel flag."

    Il codice in questione cambia la security dell'attributo, modifica l'attributo e ripristina le security, con php il settaggio delle security non sembra possibile...

    Ho anche trovato una libreria per gestire AD in php e nonostate abbiano implementato molte funzioni per la per creazione/cancrllazione/... di utenti/gruppi  (+o- quello che stai facendo tu...) non sono riusciti a settare il maledetto bit... https://github.com/adldap/adLDAP/wiki/adLDAP-Developer-API-Reference

    Cambiare le ACE/DACL da server linux con php su di un server remoto windows, la vedo durissima, gli unici esempi che ho trovato il web server risiedeva su windows e da php eseguivano un setacl.exe per tali modifiche. (soluzioni? webservice, esecuzione remota di codice su windows)

    Che server windows hai per non aver powershell????


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    martedì 1 novembre 2016 23:23
    Moderatore
  • @Gastone Canali:
    Il fatto è che il server Active Directory non è ospitato su macchina windows, ma è emulato da Samba 4 che gira su Ubuntu Server 10.4.1.
    Per cui non ho powershell ne altri tool windows...
    Il bello è che da RSAT ho il controllo del dominio quasi fossi con Windows Server (a parte servizi come dhcp e dns che gestisco manualmente sul server), quindi un modo per farlo inviando comandi al server ci deve essere.
    A me basterebbe capire i passaggi che devo fare (e magari se è possibile farli da ldap), da quello che sono riuscito a comprendere, non è tanto il flag che si modifica ma che sia l'account che viene autorizzato o no a cambiare la password.
    Ho solo alcuni account che non dovranno possedere la capacità di cambiare la password e nell'ipotesi peggiore posso (in quel caso) utilizzare RSAT.

    Spero che, dopo questa rivelazione, ci sia ancora qualcuno disposto ad aiutarmi.

    In ogni caso, grazie a tutti per il tempo dedicatomi:
    Cordiali Saluti

    Genymus

     
    mercoledì 2 novembre 2016 12:49
  • Caro Genimus Sgfocpr,

    dopo la rivelazione, sono rimasto senza parole e lo dico da Debianista che ha iniziato a usare samba 1.7 nel 1995!  Non c'entra nulla il link di msdn microsoft, sei nel mondo linux e li ti devi relazionare!!!!!!!!!

    Ci sono varie possibili soluzioni, che dipendono dalla tua implementazione di Dominio (io solitamente evitavo ldap e usavo winbind, con samba4 ho solo dei member e non posso testare le soluzioni )

    http://serverfault.com/questions/599893/how-to-disable-password-change-for-openldap-user

    http://serverfault.com/questions/551742/restrict-smb-user-from-changing-password

    Ciao Gastone

    PS: Il non aver voluto essere sincero, ha portato tutti fuori strada, fatto perdere del tempo inutile in soluzioni infattibili (per il tuo AD linux) spero non sia il tuo modo di lavorare... non andrai molto lontano!

    Perchè mai usare una 10.4.1, sarà un colabrodo come sicurezza, quand oggi ci sarà almeno una 16.4...

    Il thread sarebbe da mettere in "off topics", ma ci sono talmente tanti riferimenti a windows, che può restare qui


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere




    mercoledì 2 novembre 2016 20:52
    Moderatore
  • @Gastone Canali:

    non avevo intenzione di far perdere tempo a nessuno, sinceramente pensavo che, essendo samba 4 gestibile da RSAT, non servisse chiarire che il server ad fosse su ubuntu ma perfettamente compatibile  (anche perché questo è un forum microsoft e non credo ci siano molti esperti di linux).

    Ora ho capito di aver commesso uno sbaglio e chiedo scusa.

    uso ubuntu 14.04 perché quando ho creato il server, ancora non era uscita la 16.04 che userò quando porterò tutto in produzione.

    un'ultima domanda... ma se devo pensare nel mondo linux (uso samba-tool e winbind) come fa RSAT a modificare il database?

    non usa le stesse funzioni del vero ad?

    grazie mille e scusate tanto.

    Genymus
    mercoledì 2 novembre 2016 21:15
  • Ti mancano un po' di basi...

    Una volta c'era Server Message Block e SaMBa era l'implementazione di tale protocollo nel mondo unix/linux compatibile con il mondo microsoft... nel frattempo al MIT hanno inventato Kerberos, altri hanno creato LDAP, DNS, etc. poi è arrivata Microsoft, che ha deciso di usare Kerberos per l'autenticazione, LDAP per la gestione utenti e i loro attributi (nome, cognome, fax, cell ...) + DNS per la risoluzione dei nomi e continuando ad usare il vecchio SMB ma su tcp/ip (nbt).  Storicamente da protocollo era possibile cambiare la password usando una richiesta SMB, quindi come era possibile cambiare o inibire il cambio password tale possibilità è stata mantenuta, ma non implementata in samba-tool....


    Cosa parli RSAT non lo so,non credo ldap ma rpc, con domini samba (pre RSAT), ho sempre usato i tool di amministrazione di windows per creare utenti e quant'altro senza problemi (questo anche con domini non AD) da cui deduco RPC.

    Ciao Gastone


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere



    mercoledì 2 novembre 2016 22:50
    Moderatore