Thursday, June 4, 2020

Tripwire-Cronjob deaktivieren

Mitunter installieren Debianpakete Cronjobs in /etc/cron.*, um wiederkehrende Aufgaben auszuführen. Damit solch ein Cronjob (Script) ausgeführt wird, muss das Executable-Bit gesetzt sein. Entfernt man dieses, wird der Cronjob nicht mehr ausgeführt.

Mit dpkg-statoverride(1) kann man sich über Eigentümerschaft und Modus von Dateien hinwegsetzen und damit das Executable-Bit eines Cronjob entfernen:

dpkg-statoverride --add root root 644 /etc/cron.daily/tripwire

Der Vorteil von dpkg-statoverride(1) ist, dass die Hinwegsetzungen auch Paket-Aktualisierungen und -Neuinstallationen überdauern. Was sonst, bei durch die Paketverwaltung verwalteten Dateien, nicht der Fall ist.

Mit dpkg-statoverride --remove <path/to/file> kann man auf diese Weise selbst gesetzte Eigentümerschaft und Modus wieder entfernen und dpkg-statoverride --list listet alle Hinwegsetzungen auf.

PS: Ich habe dies für /etc/cron.daily/tripwire getan, da ich zwar Tripwire installiert habe, damit aber nicht das lokale System überwachen will. Sondern Tripwire nur nutze, um lokal ein anderes entferntes System zu überwachen (diesen Server hier) und mich die lokalen Tripwire Reports stören. Wofür der Cronjob da ist.
Zur Überwachung des entfernten Systems kopiere ich mittels SSH und rsync die Dateien und lasse dann Tripwire drüber laufen, wie im Linux Security Cookbook von O’Reilly gezeigt. Was auch gleichzeitig noch ein Backup sein kann…
Alternativ könnte man wohl auch die lokale Tripwire Policy entsprechend erweitern. Aber das will ich nicht, da mein Workflow etwas anders ist.

Sunday, November 24, 2019

Was für ein Shebang (Für einen Cronjob)!?

Ich nutze folgenden Shebang in einigen Skripten, die ich als Cronjob starte:

#!/usr/bin/env -S chronic flock -n .lockfile.lock xvfb-run -a sh

Dieser Shebang verhindert doppelte Ausführung mittels Lockfile und erzeugt nur im Fehlerfall eine Ausgabe.

  • chronic: run program quietly unless it fails
  • flock: run program with a lock held
  • xvfb-run: run program in a virtual X server environment

Mit chronic(1) aus dem Paket moreutils, welches zusätzliche Unix-Hilfsprogramme bietet, wird das handeln des Quiet, Verbose- und Debug-Flags i.d.R. hinfällig. Denn es unterdrückt die Ausgabe und erzeugt nur im Fehlerfall die Ausgabe.

Das flock(1) richtet eine Sperrungen mittels Lockfile für das Skript ein und wartet solange, bis eine bereits laufende Instanz beendet ist. Mit dem Schalter -n beendet sich das Skript, wenn bereits eine Instanz läuft. Wird das Lockfile relativ angegeben, gilt es in der Crontab relativ zu HOME. Das flock(1) ist aus dem Paket util-linux, welches essential ist und hat das lckdo(1) aus moreutils abgelöst. In der Manpage zu lckdo(1) findet sich der Hinweis:

Now that util-linux contains a similar command named flock, lckdo is deprecated, and will be removed from some future version of moreutils.

PS: Vorher hatte ich hier lckdo(1) genutzt. Also vielen Dank an Flo, der in den Kommentaren darauf hinwies.

Das xvfb-run(1) braucht es natürlich nur, wenn X benötigt wird.

Um den Shebang zu umgehen, z.B. beim testen, kann das Skript auch explizit mit dem Interpreter gestartet werden:

sh path/to/script.sh

Das alles funkioniert z.B. auch für Perl-Skripte.

Friday, August 9, 2019

