Du bist nicht angemeldet.

#1 28.01.2021 20:27:44

mabox
Mitglied

Rechteproblem mit Apache und WebDAV

Hallo Zusammen,
ich brauche für eine bestimmte APP auf dem Smartphone für einen Dateizugriff eine WebDAV Verbindung auf meinen archlinux Rechner.
Dafür habe ich WebDAV eingerichtet wie hier beschreiben.

Das hat erst mal wunderbar geklappt soweit, nur jetzt hab ich folgendes Problem:

Ich greife auf die besagte Datei entweder vom Rechner aus oder vom Smartphone aus zu.
Die Rechte/Besitz der Datei bzw. des ganzen "dav" Ordners sind wie in dem Wikibeitrag beschrieben auf http:http gesetzt.
Meinen Benutzer und einen weiteren Benutzer habe ich zu der Gruppe "http" hinzugefügt und der Gruppe das Schreibrecht auf die Datei bzw. auch den gesamten Ordner gegeben.

-rw-rw-r-- 1 http:http 81573 28. Jan 18:22 datei

Wenn ich nun von meinem Rechner aus mit der Datei arbeite, passt alles wunderbar. Dort greife ich allerdings nicht über den Apache zu sondern direkt über das Ordnerverzeichnis.

Es passiert nun aber folgendes das wenn ich über die APP zugreife und speichere die Berechtigung danach wieder so aussehen:

-rw-r--r-- 1 http:http 81573 28. Jan 18:22 datei

Somit kann ich vom Rechner aus erstmal nicht mehr schreibend darauf zugreifen.......

Ich denke es muss daher irgendwas in der apache Konfiguration geändert werden damit ich die von mir benötigten Berechtigung setzten kann bzw. das diese bleiben......
An der APP kann es meiner Meinung ja glaub nicht liegen das die da etwas ändert.

Die http.conf sieht gemäß dem Wikiartikel aktuell so aus:

 
<Directory "/home/httpd/html/dav">
  DAV On
  AllowOverride None
  Options Indexes FollowSymLinks
  AuthType Basic
  AuthName "WebDAV"
  AuthUserFile /etc/httpd/conf/passwd
  Require user foo
</Directory>

Viel mehr wird im Apache ja ansonsten nicht konfiguriert was in Richtung dem Verzeichnis geht.
Ich hoffe es kann mir jemand helfen bei dem Thema. Ich habe nichts dazu gefunden aber ich suche vermutlich auch falsch danach.

Viele Grüße
mabox

Offline

#2 29.01.2021 21:00:00

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Ich denke, dass die Umask des Apache Prozesses dafür verantwortlich ist. Ich bin über diesen Beitrag im "Ask Ubuntu" darauf gestossen: Change WebDav permissions for creating files and folders

Üblicherweise wird von Programmen beim Erstellen von Files der File Mode beim Open auf 666 (= rw-rw-rw) gesetzt. Die Umask wird darauf angewendet. d.h. die in der Umask gesetzten Bits werde gelöscht. Standard Umask ist 022, d.h. die "w" Bits für Group und Other werden gelöscht. Aus 666 wird so 644.

Setze doch mal die Umask für den Apache Prozess wie im Beitrag angegeben.

Gruss
Peter

Offline

#3 29.01.2021 22:49:25

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Hi Peter,
vielen Dank für den Hinweis. Ich habe mir das angeschaut aber bei dem archlinux apache, der dort "http" heißt, gibt es die envvars Datei nicht und auch das erstellen wie dort beschrieben hat jetzt erstmal nicht funktioniert.....
Ich suche mal weiter jetzt nach umask und apache als Suchbegriffe...

EDIT: Schade, ich finde nirgendwo was zum apache unter archlinux..... Vielleicht versuche es mal auf archlinux.org (Forum).

Beitrag geändert von mabox (01.02.2021 18:31:31)

Offline

