Anmeldung am Active Directory mit einem Linux Client

Alle Fragen zur Netzwerkkommunikation
Antworten
Nimral
Beiträge: 274
Registriert: Mi 10. Jun 2015, 11:33

Anmeldung am Active Directory mit einem Linux Client

Beitrag von Nimral »

... gibt es dafür eine Lösung für FPC?

HG, Armin.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von af0815 »

Gegenfrage, wie geht es unter Linux selbst ? Und was meinst du genau mit Anmeldung ? Bei M$ kann man die Anmeldung sehr weit hinunter skalieren. Genaugenommen kann alles ein Securitytoken haben.

Bis jetzt habe ich nur gegen PDC Erfahrung mit Shares gehabt, aber nicht gegen AD. Und gegen den PDC hat oft geholfen, einfach einen TProzess zu verwenden und die Befehle vom Terminal zu verwenden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Nimral
Beiträge: 274
Registriert: Mi 10. Jun 2015, 11:33

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von Nimral »

Ich hab da ein Windows Programm, das einen eigenen Login erfordert, mit Username und Passwort. Jetzt ist gerade eine Diskussion ausgebrochen ob ich es auf Linux portieren kann. Soweit ich weiß, geht das nicht. M$ hat nie einen AD Client für Linux herausgegeben. Andere sind anderer Meinung, meinen hier und dort irgendwas gesehen oder gehört zu haben und seit Microsoft sich so offen gibt und da es SAMBA gibt und den MS SQL Server für Linux (der *möglicherweise, wenn er zum Windows Produkt aufschließen möchte, Pass-Through Authentifizierung unterstützenh könnte) und es gibt sogar ein .net Framework für Linux - da *muss* das doch *irgendwie* gehen. Meint man.

Ich glaubs erst wenn ich den Quellcode gesehen habe :-)

Armin.

Socke
Lazarusforum e. V.
Beiträge: 2974
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von Socke »

Mit LDAP kannst du das Verzeichnis des AD abfragen. Du kannst also einfach prüfen, ob dein Programm sich mit dein eingegebenen Anmeldedaten dort authentifizieren kann.
Das geht z.B. mit Synapse: http://www.ararat.cz/synapse/doku.php/p ... ldapsample. Alternativ bringt FPC in der Unit "ldap" die Bindings für die gleichnamige Bibliothek (libldap) mit. Damit kannst du ggf. vorhandene C-Beispiele nach Pascal portieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von af0815 »

Du wirst zuersk einmal den Linux-Computer in das AD bringen müssen. Erst dann wird du die Möglichkeit haben LDAP Anfragen an das AD zu richten.

zB: Englisch
https://computingforgeeks.com/join-ubun ... ad-domain/
https://www.datasunrise.com/blog/profes ... ry-domain/
https://www.redhat.com/sysadmin/linux-active-directory
dazu gibt es jede Menge an Infos.

Erst wenn der PC ein Member ist, kannst du mit LDAP mittels Synapse was weiterbringen. Ich würde es zuerst einmal mit den Kommandozeilen Tools versuchen.
Deutsch
https://www.thomas-krenn.com/de/wiki/Pa ... einrichten - nur für die LDAP Tests, nicht gleich das ganze Pam installieren !
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Nimral
Beiträge: 274
Registriert: Mi 10. Jun 2015, 11:33

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von Nimral »

Danke für die Links. Ich acker mich morgen durch.

Socke
Lazarusforum e. V.
Beiträge: 2974
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von Socke »

af0815 hat geschrieben:
Di 23. Nov 2021, 19:28
Du wirst zuersk einmal den Linux-Computer in das AD bringen müssen. Erst dann wird du die Möglichkeit haben LDAP Anfragen an das AD zu richten.
Das musst du nur machen, wenn du den User gegen die lokale Linux-Authentifizierung prüfst, welche ihrerseits per Kerberos das AD abfragt. Das hat mit LDAP nichts zu tun.
LDAP hingegen ist ein Netzwerkprotokoll, wie du Verzeichnisse (u.A. MS AD) abfragen kannst. Dazu brauchst du nur eine Netzwerkverbindung und die Lese-Berechtigungen im Verzeichnis. Ohne groß programmieren zu müssen, kann man das unter Linux auch mit cURL testen: https://stackoverflow.com/questions/445 ... l/44547176
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von af0815 »

Meinen letzten Erfahrungen nach (ist ein wenig her) bekomme ich von der AD bei LDAP Anfragen nicht wirklich gute Antworten, solange ich nicht zumindest mit dem Computer in der AD bekannt bin. Fällt nicht gleich auf, erst wenn man mal den Rechner oder die VM wechselt, weil beim testen meldet man sich gerne mal an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Nimral
Beiträge: 274
Registriert: Mi 10. Jun 2015, 11:33

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von Nimral »

Ist auch mein Stand. Ohne Secure Channel ins AD keine Verbindung. Der ganze Komplex AD und LDAP und Microsoft ist ein einziger Nebelhaufen. Sobald ich mich durch Massen von warmer Luft gewühlt habe, lande ich gewöhnlich bei läppischen "Lösungen", siehe Attribute userPassword bzw. unicodePwd. Im Moment forsche ich Richtung OAuth2 Support.

Benutzeravatar
six1
Beiträge: 502
Registriert: Do 1. Jul 2010, 19:01

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von six1 »