NAS mit Samba: Verzeichnis im Netzwerk freigeben

Ein Verzeichnis mit dem Windows AD und SMB/CIFS Dateiserver für UNIX über das Netzwerk freigeben und Benutzern sowie Gästen Lese- und Schreibzugriff gewähren.

Dieses Setup für ein NAS mit Samba erlaubt neben Benutzern, auch Gästen Lese- und Schreibzugriff. So kann jeder auf das Netzlaufwerk zugreifen! Durch das Stiky-Bit ist jedoch sichergestellt, das niemand die Dateien eines anderen löschen oder überschreiben kann.

Verzeichnis anlegen und Samba konfigurieren

Das Verzeichnis für das NAS legt man am besten unterhalb von /srv an. Dieses Verzeichnis enthält betriebsspezifische Daten, die vom System bereitgestellt werden und folgt dem FHS.

mkdir -p /srv/nas     # neues Verzeichnis erstellen
chmod a+rwXt /srv/nas # Dateirechte und StickyBit setzen

Im Verzeichnis /srv/nas können nun alle Benutzer unter ihrer UID Dateien erstellen, ändern und löschen. Die Dateien anderer Benutzer können nur geöffnet, nicht aber geändert oder gelöscht werden. Will man dies erlauben, muss man mit Benutzergruppen (GID) arbeiten.

Um das Verzeichnis freizugeben, muss die Konfiguration smb.conf(5) um folgende Sektion erweitert werden:

cat <<! >>/etc/samba/smb.conf
[NAS]
	comment=NAS
	path=/srv/nas
	public = yes
	writeable = yes
	guest ok = yes
	guest account = nobody
	create mask = 0665
	directory mask = 0775
!

Mit testparm(1) kann die Konfigurationsdatei auf Syntaktische Korrektheit überprüft werden.

testparm

Benutzern den Zugriff erlauben

Damit Benutzer unter ihrer ID Dateien im NAS und auch im Benutzerverzeichnis ablegen können, muss für jeden ein Passwort in der Benutzerdatenbank von Samba einrichten sein. Ohne Passwort können Benutzer weder lesend noch schreibend auf ihr Benutzerverzeichnis zugreifen. Linux und Samba verwenden unterschiedliche Passwörter.

Zum Erstellen des Passworts in der Samba-Benutzerdatenbank smbpasswd(5) kann entweder pdbedit(8) oder smbpasswd(8) verwendet werden.

Hinweis: Will man $HOME nicht freigeben, empfiehlt es sich die Sektion [homes] in der smb.conf(5) auszukommentieren.

Passwort anlegen

Das Passwort für einen Benutzer wird mit smbpasswd -a <username> angelegt.

Wird smbpasswd(8) ohne Parameter aufgerufen, kann das Passwort des aktuellen Benutzers geändert werden.

Das anlegen des Passwords kann für neue Benutzerkonten auch während der Einrichtung passieren. Dazu legt man die Datei /usr/local/sbin/adduser.local an. Wenn die Datei existiert, wird sie nach der Einrichtung des Benutzerkontos ausgeführt, um lokale Einstellungen vorzunehmen.

cat <<! >/usr/local/sbin/adduser.local
#!/bin/sh
# An adduser.local werden die folgenden Argumente übergeben:
# Benutzername, UID, GID und Home-Verzeichnis.

user="$1"
uid="$2"
gid="$3"
home="$4"

smbpasswd -a "$user" # add new users to the local smbpasswd(5) file

# Make sure that the script will "exit 0"
exit 0
!
chmod -x /usr/local/sbin/adduser.local

Passwort entfernen

Um ein Benutzerkonto beim entfernen auch aus der Samba-Benutzerdatenbank auszutragen, kann die /usr/local/sbin/deluser.local analog zu adduser.local angelegt werden.

cat <<! >/usr/local/sbin/deluser.local 
#!/bin/sh
# An deluser.local werden die folgenden Argumente übergeben:
# Benutzername, UID, GID und Home-Verzeichnis.

