Probleme beim wechsel der real UID während der Ausführung



  • Hi ich hab ein Programm, das auf die Funktion ioperm zugreift. Der Zugriff erfordert root-Rechte.
    Jetzt wollte ich das Programm jedoch auch von Usern ausführen lassen. Aber irgendwie bekomme ich es nicht hin.

    Hier ist mein Beispielcode:

    #include <iostream>
    #include "Driver.h"
    #include "Relais.h"
    
    using namespace std;
    
    int main()
    {
            if (setuid(0)!=0) {
                    perror("Fehler bei den Rechten");
                    exit(1);
            }
    ...
    

    als User bekomme ich immer Speicherzugriffsfehler auch wenn die Rechter der Datei auf 7777 stehen.
    Ich bekomme immer von perror: Operation not permitted.

    Mit root geht es wunderbar.

    Die Partition ist nicht mit der nosuid Option gemountet sondern nur mit atime.

    Muss ich da was im kernel aktivieren?

    Gruß Alex



  • Wäre schlimm, wenn das so einfach ginge, root-Rechte zu erhalten. Nur root kann mit setuid den Benutzer wechseln.



  • vielleicht versteh ich da was falsch,
    aber wenn der besitzer der datei (app) root is und chmod u+s macht dann sollt der user das prog ausfuehren koennen (group + rechte entsprechend setzen) und sachen wie zb inb outb usw sollten funktionieren.



  • Genau das ist ja mein Problem. Ich setze ja das s-Bit für den User. Aber bei setuid(0) kommt immer wieder Permission not permitted. Daher die Frage muss ich da vielleicht was im Kernel setzen?

    Gruß Alex



  • @daHa: Ah jetzt. Du hast es mir jetzt nochmal genau aufgeschlüsselt. Ich dachte, die Datei müsste mir gehören und dann mit root das s-Bit setzen.
    Jetzt hab ichs kappiert und es funktioniert.

    Danke


Anmelden zum Antworten