Synology DS716+ – 2FA für ssh einrichten

Ich konnte erfolgreich eine 2FA (Google Authenticator) für ssh auf einer Synology DS716+ (CPU: Intel Celeron N3150) einrichten, nachfolgend die erforderlichen Schritte

  • Als root mit sudo -i anmelden
  • Download des passenden Toolkits von der Synology Open Source Project Website auf sourceforge.net
  • Entpacken
    7z e #Downloadpfad#/ds.x64-6.0.dev.txz
  • Tar öffnen
    tar xf #Downloadpfad#/ds.x64-6.0.dev.tar
  • Die PAM-Headerdateien kopieren
    cp #Downloadpfad#/usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/include/security/* /opt/include/security/
  • Passendes Entware-ng (Abschnitt: for x86-64) installieren
  • Pakete nachinstallieren
    opkg install gcc
    opkg install make
    opkg install autoconf
    opkg install automake
    opkg install libpam
  • Startscript /usr/local/etc/rc.d/entware-ng.sh für Entware-ng erstellen
    Wichtige Voraussetzungen:

    • Es muss mit .sh enden
    • Rechte 755
    • Sollte auf start/stop Parameter reagieren (darauf habe ich verzichtet)
    #!/bin/sh
    mkdir -p /opt
    mount -o bind /volume1/@entware-ng/opt /opt
    /opt/etc/init.d/rc.unslung start
  • /root/.profile anpassen (letzte Zeile)
    . /opt/etc/profile
  • Download der Source von der Google Authenticator Website auf github.com
  • Entpacken
    7z e master.zip
  • Ins libpam-Verzeichnis wechseln, kompilieren und installieren (erzeugt /usr/local/lib/security/pam_google_authenticator.so)
    cd #Downloadpfad#/google-authenticator-master/libpam
    ./bootstrap.sh
    configure
    make
    make install
  • Link des pam_google_authenticator.so erstellen
    ln -sf /usr/local/lib/security/pam_google_authenticator.so /usr/lib/security/pam_google_authenticator.so
  • Link des pam_access.so erstellen
    ln -sf /opt/lib/security/pam_access.so /usr/lib/security/pam_access.so
  • /etc/ssh/sshd_config anpassen
    ChallengeResponseAuthentication yes
  • /etc/security/access-local.conf erstellen (wird benötigt um die 2FA im lokalen Netz zu unterbinden, praktisch 🙂 )
    # Two-factor can be skipped on local network
    + : ALL : #lokales Netz eintragen, CIDR Notation# (zB 10.0.0.0/8)
    + : ALL : LOCAL
    - : ALL : ALL
  • /etc/pam.d/sshd anpassen
    auth [success=3 default=ignore] pam_unix.so
    auth [success=2 default=ignore] pam_winbind.so
    auth [success=1 default=ignore] pam_ldap.so
    auth [default=die] pam_syno_log_fail.so [SSH]
    # dont use google authenticator when from local network (success=1)
    auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
    # start google authenticator (allowed-perm had to be changed cause /var/services/homes/${USER}/.google_authenticator always changes permissions to 711, dont know why :( )
    # auth required pam_google_authenticator.so echo-verification-code nullok allowed_perm=0711
    auth required pam_google_authenticator.so echo-verification-code secret=/usr/syno/etc/preference/${USER}/google_authenticator
    auth [default=done] pam_syno_log_success.so [SSH] log=no
    account [success=3 default=ignore] pam_unix.so
    account [success=2 default=ignore] pam_winbind.so
    account [success=1 default=ignore] pam_ldap.so
    account [default=die] pam_syno_log_fail.so [SSH]
    account [default=done] pam_syno_log_success.so [SSH] log=no
    password sufficient pam_unix.so
    password sufficient pam_winbind.so
    session sufficient pam_unix.so
    session sufficient pam_winbind.so
  • Temporär Telnet (Systemsteuerung / Terminal & SNMP / Telnet-Dienst) aktivieren (falls etwas schief geht)
  • sshd neu starten
    synoservicectl --restart sshd
  • google-authenticator starten und Ergebnis speichern
    ~$ google-authenticator
    xxxxxxxxxxxxxxxx
    https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/#User#@#Server#%3Fsecret%3DLBxxxxxxxxxxxxxx
     xxxxxxxx
     xxxxxxxx
     xxxxxxxx
     xxxxxxxx
     xxxxxxxx
    
    By default, tokens are good for 30 seconds and in order to compensate for
    possible time-skew between the client and the server, we allow an extra
    token before and after the current time. If you experience problems with poor
    time synchronization, you can increase the window from its default
    size of 1:30min to about 4min. Do you want to do so (y/n) n

    Ich nutze 1Password und erstelle ein Einmalpasswort mit dem Teil otpauth://totp/#User#@#Server#%3Fsecret%3Dxxxxxxxxxxxxxxxx der Ausgabe (%3F?, %3D – =)

  • Logging in /var/log/auth.log

Ich hoffe ich habe nichts vergessen, viel Glück 🙂

3 Responses to “Synology DS716+ – 2FA für ssh einrichten”

  1. Alfred Paar

    Hallo,
    ich versuche auch gerade den Google Authenticator via SSH einzurichten. Bei mir geht es um das Modell DS216+II.
    Erstmal vorweg: Der Artikel ist wirklich top!

    Ich stehe aber nun an der Stelle mit dem kompilieren von libpam an.
    Hinweis: Das PAM ist von deinem geposteten Link in ein eigenes Projekt umgezogen (https://github.com/google/google-authenticator-libpam).

    Nach runterladen und entpacken starte ich das bootstrap Script, worauf ich einen Fehler bekomme:
    #./bootstrap.sh
    /opt/bin/autoconf: /opt/bin/autom4te: /usr/bin/perl: bad interpreter: No such file or directory
    /opt/bin/autoconf: line 505: /opt/bin/autom4te: Success

    perl ist anscheinend nicht im Standartpfad, also kurzerhand verlinken: ls -s /opt/bin/perl /usr/bin/perl

    Danach starte ich das bootstrap Skript erneut und der nächste Fehler:
    #./bootstrap.sh
    Can’t exec „aclocal“: No such file or directory at /opt/share/autoconf/Autom4te/FileUtils.pm line 326.
    autoreconf: failed to run aclocal: No such file or directory

    Aus diesem Fehler werde ich allerdings nicht schlau. Ich hoffe du kannst mir weiterhelfen.

    • Alfred Paar

      Ich habe den Fehler gefunden. „automake“ wurde anscheinend nicht installiert. Mein Fehler.

      Vielen Dank trotzdem für die hervorragende Anleitung!

      • Gerd

        Hallo Alfred!

        Sorry für die späte Antwort!
        Es freut mich dass du es geschafft hast!

        LG
        Gerd

×

Kommentare sind geschlossen.