#4 01.02.2021 21:33:41

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Hallo mabox
Ich habe mal ein bisschen geforscht (weils mich auch wunder nimmt). Unter Archlinux installiert Apache HTTP ein envvars genanntes Shell Script im Verzeichnis /usr/bin. Darin sollte die Zeile umask 002 das gewünschte ereichen, wenn das Script denn auch beim Start des HTTPD ausgeführt wird. Unter Archlinux wird der HTTPD als Service installert und auch mit systemctl gestartet. Ich kenne Apache aus anderen Umgebungen, wo er mit dem eigenen Utility apachectl gestartet und gestoppt wird.

Ich habe nun festgestellt, dass das envvars Script beim Starten mittels apachectl aufgerufen wird, nicht aber beim Starten via systemctl.

Leider habe ich Apache HTTP WebDAV noch nicht zum Laufen gekriegt; kann also selber noch nicht testen.
Vieleicht kannst Du ja mal probieren, das /usr/bin/envvars Script mit dem umask Befehl zu ergänzen, den Server dann mit apachectl start zu starten und dann sehen, ob es jetzt klappt.

Ich habe bis jetzt leider noch nirgends eine Beschreibung für das /usr/bin/envvars File gefunden.

Gruss
Peter

Offline

#5 01.02.2021 23:01:36

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Hallo Peter,
MEGA, das klappt. Wie Du gesagt hast aber nur wenn ich mit apachectl starte.
Wenn ich über die APP speichere bleiben nun die Rechte, außer das der Owner wechselt in http:http.
Da meine User in der http Gruppe drin sind ist das erst mal nicht schlimm.
Wenn ich dann direkt vom PC aus auf der Datei arbeite gehört die Datei wieder meinem User und meiner Gruppe
Das wäre ja dann erst mal gut so.

Wie bekomme ich es den hin das nach einem Reboot meines Rechners das Ganze wieder startet über apachectl? Aktuell startet der Apache ja über systemctl nach dem Boot.
Am saubersten wäre es glaub wenn wir irgendwie das envvars Script von systemctl aufrufen lassen könnten oder?

Offline

#6 02.02.2021 01:35:12

eeLooDe8
Gast

Re: Rechteproblem mit Apache und WebDAV

mabox schrieb:

Wie bekomme ich es den hin das nach einem Reboot meines Rechners das Ganze wieder startet über apachectl? Aktuell startet der Apache ja über systemctl nach dem Boot.
Am saubersten wäre es glaub wenn wir irgendwie das envvars Script von systemctl aufrufen lassen könnten oder?

Die unit führt fallweise die Befehle

ExecStart=/usr/bin/httpd -k start -DFOREGROUND
ExecStop=/usr/bin/httpd -k graceful-stop
ExecReload=/usr/bin/httpd -k graceful

aus. Du kannst mit

systemctl edit httpd.service

ein dropfile anlegen und statt dessen apachectl mit den entsprechenden Kommandos für den Start, Stop und Restart eintragen. Das übersteuert dann die Systemvorgaben.

#7 02.02.2021 14:38:27

eeLooDe8
Gast

Re: Rechteproblem mit Apache und WebDAV

Es geht noch einfacher, systemd unterstützt nämlich auch direkt das Setzen von Umgebungsvariablen => https://man.archlinux.org/man/systemd.service.5
Demnach müsst man das Drop-In-File nur um

[Service] 
Environment="umask=002"

erweitern und könnte damit auch den Aufruf von apachectl umgehen.
Das halte ich für sinnvoller als Änderungen an /usr/bin/envvars, die wahrscheinlich beim nächsten Paketupdate wieder verloren gehen, weil Konfigurationsänderungen an anderer Stelle als /usr vorgenommen werden müssen.

#8 02.02.2021 15:22:06

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

eeLooDe8 schrieb:

Es geht noch einfacher, systemd unterstützt nämlich auch direkt das Setzen von Umgebungsvariablen => https://man.archlinux.org/man/systemd.service.5
Demnach müsst man das Drop-In-File nur um

