Kategorien
Linux NAS

autossh als Dienst einrichten

So nutze ich AutoSSH aum meinem Gnubee 2 NAS um von überall an die Daten auf meinem NAS zu gelangen!
Die verwendung von autossh wurde auf meinem NAS notwendig da sie sonst nicht mehr über das Internet erreichbar ist. Mein Internetprovider bietet nur noch DS-Light an. 🙁

autossh?

Autossh ist ein Programm das einen Open-SSH Tunnel bei Verbindungsabbrüchen automatisch wiederherstellt.

Verbindung zum Server etablieren

Meine NAS muss eine Passwortlose Verbindung zu meinem Server aufbauen können.
Hiezu generiere ich einen SSH-Key und übertrage den Public-Key auf den Server.:

ssh-keygen -t rsa -b 2048
mv ~/.ssh/id_rsa.pub ~/.ssh/autossh-key.pub
mv ~/.ssh/id_rsa ~/.ssh/autossh-key
ssh-copy-id -i autossh-key benutzername@example.org

Verbindung testen

ssh benutzername@example.org

Dienst anlegen

Um den Tunnel beim Systemstart automatisch wieder herstellen zu lassen lege ich die Datei /etc/systemd/system/sshtunnel.service mit dem folgenden Inhalt an:

[Unit]
Description=Keeps a tunnel to 'example.org' open
After=network-online.target ssh.service

[Service]
User=root
Environment="AUTOSSH_PORT=0"
Environment="AUTOSSH_GATETIME=0"
RestartSec=30
Restart=always

ExecStart=/usr/bin/autossh -NT -o "ExitOnForwardFailure=yes" -R 17777:127.0.0.1:22 -p 22 -l benutzername example.org -i /root/.ssh/autossh-key
ExecStop=killall -s KILL autossh
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target

example.org ist durch den Hostnamen des Servers zu ersetzen, benutzername durch den verwendeten Benutzernamen.

Dienst aktivieren

Um den neu angelegten Dienst sshtunnel zu aktivieren muss dieser noch aktiviert und gestartet werden.

sudo systemctl enable sshtunnel.service
sudo systemctl start sshtunnel.service
Kategorien
lighttpd Linux

STRATO Linux VServer mit Webserver im Rettungssystem

Ich kann den STRATO vServern in ein Rettungssystem starten, welches leider keinen Webserver enthält.
Das Rettungssystem ist Praktisch, da ich über dieses Alternative Betriebssystem an alle Daten die auf dem Server abgelegt sind gelangen kann, auch wenn mein selbst verwaltetes Betriessystem auf dem Server nicht mehr funktioniert. Die Besucher meiner Seite erfahren leider nicht das ich meinen Server grade warte.
Um den potentiellen besuchern meiner Seite jedoch zeigen zu können das meine Seite durchaus noch vorhanden, nur grade in einem Wartungsfenster ist, ist ein solcher sehr wünschenswert.

Der einfache versuch via „apt update && apt install lighttps“ führt jedoch leider zu ein paar nicht sehr aussagekräftigen Fehlermeldungen.

Es fehlen jedoch einfach nur ein paar Benutzer, genauer die Benutzer _apt, der Benutzer postfix und der Benutzer www-data.

adduser --quiet --gecos "" --no-create-home --disabled-password --disabled-login --ingroup nogroup --force-badname -uid 119 _apt
adduser --quiet --gecos "" --no-create-home --disabled-password --disabled-login --ingroup postfix -uid 111 postfix
adduser --quiet --gecos "" --no-create-home --disabled-password --disabled-login --ingroup www-data --uid 33 www-data

Im Anschluss kann der Webserver einfach installiert werden.:

apt update
apt -y install lighttpd php-cgi
lighttpd-enable-mod fastcgi

Im Anschluss bearbeite ich die Datei /etc/lighttpd/lighttpd.conf und füge am ende die folgenden 4 Zeilen an.:

url.rewrite = ( "" => "/maintenance.php" )
fastcgi.server = ( ".php" => ((
 "bin-path" => "/usr/bin/php-cgi",
 "socket" => "/tmp/php.sock"
)))

Die Raute # in der Zeile ‚#  „mod_rewrite“,‘ muss entfernt werden, so das die erste Zeile jedwede Anfragen an die Datei maintenance.php im Ordner /var/www/html/ umleiten kann.
Die verbleibenden drei Zeilen ermöglichen es dem Webserver PHP-Scripte auszuführen.

