SecSign ID Plugin: Unix PAM - technisches Tutorial

16.12.2016 5 Minuten Lesedauer

Zwei-Faktor Authentifizierung für Unix PAM

Die Pluggable Authentication Modules (PAM) sind eine Softwarebibliothek, die eine allgemeine Programmierschnittstelle für Authentifizierungsdienste zur Verfügung stellt. Statt die Einzelheiten der Authentifizierung in jeder Applikation neu zu formulieren, bietet die PAM-API einen standardisierten Dienst in Form von Modulen an. In einer Konfigurationsdatei können die Module einzelnen Diensten zugeordnet werden, ohne dafür die Software, die diese Dienste realisiert, neu kompilieren zu müssen. PAM steht inzwischen auf AIX, HP-UX, Solaris, Linux, FreeBSD, NetBSD, Mac OS X und DragonFly BSD zur Verfügung.

PAM Überblick
Integration

Integration des Plugins in Ihr Setup

SecSign ID Integration

Please configure your desired integration of the SecSign ID Two Factor Authentication

Choose a system, where you want to add the secure login

Do you need your own ID Server inside your protected network or prefer if we manage and maintain it for you

The location to save the assigned SecSign IDs to a user account or the IDM alltogether

System to protect
?
The System you want to protect - Choose a system, where you want to add the secure login
SecSign ID Server location
?
Do you need your own ID Server inside your protected network or prefer if we manage and maintain it for you
User account location
?
The system to save the assigned SecSign IDs to a user account or the IDM alltogether
edit the settings to change the integration
Authentication
2FA
2FA blind
2FA no AP
2SA
2SA no AP
2SA blind
OTP
Enrollment
Custom ID
Pattern
IDP Custom Website
Enrollment initiated by SP
Enrollment with IDM
Show Network
Hide Network
Fullscreen
Request Solution
x
The authentication was successful
Anwendungsgebiete

Anwendungsgebiete

Das SecSignID Pluggable Authentication Module kann vielfältig genutzt werden um eine sichere Zwei-Faktor Authentifizierung bereit zu stellen.

  • SSH
  • FTP
  • Apache HTTP Auth
  • Desktop Logins

Sollen Dienste über einen RADIUS Server und Active Directory Authentifiziert werden, so stellen wir den SecSignID RADIUS Proxy bereit, welcher sich dann um die Zwei-Faktor Authentifizierung kümmert. Die SecSignIDs werden dann nicht mehr aus einer Konfigurationsdatei gezogen, sondern am Active Directory angefragt.

Authentifizierung

Ablauf der Authentifizierung

Der Nutzer gibt, am Beispiel einer SSH Verbindung, ganz normal seinen Nutzernamen und sein Passwort an. Einen Augenblick später erhält er eine Push-Notification auf sein Smartphone, wo er den Service-Namen und die Adresse sehen kann. Bestätigt er die Anfrage, wird die SSH Verbindung sofort aufgebaut.

So einfach läuft die 2-Step Zwei-Faktor Authentifizierung für den Nutzer ab und verhindert, dass unbefugte in das System eindringen können, selbst wenn das Passwort bekannt ist.

So funktioniert die Authentifizierung am SSH Beispiel:

pam-sequence-1

  1. Ein SSH Client öffnet eine SSH Verbindung zum Server
  2. Die Anwendung SSHd nimmt die Anfrage entgegen und stellt eine Authentifizierungsanfrage an die PAM Bibliothek
  3. In der entsprechenden Konfigurationsdatei wird geprüft, welche PAMs genutzt werden sollen. In dem Fall wird, wie normalerweise bei einer SSH Verbindung, zuerst nach dem Passwort des Nutzers gefragt
  4. Im zweiten Schritt wird das SecSignID PAM aufgerufen.
  5. Das SecSignID PAM lädt die Konfigurationsdatei und sucht die SecSignID des Nutzers, welcher sich gerade authentifizieren möchte
  6. Anschließend wird der SecSignID Server benachrichtigt, dass sich eine SecSignID authentifizieren möchte
  7. Der SecSignID Server sendet eine Push-Notification an das Smartphone des Nutzers
  8. Der Nutzer kann den Login nun auf seinem Smartphone bestätigen
  9. Das PAM fragt den SecSignID Server nach dem Status der Authentifizierung. Hat der Nutzer den Login bestätigt, wird dies dem PAM mitgeteilt.
  10. Das SecSignID PAM wertet die Antwort des Servers aus und entscheidet ob die Authentifizierung gültig ist. Ist dies der Fall, sendet das PAM den Status an die PAM-Bibliothek
  11. Die PAM-Bibliothek überprüft, ob es noch weitere Authentifizierungsroutinen gibt und sendet die Authentifizierungsbestätigung an die Anwendung, in dem Fall SSHd
  12. SSHd erhält von der PAM Bibliothek die Bestätigung, dass der Nutzer sich korrekt authentifiziert hat und baut nun die SSH Verbindung auf