[Service] 
Environment="umask=002"

Die umask ist keine Umgebungsvariable, sondern ein prozessbezogener Wert, der mittels umask() System Call, bzw. dem umask Shell Utility gestzt wird.

eeLooDe8 schrieb:

Die unit führt fallweise die Befehle

ExecStart=/usr/bin/httpd -k start -DFOREGROUND
ExecStop=/usr/bin/httpd -k graceful-stop
ExecReload=/usr/bin/httpd -k graceful

aus. Du kannst mit

systemctl edit httpd.service

ein dropfile anlegen und statt dessen apachectl mit den entsprechenden Kommandos für den Start, Stop und Restart eintragen. Das übersteuert dann die Systemvorgaben.

Diese  Vorschlag wollte ich auch schon machen, bin dann aber stuztig geworden, da im httpd.service Type=simple steht. In diesem Fall darf der Prozess nicht fork()en, steht in der Beschreibung von systemd. Wenn nun statt direkt httpd aufzurufen, das apachectl Shell Script aufgerufen wird und daraus dann httpd gestartet wird, dann ist der httpd Prozess nicht mehr der vom systemd gestartete. Ich frage mich, ob dann der Type=simple noch korrekt ist? Wollte mich eingentliich erst zu Wort melden, wenn ich diesbezüglich schlauer bin.

Gruss
Peter

Offline

#9 02.02.2021 15:34:16

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Halte ich auch für sinnvoll wenn das dann die nächsten Updates übersteht :-)
Hab auch schon überlegt das doch eigentlich irgendeinen Weg geben müsste wie man das in die apache conf reinbekommt aber bin noch nicht fündig geworden.
Das mit dem Dropfile ist auf jedenfall aber auch sehr gut. Das würde ich dann jetzt testen.
Im Moment scheitere ich dabei noch.

Mir ist noch nicht klar ob ich in dem Dropfile dann die kompletten Zeilen des Original aufnehmen und dann meine Änderung machen oder ob es reicht nur die eine Zeile die die "überschrieben" werden soll aufzunehmen.
Ich denke mal nur die entsprechende Zeilen. Als ich jetzt aber nur den "Start" aufgenommen hatte bekam ich folgenden Fehler im Status:

 
httpd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.

Passt also zu den Infos von phunsoft das dass dann nicht mehr "simple" sein kann.
Leider hat das mit dem umask im Unit File jetzt auch nicht geklappt. Die Berechtigung wird wieder geändert nachdem ich umask in das Unit File wie beschrieben übernommen hatte und über systemctl gestartet hatte.
Passt also auch zu der Info von phunsoft.

Beitrag geändert von mabox (02.02.2021 15:47:04)

Offline

#10 02.02.2021 15:47:43

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Ich habe inzwischen mit

systemctl edit --full httpd.service

eine Kopie des Service Scripts im /etc... erstellt und dort statt usr/bin/httpd das Script /usr/bin/apachectl eingetragen. Funktioniert leider (noch) nicht. Das Starten des httpd geht, aber nach den Stop zeigt

systemctl status httpd

Fehler an. Habe bisher mit Type=simple und Type=exec versucht. Ich bin da noch zu wenig sattelfest mit dem systemd und dem Verhalten vom httpd. Melde mich wieder, wenn ich was funktionierendes habe.

Offline

#11 02.02.2021 15:50:07

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Super, vielen Dank phunsoft, ich in bin gespannt und probiere auch weiter :-)

Offline

#12 02.02.2021 15:53:12

eeLooDe8
Gast

Re: Rechteproblem mit Apache und WebDAV

phunsoft schrieb:

Die umask ist keine Umgebungsvariable, sondern ein prozessbezogener Wert, der mittels umask() System Call, bzw. dem umask Shell Utility gestzt wird.