Ich habe das über 'ADODB.Connection' gelöst; sollte auch unter Linux funktionieren.

Hier mal ein paar "Bruchstücke"

Code: Alles auswählen

var
  objConnection:Variant;
  ConnectionString='Provider=ADSDSOObject;'+
                    'Encrypt Password=true;'+
                    'Integrated Security=SSPI;'+
                    'Data Source=LDAP://my.Domain.de:636;'+
                    'Mode=Read;'+
                    'Bind Flags=0;' +
                    'ADSI Flag='+inttostr(
                                           ADS_SECURE_AUTHENTICATION or
                                           ADS_USE_ENCRYPTION        or
                                           //ADS_READONLY_SERVER       or
                                           //ADS_PROMPT_CREDENTIALS    or
                                           //ADS_NO_AUTHENTICATION     or
                                           //ADS_FAST_BIND             or
                                           ADS_USE_SIGNING           or
                                           ADS_USE_SEALING           or
                                           //ADS_USE_DELEGATION        or
                                           ADS_SERVER_BIND           or
                                           //ADS_NO_REFERRAL_CHASING   or
                                           //ADS_AUTH_RESERVED         or
                                           0
                                         )+';';
                                         
const ADS_SECURE_AUTHENTICATION   = 1;           //0x1
const ADS_USE_ENCRYPTION          = 2;           //0x2
const ADS_USE_SSL                 = 2;           //0x2
const ADS_READONLY_SERVER         = 4;           //0x4
const ADS_PROMPT_CREDENTIALS      = 8;           //0x8
const ADS_NO_AUTHENTICATION       = 16;          //0x10
const ADS_FAST_BIND               = 32;          //0x20
const ADS_USE_SIGNING             = 64;          //0x40
const ADS_USE_SEALING             = 128;         //0x80
const ADS_USE_DELEGATION          = 256;         //0x100
const ADS_SERVER_BIND             = 512;         //0x200
const ADS_NO_REFERRAL_CHASING     = 1024;        //0x400
const ADS_AUTH_RESERVED           = 2147483648;  //0x80000000
                                         
  
  
  objConnection := CreateOleObject('ADODB.Connection');
  objConnection.Provider := 'ADsDSOObject';
  objConnection.ConnectionString:=ConnectionString;
  objConnection.Open('Active Directory Provider');        

procedure GET_USER_DATA(var USER:TUser);
var
    objCommand,objRecordSet:Variant;
    xmlDoc:TXMLDocument;
    i, j:integer;
    xml, premail, primarymail:string;
    Liste:TStringlist;
    S:TSTringSTream;
    is_value:boolean;
begin
  try
 
  // Get AD-Data
     objCommand := CreateOleObject('ADODB.Command');
     objCommand.ActiveConnection := objConnection;
     objCommand.Properties['Page Size'] := 10;
     objCommand.Properties['Searchscope'] := ADS_SCOPE_SUBTREE;
 
     objCommand.CommandText := widestring(
                               'SELECT cn,company,department,displayname, facsimileTelephoneNumber,givenname,mail,userPrincipalname,sn,streetAddress,telephoneNumber FROM ''LDAP://DC=polizei,DC=hessen,DC=de'' ' +
                               'WHERE objectClass=''user'' AND objectCategory=''person'' AND name='''+USER.persid+''''
                               );
     objRecordSet := objCommand.Execute;
     try
       is_value:= objRecordSet.eof and objRecordSet.bof;
     except
       is_value:=false;
     end;

     if is_value then 
	 begin
       // Kein AD User (mehr)
       ....  
     end else 
	 begin
       // Ist noch AD User
       try
        objRecordSet.moveFirst;
        if objRecordSet.Fields['cn'] <> NULL then
          try USER.persid:=vartostr(objRecordSet.Fields['cn'].Value); except end
        else
          USER.persid:='';
		....  
       finally
        objCommand:=NULL;
        objRecordSet:=NULL;
       end;
	 end;
end;     

Ich habe jetzt nur ein paar Teile aus einem großen Projekt heraus kopiert.
Schau mal, wie weit du damit kommst.
Sollten Fragen sein, schau ich gerne nochmal nach.
Gruß, Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von af0815 »

@six1
Sieht sehr elegant aus, IMHO muss sich der Treiber mit der Authentizierung herumschlagen. Zusätzlich sieht es aus, als würde das eine Win only Lösung sein. Die ADODB Connection und ADsDSOObject würde für mich darauf hinweisen. Ist natürlich geil die Möglichkeit zu verwenden LDAP in SQL zu mappen. Ich fürchte nur, das das ganze mit Linux nicht so einfach ist, da ich bis jetzt keinen Treiber für solche Sachen gefunden habe. AUs dem Samba Projekt ist mir nur der klassische Weg über LDAP bekannt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 397
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Anmeldung am Active Directory mit einem Linux Client

Beitrag von PascalDragon »

six1 hat geschrieben:
Mi 24. Nov 2021, 12:37
Ich habe das über 'ADODB.Connection' gelöst; sollte auch unter Linux funktionieren.
Das scheitert schon an CreateOLEObject. COM (und damit auch OLE) existieren nur unter Windows (ich ignoriere hier jetzt mal XPCOM, da dies auch keine Verbindung zu einem anderen Rechner erlaubt).
FPC Compiler Entwickler

Antworten