Hallo,
Wie kann ich einen Teil des Programmcodes (welches eine Datei speichert) Systemadminstaror Rechte (Root Rechte) verleihen so dass man eine Datei speichern/laden kann die für den gegenwärtigen benutzer nicht zu öffnen/speichern ist ?
Bisher ist das alles realativ einfach gewesen, programm mittels "sudo" soder andern kdesudo/gksudo gestartet passwort eingeben und fertig.
Jetzt mit diesen Wayland zeugs und den root verboten modus wird das ja nicht mehr funktionieren, da muss man das policykit zeugs fragen, es gibt zwar die möglichkeit "pkexec" was so in der art die kdesudo ist,
erfordert dann aber ein eigenständiges programm was die Daten schreibt/liest und die müssen dann wieder erst in das aufzurufende programm übernommen werden.
Gibt es keine Möglichkeit gleich innerhalb des Programmes nach erhöten Benutzerrechten zu fragen ? und dann nur den "Laden/Speichern" Teil des Progrmmes zu ermöglichen auf die Datei zuzugriefen ?
Speichern von Datein die "Root" gehören
-
- Beiträge: 6950
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Speichern von Datein die "Root" gehören
Gehen tut dies auf jeden Fall, nur weis ich leider nicht wie dies geht. Es gibt viele Programm unter Linux, welche erst zur Laufzeit mach dem Root-Passwort fragen.Gibt es keine Möglichkeit gleich innerhalb des Programmes nach erhöten Benutzerrechten zu fragen ? und dann nur den "Laden/Speichern" Teil des Progrmmes zu ermöglichen auf die Datei zuzugriefen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2138
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Speichern von Datein die "Root" gehören
Mach es doch ganz einfach, verwende cat und echo mit sudo. Somit wird das laden und Speichern von separaten Programmen übernommen die Root berechtigung haben, ohne das dein Programm selbst diese Rechte braucht. Einfaches Beispiel:
Oder du schreibst den inhalt in Dateien des Users, und cp'st sie dann mit sudo.
PS: es kann sein das bei RunCommand der volle Pfad angegeben werden muss, also /usr/bin/sudo
Ich habe es nicht getestet
Code: Alles auswählen
var filecontent: String;
...
if RunCommand('sudo cat /Path/to/File', FileContent) then // laden
WriteLn(FileContent);
...
//Schreiben
if Not RunCommand('sudo echo ''' + FileContent + ''' > /path/to/file') then
raise Exception.Create('Something went wrong');
PS: es kann sein das bei RunCommand der volle Pfad angegeben werden muss, also /usr/bin/sudo
Ich habe es nicht getestet
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Speichern von Datein die "Root" gehören
Sollte es wirklich so einfach sein, unter Linux Adminrechte zu bekommen? Was hindert mich denn dann daran, zwei Programme zu schreiben, von denen das eine mit Userrechten läuft und welches das andere über sudo mit Adminrechte, aufruft?Warf hat geschrieben:Mach es doch ganz einfach, verwende cat und echo mit sudo.....
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Speichern von Datein die "Root" gehören
Oder man schreibt sich einen daemon, der im Hintergrund läuft und mit dem Userprogramm kommunizieren kann. Das kann allerdings zu einem riesigen Sicherheitsproblem werden, wenn man keine sichere Authentifizierung und/oder Verschlüsselung benutzt.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
-
- Beiträge: 2138
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Speichern von Datein die "Root" gehören
Die Tatsache das man das Passwort eingeben mussTimm Thaler hat geschrieben:Sollte es wirklich so einfach sein, unter Linux Adminrechte zu bekommen? Was hindert mich denn dann daran, zwei Programme zu schreiben, von denen das eine mit Userrechten läuft und welches das andere über sudo mit Adminrechte, aufruft?Warf hat geschrieben:Mach es doch ganz einfach, verwende cat und echo mit sudo.....

Code: Alles auswählen
RunCommand('/bin/bash -c ''SUDO_ASKPASS="/Some/Path/To/askpass" && sudo -A cat /file/toRead''', FileContent)
Ansonsten könntest du die TProcess Klasse verwenden und das Passwort einfach in dem aufrufenden Programm in den STDIn von sudo schreiben sobald es danach fragt. Das dürfte normalerweise auch kein Problem sein, und erfordert kein separates Programm.
Auch das kann man mit dem Unix Berechtigungsystem lösen. Der Daemon erstellt eine socket zur kommunikation. Da ein Socket auch nur eine Datei ist einfach die berechtigungen so setzen das nur der richtige User/Gruppe rw rechte darauf haben, und tada Verschlüsselung wird überflüssig, da um den Daemon zu exploiten das Nutzerpasswort benötigt wird.compmgmt hat geschrieben:Oder man schreibt sich einen daemon, der im Hintergrund läuft und mit dem Userprogramm kommunizieren kann. Das kann allerdings zu einem riesigen Sicherheitsproblem werden, wenn man keine sichere Authentifizierung und/oder Verschlüsselung benutzt.