====== Sicheres Loginscript ====== Bei vielen Serveradmins kommt es vor, dass mehrere Personen Zugriff auf die Dateien haben. In diesem Artikel werde ich kurz beschreiben, wie man mittels gpg das Passwort vor neugierigen Blicken schützen kann. Es wird das Tool gpg benötigt, dass bei Debian standardmäßig installiert ist. Sollte das Tool fehlen, muss es mit dem distributionsspezifischen Paketmanager installiert werden. ===== Loginscript verschlüsseln ===== Mit einem Editor muss nach folgendem Schema das Loginscript im Verzeichnis des SteamTools erstellt werden. Login, Password, Installationsverzeichnis weichen natürlich ab und sind dementsprechend anzupassen. In diesem Beispiel wählen wir den Dateinamen ''login''. login Benutzer Passwort force_install_dir ./csgo_ds app_update 740 quit Nachdem die Datei erstellt worden ist, kann mittels gpg die Datei ''login'' synchron verschlüsselt werden. Für die Verschlüsselung nehmen wir die Standardeinstellungen. Für eine genauere Beschreibung der Verschlüsselungsmethoden und Optionsschalter kann im Artikel [[http://wiki.ubuntuusers.de/GnuPG/Symmetrische_Verschl%C3%BCsselung|Symmetrische Verschlüsselung]] nachgelesen werden. Um die Datei ''login'' zu verschlüsseln rufen wir folgenden Befehl auf: gpg -c --force-mdc login Die Passphrase zwei mal eingeben und bestätigen. Es wird die Datei ''login.gpg'' angelegt. Um das Entschlüsseln zu prüfen, kann einmal folgender Befehl aufgerufen werden: gpg -d login.gpg Nach der Eingabe der Passphrase, sollte der Text in der Konsole ausgegeben werden. Zusätzlich sollte noch folgende Fehlermeldung zu sehen sein, wenn man den Optionsschalter ''--force-mdc'' nicht verwendet hat: gpg: WARNUNG: Botschaft wurde nicht integritätsgeschützt (integrity protected) Diese braucht nicht weiter beachtet zu werden. Aus dem Grund leiten wir die Fehlerausgabe später nach ''/dev/null'' um. ===== Loginscript entschlüsseln ===== Sofern die Entschlüsselung funktioniert, sollte die Datei ''login'' gelöscht werden. Mit einer Pipe kann man der ''steam.sh'' den entschlüsselten Inhalt der ''login.gpg'' übermitteln: gpg -d login.gpg 2> /dev/null | STEAMEXE=steamcmd ./steam.sh Folglich wird ''steamcmd'' durch ''steam.sh'' gestartet. Durch die Verknüpfung mit der Pipe, wartet ''gpg'' immer noch auf die Passphrase, obwohl ''steamcmd'' schon längst gestartet ist. Es sollte vor der Eingabe der Passphrase so aussehen: Installing breakpad exception handler for appid(steam)/version(1337903821) [ 0%] Checking for available updates... [ 0%] Download complete. [----] Verifying installation... unlinked 0 orphaned pipes Steam Console Client (c) Valve Corporation -- type 'quit' to exit -- Loading Steam3...OK. Loading Steam2...OK. Ab da passiert nichts mehr. Die Aufforderung die Passphrase einzugeben, sieht man auch nicht. Dennoch wartet gpg im auf die Eingabe. Nachdem die Passphrase eingegeben worden ist, sollte folgender Text in der Konsole zu sehen sein: Logging in user 'Benutzer' to Steam Public...Success. Steam> Steam>Success! App '740' already up to date. Steam> Steam>Shutting down. . . unlinked 2 orphaned pipes CAsyncIOManager: 0 threads terminating. 0 reads, 0 writes, 0 deferrals. CAsyncIOManager: 1455 single object sleeps, 496 multi object sleeps CAsyncIOManager: 0 single object alertable sleeps, 2 multi object alertable sleeps In dem Fall war der dedicated Server schon aktuell. Als letztes kann man noch mit folgendem Befehl ein kurzes Script erstellen, dass mit dem Befehl ''read'' arbeitet und das Passwort als Variable an gpg übergibt. Es hat noch den Vorteil, dass auf die Eingabe gewartet wird. read -p "Passpshrase eingeben: " -s pass gpg --passphrase $pass -d login.gpg 2>/dev/null | STEAMEXE=steamcmd ./steam.sh pass="" Nur noch ausführbar machen: chmod u+x ./update.sh Das Script wird dann einfach mit ''./update'' ausgeführt.