Vorbereitungen

Vorbereitungen

Laden Sie das SecSignID PAM Archiv herunter und entpacken Sie es. Die Bibliothek besteht aus vier Dateien:

  • Makefile: Wird zum kompilieren der Quelldateien genutzt
  • libsecsinid.c: C Bibliothek für die SecSignID Zwei-Faktor Authentifizierung
  • libsecsinid.h: Zugehörige Header-Datei mit Typdefinitionen und Funktionsprototypen
  • secsignid.c: PAM zur Nutzung der SecSignID
  • secsignid.config: Konfigurationsdatei, welche Nutzernamen und dazugehörige SecSignID zusammenfasst

Damit das Programm kompiliert werden kann und fehlerfrei ausgeführt werden kann, müssen folgende Vorraussetzungen erfüllt sein:

  • Unix Plattform oder Mac
  • gcc Kompiler
  • libcurl installiert
  • Internetverbindung  (der SecSignID Server kommuniziert auf Port 443)

Der gcc Kompiler und libcurl können zum Beispiel unter Debian wie folgt installiert werden:

su
apt-get update
apt-get install build-essential
apt-get install curl 

oder mit Ubuntu:

sudo apt-get install libpam0g-dev 
sudo apt-get install libcurl4-gnutls-dev 
sudo make 

oder mit RHEL:

yum groupinstall "Development Tools"
yum install curl-devel
yum install pam.i686
yum install pam-devel

Beim Mac kann der Kompiler gcc und libcurl am einfachsten via Homebrew installiert werden.

Konfiguration

Konfiguration des PAM

In der Datei secsignid.c gibt es Konfigurationsmöglichkeiten des Moduls. So können Pfade zur Konfigurationsdatei und den Log- & Debug Dateien angepasst werden.

Konfigurationsdatei

Die Konfigurationsdatei secsignid.config fasst die Nutzernamen und die dazugehörigen SecSignIDs zusammen. Die Datei sollte an einem Ort aufbewahrt werden, wo Root- oder Administrator Zugangsrechte erforderlich sind, wie zum Beispiel /etc/secsignid/secsignid.config. Der Pfad zur Konfigurationsdatei wird in der Datei secsignid.c in der Konstante CONFIGFILE gesetzt.

#define CONFIGFILE "/etc/secsignid/secsignid.config"

Generelle Einstellungen:
Das SecSign ID PAM überträgt mehrere Login- und Serverdetails zum Smartphone des Nutzers, inklusive Service Beschreibung, IP-Addresse oder URL:

# ID related settings, will be displayed on the users app
secservicename=testPAM_internal
secserviceaddress=your-url.com

Ausgaben:
Der Parameter secoutput gibt an, ob es eine Ausgabe auf der Konsole (wie im folgenden Beispiel) geben soll oder nicht.

Start SecSignID 2FA ...
Press enter to proceed ...
SecSignID 2FA successful ...

Wird secoutput=1 gesetzt, wird eine Ausgabe erzeugt und der Nutzer muss Enter drücken, bevor die 2FA startet (dies hängt damit zusammen, dass PAM Nachrichten nicht ohne Eingabe im gleichen PAM Prozess angezeigt werden sondern im Buffer landen).

Der Parameter secoutputid gibt an ob bei dem Login die SecSign ID des Users angezeigt werden soll.

# displays that the 2FA has started [true|false]
secoutput=true

# displays the SecSignID at login [true|false]
secoutputid=true

Interval:
Das PAM Plugin enthält eine Intervall Funktion. Nach einer erfolgreichen Authentifizierung, wird die 2FA in einem gewissen Zeitrahmen übersprungen (in Minuten). Die Intervall Funktion wird ausgeschalten wenn 0 angegeben wird.

# skip 2FA if previous login was less than x minutes ago
secintervalmin=10

Die Intervall Funktion braucht einen schreibbaren Ordner, welcher in secsignid.c definiert wird. Wenn ein Nutzer sich erflogreich mit der 2FA anmeldet, wird eine Datei mit Nutzernamen und Timestamp erzeugt. Bei jedem Login prüft das PAM den Timestamp des Nutzers und entscheidet ob eine 2FA nötig ist. Stellen sie sicher, dass der Ordner im Vorfeld mit den entsprechenden Rechten angelegt wird.

#define INTERVALFILEFOLDER "/etc/secsignid/lockfiles/"

Nutzer Mapping mit dem Login Namen:
Wenn sich ein Nutzer über SSH authentifizieren will und dabei das PAM verwendet wird, kann sich der Administrator entscheiden ob die SecSign ID des Nutzers gleich dem SSH Login Namen ist oder eine manuelle SecSign ID gesetzt werden soll.

Ein automatisches Mapping über den Login Namen sollte nur bei Inhouse ID Servern aktiviert sein. Wenn sie den öffentlichen Cloud ID Server nutzen, muss ein manuelles Mapping benutzt werden

