Kategorien
Programmierung

LDAP-Suche schlägt bei Namen mit Umlauten fehl

Solange ein Benuztername keinen Umlaut besitzt, kann man den Datensatz Daten mit dem Perl-Modul Net::LDAP recht einfach aus dem Active Directory auslesen:

use Net::LDAP;
$loginUser = Win32::LoginName();

$ldap = Net::LDAP->new($ldapServer) or die "$0";
$ldap->bind($ldapUser, $ldapPass});
$ldap_base = 'OU=Users';
$ldap_results = $ldap->search(base => $ldapBase, filter => "sAMAccountName=$loginUser");

if ($ldap_results->count) {
    # was ganz tolles mit dem Datensatz anstellen
}

Sofern aber ein Umlaut in dem Login-Namen steckt, so schlägt die Suche nach „benjamin.tröt“ fehl, obwohl ein entsprechender sAMAccountName im Active Directory vorhanden ist.

Eine einfache Lösung bietet der Beitrag „Windows logon behavior if your user name contains characters that have accents or other diacritical marks„, welcher – auf das Login bezogen – folgende Ausweichmöglichkeit skizziert:

If your user name in the Active Directory directory service contains one or more characters that have accents or other diacritical marks, you may find that you do not have to use the diacritical mark as you type your user name to log on to Windows. You can log on by using the simple form of the character or characters. For example, if your user name in Active Directory is jésush, you can type jesush in the User name box in the Log On to Windows dialog box to log on to Windows.

Interessanterweise funktioniert dies auch bei LDAP-Anfragen im Active Directory, so daß eine Suche nach dem sAMAccountName „benjamin.trot“ zum gewünschten Datensatz führt.

Stellt sich die Frage, was passiert, wenn tatsächlich ein Benjamin Trot neben seinem Kollegen Tröt Platz nimmt …

Kategorien
Programmierung

Firefox ignoriert charset=UTF-8

Ein Perl-Skript stellt sein UI als Website mit Hilfe des Moduls HTTP::Server::Simple zur Verfügung. Eigentlich sollte ein

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

im Header-Bereich ausreichen, um anzuzeigen, daß die Daten in UTF-8 kodiert sind. Firefox weigerte sich hartnäckig und benutze immer den Default „windows-1252“ zur Darstellung, was alle Umlaute bis zur Unkenntlichkeit verstümmelte.

Erst durch Mitsenden der Zeichenkodierung im Header

print $cgi->header(
	-nph => 1,
	-status => '200 OK',
	-type => 'text/html',
	-charset => 'UTF-8'
);

ließ sich Firefox überreden, die Seite auch tatsächlich als UTF-8 darzustellen.

Kategorien
Programmierung

Sass ohne Ruby

War Ruby Sass bis Anfang 2019 noch das Mittel der Wahl, wenn es um die Syntactically Awesome StyleSheets ging, gilt seit einigen Monaten:

Ruby Sass was the original implementation of Sass, but it reached its end of life as of 26 March 2019. It’s no longer supported, and Ruby Sass users should migrate to another implementation.

Die offizielle Referenz-Implementierung ist seither als Dart Sass erhältlich, sofern es aber lediglich um die Wandlung von scss-Files in css-Stylesheets geht, scheint LibSass in Kombination mit SassC ebenfalls eine gute Alternative.

SassC ist in den offiziellen Debian-Paketquellen enthalten, so daß ein einfaches

$ sudo apt install sassc

reicht, um die beiden Pakete „libsass1“ sowei  „sassc“ herunterzuladen und zu installieren.

Was SassC in der Grundausstattung fehlt, ist die „–watch“-Option von Ruby Sass, diese kann allerdings mit einer einfachen „while“-Schleife und den „inotify-tools“ auf der Kommandozeile oder in einem Shell-Skript nachgebildet werden:

$ while inotifywait -e close_write style.scss; do sassc --style compact style.scss style.css ; done

Das in den „inotify-tools“ enthaltene „inotifywait“

efficiently waits for changes to files using Linux’s inotify interface. It is suitable for waiting for changes to files from shell scripts.

wartet mit dem Parameter „-e close_write“, bis die überwachte Datei „style.scss“ nach dem Öffnen im Schreibmodus wieder geschlossen wurde und übergibt in der „while“-Schleife dann an „sassc“, welches die soeben geänderte Datei verarbeitet.

 

