staging.inyokaproject.org

Ordner von Samba automatisch anlegen lassen funktioniert nicht mehr

Status: Gelöst | Ubuntu-Version: Server 20.04 (Focal Fossa)
Antworten |

dippes

Anmeldungsdatum:
31. Dezember 2009

Beiträge: 553

Hallo

Habe in einer Freigabe in der smb.conf folgende Zeile mit drin.

1
root preexec = mkdir -p /mnt/media1/shared_folder.

Dies sollte Samba veranlassen den Ordner "shared_folder" anzulegen. Leider funktioniert das nicht mehr bei mir.

Ist dieser Befehl noch gültig?

Newubunti

Anmeldungsdatum:
16. Februar 2008

Beiträge: 5149

Hallo,

die Option root preexec gibt es in der smb.conf nach wie vor. Mit deren praktischer Anwendung habe ich aber keinerlei Erfahrung. Eventuell würde ich es mal mit absoluter Pfad-Angabe probieren, also:

root preexec = /usr/bin/mkdir -p /mnt/media1/shared_folder

In der Pfadangabe zur Freigabe sind keine Leerzeichen nehme ich mal an?

Ansonsten würde ich - vorübergehend - zum Überprüfen der Ausführung mit einem Skript arbeiten, dass dann etwas nach z.B. /tmp schreibt.

LG, Newubunti

dippes

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2009

Beiträge: 553

Funktioniert auch nicht mit der Pfadangabe.

Habe ein skript geschrieben welches einen Ordner namens "shared_folder" anlegt.Manuell ausgefüht funktioniert es.Aber leider nicht mit dem Samba Befehl.

root preexec = /usr/local/bin/./shared_folder.sh %u

Kann es sein das es ein Sambaproblem ist? Weil mit Libreelec funktioniert das anlegen von Ordnern mit Samba.

Newubunti

Anmeldungsdatum:
16. Februar 2008

Beiträge: 5149

Hallo,

hast Du bei Deinem Skript auch stderr in eine Log-Datei umgeleitet? Weil das war eigentlich der Hauptgedanke für die Verwendung eines Skriptes, dass Du eine Fehlermeldung für die Ausführung des mkdir-Befehls erhältst.

Also so etwas wie:

#!/bin/bash

BENUTZER=$1

echo "root-preexec-test mittels $BENUTZER." > /tmp/root_preexec.txt 2>&1

mkdir -p /tmp/shared_folder/$BENUTZER >> /tmp/root_preexec.txt 2>&1

exit 0

Das Skript kannst Du dann Schritt für Schritt immer näher an den tatsächlichen Anwendungsfall heran anpassen.

Außerdem müsste die preexec-Zeile für ein Skritp /usr/local/bin/shared_folder.sh AFAIK so aussehen:

root preexec = /usr/local/bin/shared_folder.sh %U

Falls die Zeile root preexec in Deiner smb.conf unter [homes] stehen sollte, dann beachte den folgenden Thread: https://groups.google.com/g/linux.samba/c/GM_dILqiCk0 🇬🇧

LG, Newubunti

dippes

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2009

Beiträge: 553

Funktioniert leider auch nicht. Manuell funktioniert das skript.

#!/bin/bash

BENUTZER=$1

echo "root-preexec sharedfolder angelegt $BENUTZER." > /tmp/root_preexec.txt 2>&1

mkdir -p /mnt/media1/shared_folder/$BENUTZER >> /tmp/root_preexec.txt 2>&1

exit 0
> [shared_folder]
> path = /mnt/media1/shared_folder
> root preexec = /usr/local/bin/shared_folder.sh %u
> comment = virtualbox shared_folder
> available = yes
> browseable = yes
> writable = yes
> guest ok = yes

Kann das jemand mal ausprobieren? Vielleicht hat mein Samba ein Bug?

Newubunti

Anmeldungsdatum:
16. Februar 2008

Beiträge: 5149

dippes schrieb:

Funktioniert leider auch nicht.

Was heißt denn "funktioniert nicht" genau? Was steht in der /tmp/root_preexec.txt?

LG, Newubunti

dippes

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2009

Beiträge: 553

Habe es mit Jammyjellyfish in einer VM ausprobiert.Funktioniert auch nicht.

Liegt wohl tatsächlich an Samba.

Was heißt denn "funktioniert nicht" genau? Was steht in der /tmp/root_preexec.txt?

Wird leider nicht angelegt.

dippes

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2009

Beiträge: 553

Habe in Libreelec diese Zeile in die samba.conf hinzugefügt. Ordner wird angelegt.Aber auf meinem Server 20.04 funktioniert das nicht.Hat jemand noch eine Idee?

root preexec = /bin/bash -c "mkdir -p /neuer/ordner"

dippes

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2009

Beiträge: 553

Es funktioniert bzw es hat die ganze Zeit funktioniert.Preexet wird erst ausgeführt wenn auf die Freigabe zugegriffen wird. Das hatte ich nicht gewusst.Ich war der Meinung bei Serverstart.

Newubunti

Anmeldungsdatum:
16. Februar 2008

Beiträge: 5149

Danke, für die Rückmeldung!

Nachdem Du in Deinem ersten Post geschrieben hattest, dass das bei Dir nicht mehr funktioniert, war ich jetzt nicht davon ausgegangen, dass Dir die grundsätzliche Arbeitsweise des Kommandos nicht bekannt ist. Das ist nicht als Vorwurf gemeint!

Ich habe das heute übrigens mal unter Jammy nachstellen können. Mir ist dabei aufgefallen, dass sich das ganze irgendwie nicht ganz schlüssig verhält:

In der man smb.conf ist das folgende Beispiel für preexec aufgeführt:

preexec = echo \"%u connected to %S from %m (%I)\" >> /tmp/log

Das wir so bei mir unter Jammy nicht aufgeführt. Probiert habe ich es wie folgt:

root preexec = echo \"%u connected to %S from %m (%I)\" >> /tmp/log

,

root preexec = echo %u connected to %S from %m (%I) >> /tmp/log

,

root preexec = /usr/bin/echo \"%u connected to %S from %m (%I)\" >> /tmp/log

und

root preexec = /usr/bin/echo %u connected to %S from %m (%I) >> /tmp/log

Hat alles nicht funktioniert - also es wurde jeweils nicht die Datei /tmp/log angelegt.

Auch ein noch simpleres

root preexec = /usr/bin/echo Test >> /tmp/log

,

root preexec = /usr/bin/echo "Test" >> /tmp/log

oder

root preexec = /usr/bin/echo \"Test\" >> /tmp/log

hat alles nicht die /tmp/log erstellt.

Funktioniert hat dagegen nur:

root preexec = /bin/bash -c "echo \"%u connected to %S from %m (%I)\" >> /tmp/log"

Der von Dir verwendete Befehl funktioniert dagegen einfach auch so:

root preexec = mkdir -p /mnt/media1/shared_folder

Da ich kein absoluter bash-Experte bin, mag das ja auch an irgend einer Quoting-Geschichte liegen. Ich finde das Verhalten ist aber jedenfalls nicht gerade schlüssig und damit eventuell eine Stolperfalle.

LG, Newubunti

Antworten |