Ach so... ich dachte, es sei eine Umgebungsvariable, weil hier von envvars die Rede war, in dem eigentlich nur Umgebungsvariablen gesetzt werden.
Möglich wäre dann auch ein Drop-In mit dem Inhalt

[Service]
UMask=002

Ob die Erweiterung ankommt und funktioniert, konnte ich allerdings nicht testet, der Service startet aber

#13 02.02.2021 15:59:50

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

eeLooDe8 schrieb:

Ob die Erweiterung ankommt und funktioniert, konnte ich allerdings nicht testet, der Service startet aber

Liste Dir mal die Prozess-Ids der httpd Prozesse an und dann

cat /proc/"pid"/status | less

Wobei Du eine der Prozess-Ids statt dem "pid" einsetzt. Weit oben in der Liste wird die umask ausgewiesen.

Offline

#14 02.02.2021 16:00:58

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

eeLooDe8 schrieb:

Möglich wäre dann auch ein Drop-In mit dem Inhalt

[Service]
UMask=002

Ob die Erweiterung ankommt und funktioniert, konnte ich allerdings nicht testet, der Service startet aber

Das hab ich vorhin getestet, hatte aber nichts gebracht. Service ist bei mir auch gestartet.

Offline

#15 02.02.2021 16:08:40

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

eeLooDe8 schrieb:

Ach so... ich dachte, es sei eine Umgebungsvariable, weil hier von envvars die Rede war, in dem eigentlich nur Umgebungsvariablen gesetzt werden.

Ja, der Name leitet irre, aber ein Blick in das apachectl Script zeigt, dass das File /usr/bin/envvars "sourced" wird, d.h. als Shell Script im laufenden Shell Prozess (=apachectl) eingebunden wird. Somit können nicht nur Umgebungsvariablen dort gesetzt, sondern alle (sinnvollen) Shell Befehle ausgeführt werden.

Ein grosser Schwachpunkt der apachectl ist, dass nur das zur Installation gehördende File /usr/bin/envvars gesucht und ausgeführt wird. Das File wird bei einem Update vom Apache wohl neu gespeichert und eigene Modifikationen gehen verloren. Schade. Es wäre schön, wenn ein File im /etc vorgeschalten worden wäre, wie sonst so üblich.

Beitrag geändert von phunsoft (02.02.2021 16:50:53)

Offline

#16 02.02.2021 17:57:54

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Ich meine, eine funktionierende Konfiguration gefunden zu haben. Mittels

systemctl edit --full httpd.service

habe ich eine volle Kopie -- nicht ein Dropin -- des Service Files erstellt und darin folgendes angepasst:

  1. Type=simple in Type=forking geändert.

  2. An allen drei Stellen /usr/bin/httpd durch /usr/bin/apachectl ersetzt.

  3. In der Zeile ExecStart den Parameter -DFOREGROUND entfernt.

Der Ausschnitt sieht als folgendermassen aus:

[Service]
Type=forking
ExecStart=/usr/bin/apachectl start
ExecStop=/usr/bin/apachectl graceful-stop
ExecReload=/usr/bin/apachectl graceful

Der Parameter -DFOREGROUND sagt dem httpd, beim Startup keinen fork() zu machen, wie das Daemon Prozesse normalerweise tun. Im Standard httpd.service sagt Type=simple, dass der gestartete Prozess eben genau dies nicht tut, also der vom systemd gestartete Prozess am Laufen bleibt. Pass soweit.

Mit dem Start Skript apachectl will man dieses Verhalten nicht, denn sonst bleibt das Skript "hängen", bis der httpd Prozess endet. Also ohne -DFOREGROUND. So gestartet macht der httpd gleich zu Beginn einen fork(), der Parent Prozess endet und gibt die Kontrolle zurück an den apachectl, der seinerseits endet. Der Child vom initialen httpd bleibt dann als Hauptprozess am Laufen.

Mit dieser Einstellung funktioniert ein Starten und Stoppen vom httpd über systemctl soweit ohne Probleme. Allerdings habe das nur in meiner Testumgebung gemacht und da benutze ich den httpd nicht wirklich.