Kategorien
Betriebssysteme

Grundinstallation Debian

Die Grundinstallation von Debian ist schnell erledigt, um allerdings bereits bei der Installation Fine-Tuning betreiben zu können, sollte der Modus „Expert install“ gewählt werden. Dieser bietet nicht nur mehr und detailliertere Optionen, sondern ist an mancher Stelle (z.B. „Benutzer und Passwörter einrichten“) logischer aufgebaut als der „Graphical install“.

Im Debian Installer Menu die Option „Advanced options“ und dann „Expert install“ wählen.

Bei „Select a language“ die Option „German“ auswählen und den Rest der Spracheinstellungen bestätigen, zusätzliche Gebietsschemen müssen keine installiert werden. Die Tastatureinstellungen ebenfalls bestätigen.

Für eine Standardinstallation müssen keine weiteren Installer-Komponenten hinzugefügt werden.

Sofern im Netz ein DHCP-Server in Betrieb ist, können bei einem Großteil der Netzwerkinstallation die Vorgabewerte übernommen werden. Lediglich beim Rechnernamen (sowie ggf. Domänennamen) sollten entsprechende Eingaben gemacht werden.

Im Bereich „Benutzer und Passwörter einrichten“ kann die Vorgabe „Shadow-Passwörter benutzen?“ ebenfalls bei „Ja“ belassen, aus Sicherheitsgründen sollte aber „root das Anmelden erlauben?“ mit „Nein“ beantwortet werden. Als Folge hieraus wird bereits bei der Installation des Betriebssystems ein normales Benutzerkonto angelegt und „sudo“ direkt so eingerichtet, daß hierüber Arbeiten am System vorgenommen werden können.

Sofern kein eigener Zeitserver irgendwo in Betrieb ist, können die Vorgaben bei „Uhr einstellen“ ebenfalls übernommen werden.

Rund um „Festplatten partitionieren“ sind einige Überlegungen zu treffen, welche weitreichende Auswirkungen haben:

Die erste Entscheidung ist, ob die Partitionierung geführt oder manuell erfolgen soll, ob dafür der LVM verwendet werden soll und ob der Inhalt der Festplatte verschlüsselt werden soll oder nicht.

Bei einer Installation auf einer leeren Platte auf einem Desktoprechner ist wahrscheinlich „Geführt – vollständige Festplatte verwenden“ die richtige Option, auf einem mobilen Rechner sollte auf jeden Fall „Geführt – gesamte Platte mit verschlüsseltem LVM“ gewählt werden.

Nach Auswahl der Festplatte muss noch über die Partitionierung der Festplatte entschieden werden. Sofern man nicht einen guten Grund hat, eine der anderen Optionen zu wählen, ist dem Ratschlag

Wenn Sie Sich nicht sicher sind, wählen Sie den ersten Eintrag

zu folgen und „Alle Dateien auf eine Partition, für Anfänger empfohlen“ zu wählen. Anschließend die „Partitionierung beenden und Änderungen übernehmen“.

Bei der Installation des Basissystems kann die Vorgabe „linux-image-amd64“ übernommen werden, sofern man nicht vor hat, demnächst die Hardware des Systems zu ändern, kann bei den „in die initrd aufzunehmende Treiber“ die Option „angepasst: nur für das System benötigte Treiber einbinden“ gewählt werden.

Der Paketmanager wird im Normalfall so konfiguriert, daß ein Netzwerkspiegel statt einer anderen CD oder DVD verwendet wird. Hierbei nicht davon verwirren lassen, daß trotz „HTTPS everywhere“ die Option „http“ gewählt werden sollte. Bei der Auswahl des Spiegelservers können ebenfalls die Vorgaben bestätigt werden.

Der Einsatz von „Non-free“-Software hängt im Wesentlichen davon ab, ob zum Betrieb des Rechners irgendwelche nicht freien Bestandteile benötigt werden, was i.d.R. bei WLAN- oder Grafiktreibern der Fall ist. Die Paketdepots für Quellpakete können angewählt bleiben. „Sicherheitsaktualisierungen“ sollten auf jeden Fall installiert werden, die Auswahl von „Release-Updates“ ist im Normalfall ebenfalls sinnvoll. Die Option „Rückportierte Software“ sollte nur dann ausgewählt werden, wenn auch ein tatsächlicher Bedarf besteht.