# automatic secsign id user mapping, AD user name equals SecSignID [true|false]
# only recommended for On-Premise Servers setups, otherwise false
secadusername = true

Manuelle SecSign IDs:
Wird auf ein automatisches Mapping verzichtet, muss jeder Nutzer einen Eintrag in der Konfigurationsdatei mit folgendem Schema erhalten:

# manual secsign id user mapping if secadusername=false
#username=secsignid
someLinuxUsername=someSecSignID
Server Endpunkte

Wenn ein On-Premise SecSignID Server genutzt wird, dann muss in der Datei libsecsignid.c die URL entspechend angepasst werden:

char *secSignIDServer  = "https://httpapi.secsign.com";
char *secSignIDServerFallback = "https://httpapi2.secsign.com";
Debugging

Die Bibliothek hat einen debug Modus, welcher jegliche Schnittstellenkommunikation ausgibt. So kann sicher gestellt werden, ob die Anfragen korrekt gesendet werden und wann nach dem Sitzungsstatus gefragt wird. Um den Debug Modus zu aktivieren, können Sie folgende Konstanten anpassen:

DEBUGTYPE gibt dabei an, was mit der Debug-Ausgabe geschehen soll:

  • NO = Kein Debugging
  • YES = Ausgabe auf StdOut
  • FILEDEBUG = Ausgabe in Datei

DEBUGFILEPATH beschreibt den Pfad, wo die Debug-Datei abgelegt werden soll. Die Datei muss vom Programm beschreibbar sein. Wenn keine Debug-Datei existiert, wird eine angelegt.

#define DEBUGTYPE FILEDEBUG
#define DEBUGFILEPATH "/etc/secsignid/secsignid.debug" 
Logging

Logging ist für Schnittstellenfehler gedacht. Es werden technische Fehler (zum Beispiel falsche Syntax der Parameter) und API Fehler (zum Beispiel nicht gefundener Nutzer) geloggt. Es kann eingestellt werden, ob alle Fehler ins Syslog oder in eine separate Datei geschrieben werden:

  • FILELOG = Fehler werden in eine Datei geschrieben, der 2. Parameter ist der Dateiname der Logdatei
  • SYSLOG = Fehler werden ins Syslog geschrieben, 2. Parameter wird ignoriert, muss aber vorhanden sein
  • NO = es wird kein Log geschrieben, 2. Parameter wird ignoriert, muss aber vorhanden sein
#define LOGTYPE FILELOG
#define LOGFILEPATH "/etc/secsignid/secsignid.log" 
Kompilieren und Installation

Kompilieren und Installation

Um das PAM zu kompilieren, öffnen Sie eine Shell, bzw. das Terminal, wechseln Sie in das entpackte Verzeichnis in dem das C-Script liegt und geben Sie make ein. Das Programm pam_secsignid.so wird erzeugt.

Das Programm kann manuell wie folgt kompiliert werden:

gcc -fPIC -DPIC -shared -rdynamic -o pam_secsignid.so secsignid.c libsecsignid.c -lcurl

Nach dem kompilieren muss die Datei in das PAM Verzeichnis gelegt werden. Dies ist üblicherweise /lib/security oder /lib/x86_64-linux-gnu/security:

cp pam_secsignid.so /lib/security/pam_secsignid.so 

oder

cp pam_secsignid.so /lib64/security/pam_secsignid.so 

Ihr eigener ID Server

Die Inhouse Installation der SecSign ID bietet Ihnen die Flexibilität, dich mit Ihrem bevorzugten Server, Services und Geräten zu verbinden. Passen Sie die SecSignID Ihrer Unternehmensmarke an!

Mehr Erfahren
On Premise 2FA ID

Letzte Blog Einträge, Neuigkeiten & Funktionen

SecSign Portal Neuerungen

Die neuesten SecSign Portal Updates ermöglichen unseren Nutzern eine noch einfacherere und sicherere Bedienung. History Notiznotifikationen Dateien markieren Softkey Dateien beim Upload signieren Hochgeladene Da ...

Mehr Lesen

Zwei-Faktor Authentifizierung (2FA) vs. Zwei-Schritt Authentifizierung (2SA)

Zwei-Faktor Authentifizierung und Zwei-Schritt Authentifizierung sind zwei Möglichkeiten, den Login Ihrer Nutzer abzusichern. Beide Optionen können, abhängig von Ihren Anforderungen und Bedingungen, Ihren Nutzern eine sichere A ...

Mehr Lesen

Crowd SSO

Inhalt Vorbedingungen für die Einrichtung Installieren und Einrichten der einzelnen Komponenten als Server-Anwendung Einrichten von Crowd für die zentrale Benutzerverwaltung Einrichten der Applikation (z.B. JI ...

Mehr Lesen
SecSign 2FA