OCC Befehl ausführen als User www-data auf dem Raspberry Pi

Ein Problem, das mich schon länger verfolgt.
Habe hier eine Lösung gefunden.

Blockzitat
Wer einen Webserver auf dem Raspberry Pi installiert hat, steht manchmal vor seltsamen Problemen, die oft mit den Datei-Berechtigungen zu tun haben. Um einen speziellen Befehl dann mit den Rechten des Webserver-Users “www-data” in der Konsole testen zu können, ist es praktisch, zu diesem User zu wechseln.
Das geht mit dem folgenden Befehl sehr einfach: Zunächst meldet man sich als normaler Benutzer (in der Regel “pi”) per Tastatur oder über SSH auf dem Raspberry an und wechselt dann mit dem Befehl “sudo su” zum Root-User. Das geht direkt, denn unter Raspbian braucht man so kein Root Passwort!
Anschließend wechselt man mit diesem Befehl zum Benutzer “www-data”:
su -s /bin/bash www-data
Darauf wird eine neue Bash-Shell mit den Rechten des www-data Users geöffnet: Hier kann man jetzt seine Befehle mit den gleichen Berechtigungen testen, wie innerhalb eines über den Webserver ausgeführten Skriptes.

1 Like

Was dort geschrieben ist, ist alles richtig. Da man aber occ-Befehle nicht interaktiv nutzt, kann man auch als root folgendes Syntax nutzen (Beispiel):

sudo -u www-data php /pfad/zur/nextcloud/occ files:scan --all

In dem Fall führt root als Benutzer www-data den genannten Befehl aus.

Using the occ command
Manchmal muss man die Anleitung dort etwas anpassen. In der Regel ist der Webserver-Benutzer auch der Nextcloud-Benutzer und bei Debian-basierten Systemen daher www-data.

3 Likes

Sorry da muss ich einschreiten. :wink:

Interaktiver als einen Befehl direkt in eine Shell einzutippen geht fast nicht mehr :wink:

In dem Fall führt eben gerade nicht root den Befel aus, sondern sudo führt den Befehl als www-data aus. Ohne -u Option gilt einfach der default, welcher normalerweise der superser, respektive der root user ist.

Der Befehl, den du gepostet hast, ist aber natürlich korrekt. :slight_smile:

2 Likes

Da habe ich mich vielleicht falsch ausgedrückt. Der Benutzer www-data muss im Beispiel den aufgeführten php-Befehl ausführen. Dafür ist es aber nicht notwendig, dass man als Benutzer www-data eine interaktive Shell wie z. B. Bash aufruft.

Naja meins ist nicht ganz richtig und deins auch nicht. “root als Benutzer www-data den Befehl aus” ist nicht ganz richtig aber “sudo führt den Befehl als www-data aus” stimmt auch nicht ganz.

Es ist vielmehr so, dass der Befehl sudo ein Befehl (/usr/bin/sudo) ist und die Ausführung immer noch von einem Anwender ausgeht. So führt immer noch root den Befehl sudo aus und mit der Option wird dann die Folgeaktion des Zielbenutzers ausgeführt. Es wird also der Benutzer gewechselt wobei das auch nicht ganz stimmt. Leider ist der Quellcode etwas komplizierter. Aber hier kann man sich mal den Sourcecode durchlesen. Vielleicht findet jemand die relevante Stelle und mag sie posten.