Die automatische Installation von Sicherheitsupdates ins Geschmacksache, sofern kein zwingender Grund dagegen spricht, sollte „Keine automatischen Updates“ gewählt werden.

Um ein möglichst schlankes System zu erhalten sollten bei der Sofwareauswahl alle Optionen des „Debian desktop environment“ abgewählt und lediglich „SSH server“ sowie „Standard-Systemwerkzeuge“ selektiert werden. Der Rest wird gezielt nachinstalliert.

Als letztes wird noch der Bootmanager installiert. Hier können – sofern kein Dual-Boot o.ä. geplant ist, die Vorgaben ebenfalls übernommen werden, eine Installation in den EFI-Wechseldatenträgerpfad ist nur selten nötig.

Beim Einstellen der Uhrzeit muß als Letztes noch die Entscheidung getroffen werden, ob die Systemzeit auf UTC gesetzt ist. Ist Debian als einziges System installiert, kann hier mit „ja“ geantwortet werden, im Dual Boot-Betrieb ist entweder hier ein „nein“ oder eine Anpassung des anderen Betriebssystems notwendig.

Nach Abschluss der Installation sollte das neu installierte Betriebssystem dann starten.

Kategorien
Betriebssysteme

SSH Anmeldung mit Public-Key-Authentifizierung

Als Alternative zur „herkömmlichen“ Anmeldung mit Benutzername und Kennwort gibt es auch die Möglichkeit, sich über SSH mittels einer Kombination von privatem und öffentlichem Schlüssel auf einem anderen Rechner anzumelden. Dies hat den Vorteil, daß – sobald einmal eingerichtet – eine sichere Verbindung zwischen den beiden Rechnern hergestellt werden kann, ohne daß jedesmal das Kennwort eingegeben werden muss.

Im ersten Schritt wird hierzu das Schlüsselpaar aus privatem und öffentlichem Schlüssel erzeugt:

$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/andreas/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
...

Während die Frage nach dem Speicherort einfach mit „Enter“ bestätigt werden kann, sollte die Vergabe einer Passphrase gut überlegt sein. Ohne Passphrase liegt der erzeugte Schlüssel ungeschützt am Speicherort und kann bei einem Diebstahl problemlos verwendet werden, mit Passphrase ist eine Verwendung nur mit Kenntnis eben dieser möglich.

Als Ergebnis des Befehls werden zwei Dateien erzeugt: zum einen die Datei „id_rsa“, weche den geheimen (=privaten) Schlüssel enthält und die Datei „id_rsa.pub“, in welcher der öffentliche Schlüssel gespeichert ist.

Im zweiten Schritt kann der soeben erzeugte öffentliche Schlüssel nun auf den anderen Rechner übertragen werden. Die Syntax hierzu ist „ssh-copy-id -i ~/Pfad/zur/Schlüsseldatei Benutzername@Rechnername“

$ ssh-copy-id -i /home/andreas/.ssh/id_rsa.pub remoteuser@remotehost
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/andreas/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
remoteuser@remotehost's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'remoteuser@remotehost'"
and check to make sure that only the key(s) you wanted were added.

Sofern alles funktioniert hat, wurde auf dem Zielrechner im Verzeichnis „/home/remoteuser/.ssh“ eine Datei „authorized_keys“ erzeugt, in welche der öffentliche Schlüssel kopiert wurde.

Ist dies erfolgt, kann die Anmeldung ab sofort mit

$ ssh -i /home/andreas/.ssh/id_rsa remoteuser@remotehost

durchgeführt werden, wobei hier der private Schlüssel angegeben werden muss. Sofern beim Speichern des Schlüsselpaares die Vorgabewerte für den Namen übernommen wurden, kann die Angabe des Schlüssels entfallen, so daß die Anmeldung einfach über

$ ssh remoteuser@remotehost

möglich ist. Sofern beim Erzeugen des Schlüssels eine Passphrase vergeben wurde, wird diese bei Zugriff auf den Schlüssel abgefragt.