Die Datei /var/www/html/maintenance.php gibt in meinem Beispiel den HTTP StatusCode 503 (Vorübergehend nicht verfügbar; Server überlastet, ausgefallen oder in Wartung) und einen kurzen Wartungstext aus.:

<?php
if ( $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1' )
 { $p = 'HTTP/1.1'; }else{ $p = 'HTTP/1.0'; }
header( $p.' 503 Service Unavailable', true, 503 );
header( 'Retry-After: 3600' );
?><!doctype html>
<title>Site Maintenance</title>
<style>
  body { text-align: center; padding: 150px; }
  h1 { font-size: 50px; }
  body { font: 20px Helvetica, sans-serif; color: #333; }
  article { display: block; text-align: left; width: 650px; margin: 0 auto; }
  a { color: #dc8100; text-decoration: none; }
  a:hover { color: #333; text-decoration: none; }
</style>

<article>
    <h1>We&rsquo;ll be back soon!</h1>
    <div>
        <p>Sorry for the inconvenience but we&rsquo;re performing some maintenance at the moment.</p>
        <p>we&rsquo;ll be back online shortly!</p>
        <p>&mdash; The Team</p>
    </div>
</article>

Zu guter letzt muss der Webserver nur noch neu gestartet werden, und es wird die Wartungsseite angfezeigt.

service lighttpd restart
Kategorien
Linux

Hilfe, ich habe kein uuencode!!!

Ich wollte mir vor kurzem Schadcode zur Analyse von einem Computer ohne Netzwerk über die Serielle Console kopieren, musste jedoch leider feststellen das kein uuencode auf dem Server vorinstalliert war.

Nach einer kurzen suche suche bin ich auf xxd gestoßen, mit dem sich Binärdaten in hexadezimalcodes, und wieder zurück, umwandeln lässt.

Eine Datei „Datei“ kann mit dem folgenden Aufruf in Hex-Dump gewandelt werden.:

xxd -p Datei > Datei.txt

Ich schalte bei der Seriellen Console im anschluss das Logging ein, schreibe die Ausgaben also in eine Datei. und gebe mit „cat Datei.txt“ die Hex-Dump-Datei aus.

Nach dem die überzähligen Zeilen aus dem Mitschnitt entfernt wurden kann mit dem folgenden Befehl der Hex-Dump wieder in die Ursprungsdatei zurück umgewandelt werden.

xxd -p -r Datei.txt > Datei-eins

Die beiden Dateien „Datei-eins“ und die auf dem ursprünglichen Computer liegende Datei „Datei“ sind identisch. Der Dateiname und die Dateirechte werden bei dieser Methode jedoch im gegensatz zu uuencode nicht übernommen.

Bei einem Größenvergleich mit uuencode schneidet xxd erwartungsgemäß nicht besonders gut ab,

Test zum Speicherbedarf:

  • Anlegen einer binären Testdatei mit:
dd if=/dev/urandom of=bintest bs=1024 count=1024
  • Erzeugen der Testdateien für uuencode, xxd, base32 und base64:
uuencode bintest bintest > bintest-1.txt
xxd -p bintest > bintest-2.txt
base32 bintest > bintest-3.txt
base64 bintest > bintest-4.txt

Die Sicherung der Datei ist als Hex-Dump, xxd deutlich größer als mit uuencode oder base64, sogar noch größer als eine Umwandlung in ASCII via base32:

~$ ls -lhA bintest*
-rw-r----- 1 metzger users 1,0M Apr 25 19:19 bintest
-rw-r----- 1 metzger users 1,4M Apr 25 19:27 bintest-1.txt
-rw-r----- 1 metzger users 2,1M Apr 25 19:37 bintest-2.txt
-rw-r----- 1 metzger users 1,7M Apr 26 16:32 bintest-3.txt
-rw-r----- 1 metzger users 1,4M Apr 26 16:32 bintest-4.txt

 

Kategorien
Forensik Linux

Inotify: Dateien überwachen

Du kannst in Linux Systemen die Veränderungen an Dateien im Dateisystem mit inotify überwachen.

Um, sobald Dateien verändert wurden ein .tar.gz-Archiv zur Datensicherung zu erstellen oder die veränderte Datei auf einen anderen Server hochladen, oder auch an ein Filter / Beautifier zu übergeben oder auch einfach nur um auf meinem NAS eine LED anschalten ist inotify das Werkzeug auf das alle die es noch nicht kennen gewartet haben.

Ich bin schon vor einigen Jahren auf ein Problem gestoßen für das inotify die richtige Lösung gewesen wäre. Damals konnte ich nir nur eine Endlosschleife schreiben die immer wieder alle Dateien in meinen Verzeichnissen durchgegangen ist, keine schöne Lösung und endlose Festplattenzugriffe.
Diese Endlosschleife gefiel meinem damaligen Provider garnicht, da diese zu häufig auf die zu überwachenden Dateien Zugriff und die Festplatten am einschlafen hinderten und die Lebensdauer der Festplatten reduzierte.
Damals konnte ich die Schleife einfach mit einer längeren pause() zügeln, bin bald auf einen Cronjob gewechselt der noch seltener lief.

Auf meines eigenen NAS und meinen eigenen Servern bin ich jedoch nicht auf eine Schleife oder Cronjobs angewiesen! Mit einem Inotify Event kann ich die Änderungen direkt im Dateisystem abpassen und die gewünschte Anktion direkt nach der änderung starten.

apt install inotify-tools
Inotify-Events
KürzelFormat
ACCESSZugriff auf die Datei
ATTRIBMetadaten geändert
CLOSE_WRITEzum Schreiben geöffnete Datei geschlossen, sie muss nicht geändert worden sein
CLOSE_NOWRITEEine Datei wurde geschlossen nachdem sie schreibgeschützt geöffnet wurde
CREATENeue Datei angelegt
DELETEDatei gelöscht
DELETESELFÜberwachtes Verzeiuchnis gelöscht
MODIFYDatei modifiziert
MODIFYSELFÜberwachtes Verzeichnis modifiziert
MOVEDFROMDatei aus dem überwachten Verzeichnis verschoben
MOVEDTODatei in das überwachte Verzeichnis verschoben
OPENDatei geöffnet
inotifywait -mrq -e create --format %w%f /pfad/zum/verzeichnis/ | while read FILE
do
echo "neue Datei: $FILE"
done

Um zum Beispiel das WordPress Verzeichnises auf neue Dateien zu überwachen kann ich folgendes Snippet nutzen:

inotifywait -mrq -e create --format %w%f /home/customer/der_metzger/loteks_de/www/ | while read FILE;
 do
  echo "neue Datei: $FILE";
done

Dirch dieses Snippet werden alle im WordPressverzeichnis  neu erstellten Dateien ausgegeben.

In meinem Verzeichnis vor allem viele Dateien wp-content/temp-write-test-1492771373. (Die Zahl an ende ändert sich bei jedem Aufruf)
Jedoch werden auch alle Updates, Uploads, Plugin und Theme Installationen und auch all die neuen Dateien an die ich grade nicht denke.

Um herauszufinden welche Dateien „angefasst“ werden wird nur der Parameter „-e create“ auf „-e access“ geändert:

inotifywait -mrq -e access --format %w%f /pfad/zum/verzeichnis/ | while read FILE
do
echo "zugriff auf Datei: $FILE"
done

Inotify ist unter Linux ein sehr nützliches Werkzeug, auch für die Fehleranalyse. 😉

Kategorien
Linux security

Reverse SSH Tunnel

Seit der Deaktivierung extern erreichbarer IPv4 Adressen, von den Providers Dual-Stack Lite oder DS-Lite genannt, bei meinem und auch vielen anderen Internetzugängen lassen sich die heimischen Computer und Router nicht mehr ohne weiteres mittels OpenSSH erreichen.

Die Alternativen, wie Beispielsweise einen VPN Tunnel und die teilweise recht obskuren Shell sharing-Dienste (Nach aufruf einer URL habe zugriff auf die Shell als der Benutzer der die Shell freigegeben hat, ohne Passwort, ohne Key), überzeugen mich einfach nicht. Besonders zur Administration meines heimischen Servers und der NAS verlange ich einfach mehr vertraulichkeit von meiner Verbindung.

In diesem Blogbeitrag zeige ich Schritt für Schritt wie ein reverser, mit anderen Worten umgekehrter, SSH Tunnel errichtet werden kann.

Revers SSH-Tunnel? Das ist wenn Bob eine Verbindung zur Shell des Computers von Alice herstellen möchte, der Computer von Alice ist jedoch wegen einem NAT oder einer Firewall nicht erreichbar ist. Alice muss dann zuerst eine Verbindung zu Bobs Computer herstellen und in dieser die Verbindung zu ihrem eigene Computer mitbringen.

Für mein Beispiel nehmen wir an, das der Computer von Alice die IP-Adresse 10.0.0.2 und der Computer von Bob die IP-Adresse 192.168.0.2 hat, und zwar eine Verbindung von Alice zu Bob, jedoch umgekehrt keine Verbindung möglich ist.

1.) SSH Verbindung von Alice zu Bob herstellen. (Vom Zielcomputer zu dem Computer auf dem eine Verbindung auf die Shell eigentlich hergestellt werden soll)

ssh -R 49152:localhost:22 benutzer@192.168.0.2

Der Port 49152 den ich hier verwende ist ein beliebiger, auf Bobs Computer nicht verwedeter Port.

2.) Nun kann Bob eine SSH-Verbindung zum Computer von Alice über den jetzt aufgebauten SSH-Tunnel herstellen.

ssh localhost -p 49152

Wenn die von Alice hergestellte Verbindung zu Bob jedoch abbricht verliert auch Bob seine Verbindung zu Alice.
Bob sollte aus diesem Grund due Konfiguration seines SSH-Servers so anpassen, das die Verbindung nicht wegen eines Timeout getrennt wird.

Die Daten /etc/ssh/sshd_config kann zu diesem Zweck wie folgt angepasst werden.:
TCPKeepAlive no
ClientAliveInterval 30
ClientAliveCountMax 100

Kategorien
Linux security

Linux: sudo ohne Passwort

Auf dem eigenen Laptop, Raspberry Pi oder Computer ist es verlockend mittels sudo -s als root zu arbeiten um nicht bei jedem aufruf eines Befehls der erhöhte Rechte benötigt das eigene Passwort eingeben zu müssen. Aus diesem Grund zeige ich in dieser einfachen Anleitung aufzuzeigen wie diese Verlockung abzuschwächt werden kann in dem das Passwort nicht immer oder wenigstens nicht bei jedem aufruf eines Befehls eingegeben werden muss.

Die Einstellungen zum Befehl sudo werden in der Datei /etc/sudoers hinterlegt. In dieser Datei kann festgelegt werden welche Benutzer sudo nutzen können, ob bei jedem Aufruf das eigene Passwort eingegeben werden muss und wie in dem Fall verfahren werden soll wenn wenn ein Benutzer ohne das recht zur nutzung versucht erhöhte Rechte zu erlangen.

Die Syntax der Konfiguration der Benutzerrechte erfolgt nach dem folgenden Schema:

user_list host_list=effective_user_list tag_list command_list

Die einzelnen Tele dieser Konfigurationszeile haben die folgenden Bedeutungen:

user_list – Liste der Benutzer oder einen Benutzer-Alisa der bereits zuvor angelegt wurde
host_list – eine Liste der Hostcomputer oder eine Host-Alias auf dem ein Benutzer sudo ausführen kann
effective_user_list – list of users they must be running as or a run as alias.
tag_list – Liste von Eigenschaften wie beispielsweise NOPASSWD.
command_list – Liste von Befehlen die mit sudo ausgeführt werden dürfen

Um einem Benutzer, in meinem Beispiel kuehnel, die Ausführung aller Befehle via sudo ohne die Eingabe eines Passworts zu erlauben öffne ich die „sudoers“ Konfigurationsdatei.:

$ sudo vi /etc/sudoers

Und füge die folgende Zeile ein.:

kuehnel ALL=(ALL) NOPASSWD: ALL

Alternativ kann mit der folgenden Zeile einer Gruppe, in meinem Beispiel der Gruppe sudo, mit dem Prozentzeichen (%) der Zugriff auch ohne die eingabe des Passworts ermöglicht werden.

%sudo ALL=(ALL) NOPASSWD: ALL

Um meinem Benutzer kuehnel ausschließlich die Nutzung eines einzelnen Befehls zu ermöglichen kann die Zeile durch den entsprechenden Befehl ergänzt werden, wie im folgenden Beispiel mit dem Befehl kill.

kuehnel ALL=(ALL) NOPASSWD: /bin/kill

Die folgende Zeile ermöglicht allen Benutzern der Gruppe sys die nutzung des Befehls sudo zu der Ausführung der Befehle kill und rm ohne dafür das Passwort des Benutzers eingeben zu müssen.

%sys ALL=(ALL) NOPASSWD: /bin/kill, /bin/rm

Ich hoffe diese Beispiele reichen aus um eine Vorstellung von den Konfigurations-Optionen zu erhalten. Wenn Du Fragen zu einem Bestimmten Beispiel hast oder Fragen wie Du eine bestimmte Konfiguration erreichen kannst freue ich mich über Deinen Kommentar.

logfile

sudo gibt die Log-Informationen an syslog. Es kann nach wunsch aber auch ein eigenes Logfile schreiben.

Defaults        logfile="/var/log/sudo.log"

Die in der Logdatei gespeicherten Daten können den eigenen anforderungen angepasst werden, zum Beispiel so.:

Defaults        log_host, log_year, logfile="/var/log/sudo.log"

lecture

Hinweis bei der Nutzung von sudo anzeigen.

Es gibt 3 mögliche Konfigurationen:

always – bei jedem Aufruf dem Benutzer den Hinweisen zeigen
once – nur bei der ersten Nutzung den Hinweis anzeigen
never – dem Hinweis niemals anzeigen

Defaults        lecture="always"

Zusätzlich kann festgelegt werden in welcher Datei der Text für den Hinweis hinterlegt ist:

Defaults        lecture_file="/path/to/file"

timeout

Zeitspanne in Minuten nach der das Passwort erneut abgefragt werden soll.

Defaults        env_reset,timestamp_timeout=20
Kategorien
Forensik Linux

Server Benchmark Test from Loteks

Ab dem erleben dieser wird es interessant das Ergebnis eines Benchmarks zu haben um belastbare Zahlen zum vergleich zu haben.

Ein Benchmark? Es gibt für Linux unglaublich viele Benchmark Werkzeuge. Ich möchte kein Benchmark Werkzeugs. Ich möchte nichts großes und ich will nicht herausfinden welches Werkzeug den Parameter misst der mich interessiert.

Ich möchte ein einfachen kleinen Hack der Messen kann was mich interessiert!

Zu diesem Zweck dient dieser Artikel

Dieser Artikel ist ein wenig im Fluss und wird je nach vorliegenden Kommentaren angepasst.

Messen der CPU Geschwindigkeit: (Pi bis zur Stelle 5000 berechnen)

time echo "scale=5000; a(1)*4" | bc -l

Messen der Festplatten Schreibrate:

dd if=/dev/zero of=/test.file bs=1024 count=10240

Messen der Festplatten Leserate:

dd if=/test.file of=/dev/null

Messen der Netzwerkgeschwindigkeit:

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
./speedtest-cli

Für alle die Virtuelle Server gemietet haben:
Ja, es ist schade das euer VServer wirklich langsam ist. Lebt damit! Ihr teilt euch die CPU, Netzwerkverbindung und die Festplattenzugriffszeiten mit anderen. Seid sozial und übertreibt es nicht mit den Festplattenzugriffen, die anderen wollen auch mal. Lebt mit den 10MByte lese und Schreibrate!
Wenn es darauf ankommt nutzt doch bitte dedizierte Server!

Kategorien
Linux Postfix

Postfix, maximale größe der EMails festlegen

In Postfix kann die maximale Größe von zu verarbeitenden EMails übder die Konfigurationsvariable „message_size_limit“ festgelegt werden.

Postfix wird alle EMails ablehnen die größer als der festgelegte Wert von „message_size_limit“ ist. Der Vorgabewert von message_size_limit ist 10240000 (nahezu 10 Megabyte).

In der Postfix Konfigurationsdatei wird dieses Limit, zumindest unter debian nicht aufgeführt. Es kann direkt in der Datei /etc/postfix/main.cf, oder mit postconf hinzugefügt werden.

Die aktuelle Einstellung von Postfix kann mit dem folgenden Befehl angezeigt werden:

postconf message_size_limit

Mit der Eingabe von „postconf“, ohne zusätzliche Parameter, wird die gesammte Postfix konfiguration ausgegeben werden. Durch den Zusatz des „message_size_limit“ wird nur diese eine Option ausgegeben. Die ausgabe des obig angegebenen Befehl zeigt die folgende Zeile:

message_size_limit = 10240000

Um den zugewiesenen Wert zu Ändern kann mit der folgenden Eingabe ein abweichender Wert zugewiesen werden. Um herauszufinden kann mit dem folgenden Shellscript eine beliebige anzahl MB in Bytes, die Angabe in der Postconf erfolgt in Bytes, umgerechnet werden.

awk '{$1=$1*1024*1024;printf "%.0f\n",$1}'

Nach der Eingabe auf der Shell zum Beispiel 20 eingeben und Enter drücken, als Ausgabe erfolgt 20971520. (Das Script  im Anschluss mit Strg und C abbrechen) Diesen Wert weisen wir jetzt mit postconf dem message_size_limit zu:

postconf message_size_limit=20971520

Hiermit wird in die letzte Zeile der Datei /etc/postfix/main.cf die Zeichenfolge „message_size_limit=20971520“ angefügt und alle eventuell zuvor in der Dastei vorkommenden Zuweisungen „message_size_limit=“ entfernt.

Im Anschluss muss noch der Dienst Postfix die neue Konfiguration lesen. Dies erfolgt durch die eingabe von:

service postfix reload

Im Anschluss gilt die neue Option und entsprechend größere EMails können angenommen werden.

Kategorien
Forensik Linux security

Alle TCP/UDP Ports prüfen

Ich suchte im Netz eine Möglichkeit in einem Fremden Netzwerk die erlaubten offenen Ports zu entdecken, leider fand ich keine „out of the box“ Lösung im Internet und baute mir die hier dokumentierte Lösung.

Der Netzwerk Computer ist in der folgenden Konfiguration mit meinem Testserver verbunden.:
nmap-netzwerk für den Netzwerkscan
Auf der Laptop Seite hinterlege ich einen neuen SSH Private Key übertrage einen zugehörigen Public aus dem Server in die Datei ~/.ssh/authorized_keys:

ssh-keygen -b 4096
scp ~/.ssh/id_rsa.pub root@:
ssh root@
mkdir ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys

Auf der zu testenden Seite legte ich mir dieses kleine Shellscript ab, das nach und nach Netcat lokal auf verschiedene Ports lauschen lässt und im Anschluss versucht die Ports von der Serverseite aus zu erreichen.:

#!/bin/bash

COMPUTER="85.214.70.215"
ME=$(/usr/bin/curl http://shortip.de/txt) 1>/dev/null 2>/dev/null

for ((PORT=1; PORT< =65535; PORT++)) do /bin/nc -l $PORT 2>/dev/null &
 ssh root@$COMPUTER -t "/bin/netcat -vv -n -z -w 3 $ME $PORT"
done

Um Netcat an UDP-Ports senden, oder auf UDP Ports lauschen zu lassen kann die Option -u mit angegeben werden.

Diese Methode dauert selbstverständlich ewig und ist nur anwendbar wen wenige Ports zu durchsuchen sind und nicht wie im Beispielscript angegeben alle 65535.

Kategorien
Linux

script: Terminal Sessions aufnehmen

Um eine Terminal Session aufzuzeichnen kann das häufig vorinstallierte „typescript“ verwendet werden. Typescript nimmt alles auf das in einer Terminal Sitzung angezeigt wird. Die Befehle script & scriptreplay zeichnen eine Terminalsitzung auf, und spielen sie auch wieder ab.

Besonders zu empfehlen sind diese beiden Befehle zur Dokumentation oder um dritten eine Anleitung zukommen zu lassen.

Eine Aufnamesitzung kann durch eingabe des folgenden Komandos gestartet werden:

script -ttimefile recordfile

Es wird hierbei in zwei Dateien gesichert.

In die Datei recordfile werden alle Steuerzeichen geschrieben, in die Datei timefile wird ein Zeitindex für die Ausgaben gespeichert.

Nach dem Aufruf von script startet es im Hintergrund, ohne eine Ausgabe im Terminal zu verursachen. Alle folgenden Ausgaben werden aufgezeichnet.

Um die Aufname zu beenden und die Ausgabedateien fertigzustellen reicht ein Druck auf die Tasten [Strg] und D.

Um eine Aufnahme zu einem Späteren Zeitpunkt abzuspielen kann diese wiedergabe , wie im folgenden Beispiel, mit scriptreplay gestartet werden:

scriptreplay -ttimefile recordfile

Aufnahmen von Terminalsitzungen können auch mit fortgeschritteneren Werkzeugen wie ttyrecshelr oder timerec angesfertigt werden. Die Anwendung erfolgt ähnlich, jedoch benötigen diese Werkzeige keine Zeitdatei. Sie speichern die Ausgabe jedoch in einer Binärdatei und sind sehr selten bereits vorinstalliert.