2017-11-23 19 views
0

Ich habe eine kleine C++ App, um Lichter für ein BeagleBone Black Board, das auf Debian 9.2 läuft, ein- und auszuschalten.Eine ausführbare Datei mehr Berechtigungen geben als Benutzer

Dies geschieht durch Aktualisieren von Textdateien.

Wenn ich das Programm als Standardbenutzer ausführe, läuft es ohne Fehler, aber keiner der Lichter ändert sich.

Wenn ich das Programm mit sudo starte, funktioniert alles gut und die Lichter funktionieren. Ich vermute, es liegt daran, dass diese Dateien einen höheren Zugriff benötigen.

Ich bin nicht sehr vertraut mit Linux-Berechtigungen, aber gibt es eine Möglichkeit, Ihr Programm den Zugriff auf die Dateien zu ermöglichen, wo ein Benutzer nicht konnte?

+3

Ich denke, vor 20 Jahren könnten Sie die binäre Super-User-Flag geben, aber das ist sehr falsche Lösung, nicht einmal sicher, ob es noch funktioniert, oder es würde mit einigen Sicherheitsrichtlinien kollidieren. Überprüfen Sie stattdessen die betroffenen Beaglebone-Dateien, wenn sie zu einer bestimmten Gruppe gehören und Gruppenrechte für den Schreibzugriff haben, und fügen Sie dann diese Gruppe Ihrem Benutzer hinzu (der die Binärdatei ausführt). Wie auch immer, ich bin nur Linux-Benutzer, nicht Admin, also kann ich etwas über die Funktionsweise von Gruppen durcheinander bringen. In jedem Fall handelt es sich um reine * nix-Berechtigungen, nichts mit C++ oder Programmierung zu tun. – Ped7g

+2

Wenn Sie eine erhöhte Berechtigung zum Schreiben in eine Datei benötigen, müssen Sie das Programm mit erhöhten Rechten ausführen. Es gibt einfach keinen Weg. Was Sie jedoch tun können (und sollten), ist das Löschen der Privilegien, bis Sie tatsächlich Aufgaben mit erhöhten Rechten mit [setuid] ausführen müssen (https://www.gnu.org/software/libc/manual/html_node/Setuid-Program) -Example.html). –

+0

Macht Sinn und danke Ihnen beiden. Ich bin ein kompletter Linux-Anfänger und komme aus über 25 Jahren MS-Stack-Entwicklung, daher ist es schwierig, einige der Konzepte zu verstehen :) – user3953989

Antwort

2

lesen sorgfältig über setuid und über credentials(7) (und execve(2) die ist, wie Programme gestartet werden). Aber sei vorsichtig mit vulnerabilities.

Lesen Sie Advanced Linux Programming (frei herunterladbar, aber ein bisschen alt) oder ein neueres Buch über Linux-Programmierung. Lesen Sie intro(2) und syscalls(2).

Sie können auch Operating Systems: Three Easy Pieces (frei herunterladbar) lesen, um mehr über Betriebssysteme im Allgemeinen zu erfahren.

Sie könnten Ihre ausführbare setuid (mit chmod u+s nach den entsprechenden chown) und rufen mit Sorgfaltsetreuid(2) an geeigneten Orten machen. So funktionieren Programme wie sudo oder su (alle sind setuid). Manchmal können Sie nur Gruppenberechtigungen verwenden (also nur setgid).

Aber Vorsicht, ein Bug in einem solchen Programm kann eine große Sicherheitslücke öffnen. Daher ist es ratsam, setuid-Programme sehr klein zu halten und ihren Code von anderen Augen überprüfen zu lassen. Ein möglicher Ansatz besteht darin, eine sehr kleine setuid-ausführbare Datei zu schreiben, die seltsame Dinge tut (z. B. nur die LEDs zu blinken) und mit einem größeren und größeren gewöhnlichen Programm (z. B. Bereitstellen einer GUI) zu kommunizieren (z.B. mit pipe(7) -s oder anderen Formen von inter-process communication).

Vielleicht können Sie Ihr System konfigurieren, indem Sie eine Gruppe led erstellen und Gruppenschreibberechtigungen für /sys/class/leds/beaglebone:green:usr0 erteilen und nur setgid-Techniken verwenden.

1

Es gibt viele Möglichkeiten, dies zu erreichen und es hängt viel von der größeren Einstellung ab, welche besser geeignet ist. Eine Möglichkeit besteht darin, die Berechtigungen dieser bestimmten Datei zu ändern (nicht sicher, ob sysfs dies zulässt).

Eine weitere Möglichkeit besteht darin, den Benutzer, der diese Funktion ausführt, einer Gruppe hinzuzufügen, die Schreibzugriff auf die Datei hat.

Noch eine weitere ist die bereits erwähnte Einstellung des sogenannten setuid-Bits und das Ändern des Eigentumsrechts der ausführbaren Datei an root oder eines Benutzers mit Schreibzugriff auf diese Datei. Dies hat normalerweise tiefere Auswirkungen auf die Sicherheit.

Auch die Verwendung von sudo oder su zum Ausführen der Datei ist ein gültiger Ansatz. Um die Sicherheit zu begrenzen, können Sie diesen speziellen Befehl in sudoers zulassen.

Eine Variation von einem der oben genannten besteht darin, einen permanenten Prozess auszuführen, der auf Befehle von einem weniger privilegierten Prozess lauscht.

Wie gesagt, hängt viel davon ab, wie dies in die größere Einstellung passt. Um das Öffnen einer Sicherheitslücke zu vermeiden, müssen auch Implikationen berücksichtigt werden.

Verwandte Themen