Bleibt also noch

umask 002

im File /usr/bin/envvars einzutragen und sich irgendwo eine Notiz zu machen, letzteres nach Updates jeweils zu überprüfen :-)

Gruss
Peter

Offline

#17 02.02.2021 18:16:47

eeLooDe8
Gast

Re: Rechteproblem mit Apache und WebDAV

phunsoft schrieb:

Liste Dir mal die Prozess-Ids der httpd Prozesse an und dann

cat /proc/"pid"/status | less

Wobei Du eine der Prozess-Ids statt dem "pid" einsetzt. Weit oben in der Liste wird die umask ausgewiesen.

Bei mir kommt die Änderung an:

# /etc/systemd/system/httpd.service.d/override.conf
[Service]
UMask=0002

Dann nach Neustart des Services

systemctl status httpd.service 
● httpd.service - Apache Web Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
    Drop-In: /etc/systemd/system/httpd.service.d
             └─override.conf
     Active: active (running) since Tue 2021-02-02 16:59:30 CET; 11s ago
   Main PID: 2931 (httpd)
      Tasks: 82 (limit: 1152)
     Memory: 6.0M
     CGroup: /system.slice/httpd.service
             ├─2931 /usr/bin/httpd -k start -DFOREGROUND
             ├─2932 /usr/bin/httpd -k start -DFOREGROUND
             ├─2933 /usr/bin/httpd -k start -DFOREGROUND
             └─2934 /usr/bin/httpd -k start -DFOREGROUND

und anschliessender Ausgabe der umask:

cat /proc/2931/status|grep Um
Umask:  0002

Ohne die Änderung wurde 022 ausgegeben, also funktioniert es prinzipiell. Warum es bei "mabox" nicht so ist, weiß ich nicht. Eventuell soll er auch mal die Prüfung so wie von dir beschrieben vornehmen um zunächst Klarheit zu bekommen, dass die Änderung wirklich ankommt.

Mittels

systemctl edit --full httpd.service

habe ich eine volle Kopie -- nicht ein Dropin -- des Service Files erstellt

Ich würde dem override immer den Vorzug geben, weil dann nur dir wirklich relevanten Teile der Unit geändert werden. Wenn sich nämlich etwas entscheidendes (zB Abhängigkeiten) an den Original-units ändert, bekommst du das nie mit, weil die unit komplett und dauerhaft überschrieben würde.

Der override nur mit "UMask=002" scheint ja zu funktionieren. Damit hätte man dann auch nicht mehr das Problem, Änderungen an envvars verfolgen zu müssen

#18 02.02.2021 18:50:56

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

eeLooDe8 schrieb:

Bei mir kommt die Änderung an:

# /etc/systemd/system/httpd.service.d/override.conf
[Service]
UMask=0002

Ja, so funktioniert das bei mir auch. Du hattest beim ersten Mal folgendes geschrieben:

eeLooDe8 schrieb:

Es geht noch einfacher, systemd unterstützt nämlich auch direkt das Setzen von Umgebungsvariablen => https://man.archlinux.org/man/systemd.service.5
Demnach müsst man das Drop-In-File nur um

[Service] 
Environment="umask=002"

Das Environment= hat tatsächlich die Environment-Variable umask mit dem Wert 002 erstellt, was aber für die umask wirkunslos ist.

Danke und Gruss
Peter

Offline

#19 02.02.2021 19:20:59

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Hallo Ihr Zwei,
also beide Varianten funktionieren bei mir auch, top!!!
Bei meinem ersten Test mit der umask im Unit File direkt hatte ich die Großschreibung nicht beachtet und "umask" geschrieben..... Das hat dann nicht gezogen.
Habe das jetzt nochmal alles durchgespielt und auch den PID dann überprüft ob es ankam.

