Programme, Aliase und Zugriffsrechte

chriz0101

Lt. Junior Grade
Registriert
Aug. 2011
Beiträge
257
Guten Abend liebes CB-Board,

ich war überrascht einen eigenen Unix-Bereich hier vorzufinden, positiv versteht sich :)

Ich sollte vorweg sagen das ich berüchtigter Windows-er bin, auf Grund meiner Arbeit aber oft auf der Unix-Kommandozeile "rumturnen" muss (PHP-Entwicklung). Immer wieder bin ich begeistert, wie einfach dinge auf der Kommandozeile, komplett ohne GUI, auszuführen sind (sei es installation eines Webservers oder die Suche nach Dateien).

Derzeit habe ich folgendes Problem, in einem PHP-Skript rufe ich über exec(); Systembefehle auf. Es geht hierbei um ffmpeg, um Videos oder Sounds zu konvertieren. Wenn ich das Skript mit dem Exec-Befehl mit dem Benutzer root erstelle, dann funktioniert es ohne Probleme, mach ich das aber nun als einen user der über useradd hinzugefügt wurde, dann passiert nichts.

Folgende Möglichkeiten zur Fehlerbehebung:
- Statt des Alias des Programms brauch ich den absoluten Pfad des Programms
- Die Zugriffsrechte müssen für das Programm/den Ordner so gesetzt werden, dass der Besitzer des Skripts rechte dazu hat.

Meine Frage ist nun, wo ist etwas installiert das über apt-get install installiert wurde? Oder gibt es einen Befehl der das Alias "ffmpeg" zum "Ursprungsort" zurückführt, weil es ja wirklich nur ein Verweis ist?
Ausserdem muss ich dann die Rechte für das Programm/den Ordner ändern. Ich denke mal das muss für den Besitzer des Skriptes passieren?

Was haltet ihr von den Lösungsvorschlägen? Fallen euch andere Sachen noch ein? Bin über jeden tip dankbar.

P.S. Sudo/su ist für exec(); nicht verfügbar
 
Abhängig davon, was genau du machen willst, sollte dir ffmpeg-php reichen. Wenn du nichtmal /usr/local/bin/ffmpeg von alleine findest ist das wohl die sicherste Möglichkeit ;)

Grundsätzlich solltest du dich mit dem Apachen vertraut machen, u. a. mit Dingen wie dem safe_mode, safe_mode_exec_dir und Rechten unter *nix allgemein.
 
Zuletzt bearbeitet: (Hervorhebung)
"Installiert" sollte das unter /usr/bin/ffmpeg sein.

Der alias "ffmpeg" entsteht dadurch, dass /usr/bin im $PATH enthalten ist und somit automatisch nach Programmen mit dem Namen ffmpeg in diesen Ordnern gesucht wird.

Um herauszufinden, welchen Befehl ffmpeg ausführt, mal als root und mal als user:
"which ffmpeg" in die Konsole tippen. Das zeigt dir den Pfad zur executable und sollte in beiden Fällen obiges liefern.

Gebe auch mal in beiden Fällen $PATH in die Konsole. In beiden Fällen sollte /usr/bin enthalten sein.



Dass du als User dann die entsprechenden Rechte benötigst, ist logisch. Allerdings sollte /usr/bin/ für alle ausführbar, jedoch nicht beschreib oder lesbar sein.

Was gibt denn "ls -la /usr/bin/ffmpeg" aus?

In welchen Gruppen ist der entsprechende User, der es ausführen können soll?

Hast du evtl den safe_mode bei php gesetzt?

Die Dateien die du öffnen willst, brauchen natürlich auch read-Rechte des Users. Alles andere wäre ein Sicherheitsdebakel. Vll hat dein ausführender User ( "ps aux | grep apache" ) keine Zugriffsrechte auf deine Dateien?

sudo ist allerdings auch mit php möglich, IMO hierfür aber ein unschöner Workaround für ein tieferliegendes Rechte-Problem. Möglichst wenig mit root und sudo arbeiten!
 
danke für die antworten bis jetzt.

@b03ch7 ffmpeg-php ist auch installiert, nur leider wird "convert" nicht unterstützt (konnte in der api nämlich von ffmpeg-php nix finden) darum müsst ich da auf ffmpeg zurückgreifen. safe_mode ist (für mich selbstverständlich) aus.

@niethitwo ja der pfad stimmt, den which sollt ich mir merken, oder den $PATH. Man ist von Windows so eingefahren, bei jedem Programm in der gui den Pfad angeben... :/.

ls -la /usr/bin/ffmpeg gibt "-rwxr-xr-x 1 root root 97944 2011-03-22 16:55 /usr/bin/ffmpeg" aus.

Der Root ist in Gruppe 0 (was für die meisten unter euch wahrscheinlich sogar nichts neues ist)
Der Nutzer um den es geht ist in Gruppe 1001. (Gleiche gid wie uid)

Alle Dateien die über den Befehl gelesen werden sollen, sind in einem unterordner von /var/www, sollten also ohne Probleme lesbar sein? Ich kann die dateien in skripten sonst ohne probleme anzeigen oder einbinden.

Der Output von ps aux | grep apache gibt mir einige Zeilen aus, 1mal als root auf "/usr/bin/apache2 -k start" und mehrere (ich nehme an prozesse) von "www-data". (gid 33)

€dit: Ich glaube es liegt doch an den leserechten der Datei. Die Zeile: ffmpeg -i "The Big Year.mov" -f mp4 -b 200000 test.mp4 funktioniert als betroffener User nicht, ffmpeg bricht ab mit "permission denied". mach ich "sudo su" und bin als root in der bash, läuft der locker durch.
Ich habe in der apache2 anleitung oder ubuntuusers.de gelesen, das empfohlen wird, eine gruppe anzulegen wo www-data und weitere user drin sind, damit alle entsprechenden user auf /var/www lese, bzw schreibrechte haben. Ist das sinnvoll?
 
Ja das ist sinnvoll.

Als erstes: sollte das eine live-maschine sein, bitte apache nicht als root sondern mit extra eingerichtetem user starten!

Danach die daten in einen ordner verschiebene, der von einer gruppe www-data o.ä. gelesen werden kann. den rest des pcs für diese gruppe nicht zugänglich machen.

Alles andere ist doch sehr unschön und unsicher...Rechte von vornerein auf das Minimum reduzieren. Dafür hat Unix diese Gruppenverwaltung mit expliziten Rechten. Nutz sie auch, wenn du eine angreifbare Maschine besitzt. Und wenn das nur für zu Hause ist: lieber gleich richtig lernen, bevor es mal iwann live geht ;)
 
den Pfad zu einem Programm kannst dir mit type ausgeben lassen.
 
@niethitwo
Danke, das ganze ist leider nicht nur für zuhause ;) Darum bin ich für die Tips mit der Rechteverwaltung sehr dankbar. Melde mich heute Abend spätestens wieder wenn ich das ausprobiert habe.
 
Zurück
Oben