user="$1"
uid="$2"
gid="$3"
home="$4"

smbpasswd -x "$user" # delete user from the local smbpasswd(5) file

# Make sure that the script will "exit 0"
exit 0
!
chmod -x /usr/local/sbin/deluser.local

Zur Verwaltung der Samba-Benutzerdatenbank bietet sich pdbedit(8) an. Damit kann u.a. abgefragt werden, für welche Benutzer in der Samba-Benutzerdatenbank ein Passwort vergeben wurde.

pdbedit -L

Netzlaufwerke einbinden

Unter Linux (GNOME), Microsoft Windows usw. sollte das NAS als Netzwerkfreigabe gefunden werden.

Für einen Datentransfer über Samba, wird eine Pfadangabe bzw. URI der folgenden Form benutzt:

smb://{hostname|ip}/NAS

Mailingliste abonnieren

Um Ankündigungen, wie z.B. Benachrichtigungen über neue Versionen und Bugs zu erfahren, sollte man zusätzlich die Samba Mailingliste abonnieren. Die Adresse ist unter https://lists.samba.org zu finden und es sollte mindestens samba-announce abonniert werden.

NAS mit SFTP

Ist SSH bzw. das Paket openssh-sftp-server installiert, kann auch via SSH auf das Benutzerverzeichnis zugegriffen werden. Und viele Dateimanager unterstützen das SSH-Protokoll SFTP.

Für einen Datentransfer über SSH an einem entfernten Rechner, benutzt man eine URI der Form:

sftp://[username@]{hostname|IP}[:port]/path/to/share

Alternativ können statt des Authority-Teil, auch die Aliasnamen aus ssh_config(5) verwendet werden.

Tuesday, March 26, 2019

Webentwicklung/Webdesign: .htaccess Weiterleitung

Alle Seiten nach example.net weiterleiten:

<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteRule ^.*$ http://example.net/%{REQUEST_URI} [R=301,L]
</ifmodule>

Alle Seiten nach HTTPS umleiten:

# Redirect all requests to HTTPS
<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

Eigene Fehlerseite 404 Dokument not Found:

ErrorDocument 404 http://www.onlinewahn.de/ende.htm

Alternativ können auch alle Seiten nach /index.html umgeleitet werden.

Als Nachtrag wurde in den Kommentaren noch auf den Text When not to use mod_rewrite hingewiesen. Danke!

Sunday, November 4, 2018

LibreOffice: Inhalts- und Stichwortverzeichnis automatisch aktualisieren

Die Verzeichnisse wie Inhalts- oder Stichwortverzeichnis in einem LibreOffice Writer Dokument, können beim Speichern oder Exportieren automatisch aktualisiert werden. Dazu verknüpft man folgendes Makro an die Ereignisse Dokument speichern und Dokumentkopie speichern oder exportieren.

Den Dialog dazu findet man unter Extras/Makros/Bearbeiten und für das Zuweisen unter Extras/Makros/Verwalten/LibreOffice Basic/Zuweisen.

loMakroDocumentIndexesUpdate1.png

loMakroDocumentIndexesUpdate2.png

Das Makro

REM  *****  BASIC  *****

Sub Main

End Sub	

REM Verzeichnisse aktualisieren
REM Siehe auch: https://www.oooforum.de/viewtopic.php?f=18&t=70890
REM             https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=2557
Sub DocumentUpdateIndexes
	On Error Goto ErrorHandler ' Enables error handling

	oIndexes = ThisComponent.getDocumentIndexes()
	for i = 0 to oIndexes.getCount () - 1
		oIndexes (i).update
	next

	' Label
	ErrorHandler:
End Sub

Sub DokumentSpeichern
	DocumentUpdateIndexes
End Sub

Sub DokumentkopieSpeichernOderExportieren
	DocumentUpdateIndexes
End Sub