Na dann hätten wir es ja eigentlich hätte ich gesagt oder? Im Prinzip jetzt halt über das systemd override.
Ich finde es dennoch komisch das es wohl nichts, zumindest einfaches, gibt das man z.B. direkt in der apache conf Datei eintragen um diese Berechtigung zu setzen.
Vielen Dank Euch für die Hilfe!!!

Offline

#20 03.02.2021 12:01:17

drcux
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Ist es nicht besser, umask nur auf das Verzeichnis zu setzten, wo du es wirklich brauchst anstatt mit der Holzhammermethode Apache komplett umzustellen?

# mkdir testdir
# getfacl testdir/

user::rwx
group::r-x
other::r-x

# touch testdir/test1.txt
# ls -alh testdir/

-rw-r--r--  1 root root    0  3. Feb 10:53 test1.txt

# setfacl --default --modify group::rwx testdir/
# touch testdir/test2.txt

# ls -alh testdir/

-rw-r--r--   1 root root    0  3. Feb 10:53 test1.txt
-rw-rw-r--   1 root root    0  3. Feb 10:54 test2.txt

# getfacl testdir/

user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Beitrag geändert von drcux (03.02.2021 12:01:44)

Offline

#21 03.02.2021 12:57:28

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Hallo drcux,
also ja, das klappt bei mir auch einwandfrei. Ich hatte am Anfang mal an ACL gedacht aber nicht weiterverfolgt und auch nicht mehr daran gedacht...... Irgendwie hab ich immer im Hinterkopf ACLs machen alles nur komplizierter. Zumindest wurde mir das auf irgendeinem Kurs mal so kommuniziert.......
Finde auch immer noch komisch das man im apache selbst da nicht ganz einfach was konifgurieren kann.
Vielen Dank für die Lösung. Dann haben wir jetzt also drei Lösungsansätze :-)
Vermutlich ist die ACLs die "sauberste" da man am Apache nichts verbiegen muss........ bin mir aber auch nicht hundertprozentig sicher...

Offline

#22 03.02.2021 13:10:29

eeLooDe8
Gast

Re: Rechteproblem mit Apache und WebDAV

mabox schrieb:

Vermutlich ist die ACLs die "sauberste" da man am Apache nichts verbiegen muss........ bin mir aber auch nicht hundertprozentig sicher...

Versuch macht kluch... wie ich deinem Eingangsposting entnehme, wurden die Schreibrechte nach Zugriff durch die App für die Gruppe wieder zurückgesetzt. Da wäre es dann interessant zu wissen, ob es sich anders verhält, wenn die Defaultrechte des Ordners in der access-control-list auf einen Schreibzugriff gesetzt werden. Nach meinem Verständnis wirkt sich das nur auf die Anlage neuer Dateien aus, verhindert aber keine nachträgliche Änderung.

#23 03.02.2021 14:15:15

mabox
Mitglied

Re: Rechteproblem mit Apache und WebDAV

Doch, sorry, das hab ich nicht eindeutig formuliert in meinem letzten Post glaub......
Es klappt tatsächlich auch über die ACL das die Datei die Gruppenberechtigung rw behält.
Ich habe zum testen jetzt unser Overrite Unit wieder gelöscht und den Apache neu gestartet. Kontrolliert ob der PID die umask 022 hat, hat er.
Danach über meine APP die Datei verändert und die hatte danach immer noch rw für die Gruppe.
Bei der Datei handelt es sich übrigens u.a. um ein KeePass Datenbankfile :-)

Von daher würde für mich jetzt auch die ACL Lösung tatsächlich funktionieren aber definitiv hab ich einiges gelernt mal wieder.......

Offline

#24 03.02.2021 15:15:26

phunsoft
Mitglied

Re: Rechteproblem mit Apache und WebDAV

drcux schrieb:

Ist es nicht besser, ....

Definitiv besser. Hab' nie darüber nachgedacht, dass eine Default-ACL die umask übersteuert. Wieder was gelernt. Danke für den Tip.

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums