Mein C Programm braucht Root rechte!

Dieses Thema im Forum "C/C++" wurde erstellt von Yellow, 22.07.2007.

  1. #1 Yellow, 22.07.2007
    Zuletzt bearbeitet: 22.07.2007
    Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    Hi Leute!

    Ich habe mal hier im Forum gesucht aber leider keine für mich nachvollziehbare Erklärung für meine Situation gefunden.

    Ich möchte ein Programm schreiben das mit start meinen USB-Stick umountet. Das Programm ansich ist nicht das Problem. Doch ich kann nur mit root Rechten "mounten, umounten". Wie kann ich das am besten lösen?

    Wäre euch für ein nettes Beispiel etc. sehr dankbar :hilfe2:
    (Beispiel bitte nur auf die Rechte bezogen, rest will ich selber versuchen ;) )

    Yellow

    PS: Dieses Programm möchte ich entwickeln weil es besser sein soll einen USB-Stick erst zu umounten bevor ich in entfehrne. Link zu dem Tread im Unixboard: :::LINK:::

    EDIT: Ich habe mich mal bei netten Usern in unserem Chat ein bischen Informiert und habe erfahren das ich ja mittels
    "sudo -u root /file/path" ja auch ein Proggy ausführen kann. Doch ich möchte ja gerne das dass Programm root Rechte hat. (hm... bin ich damit im falschen Thread)?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Jehova1, 22.07.2007
    Jehova1

    Jehova1 Routinier

    Dabei seit:
    22.08.2006
    Beiträge:
    333
    Zustimmungen:
    0
    Ort:
    Wo die wilden Kerle wohnen
    Wo ist das Problem? Wenn du dein Programm mit Sudo ausführst müsste es doch gehen!? Und warum willst du sowas denn in C schreiben? Für sowas sollte ein Shell-Skript nun wirklich ausreichen!? Und was soll das Programm denn genau machen? Schreibe dir doch einfach nen einfachen alias in deine .bashrc - Dann kannste nen selbst gewählten Befehl (zB "hans") ausführen und dieser wird dann wie ein "sudo umount ..." ausgeführt. Dann musste halt dein PW eingeben aber einfacher wirste das nich hinkriegen fürchte ich!?...
     
  4. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    Danke hört sich super an. Aber da ich noch nicht so erfahren in Linux bin, denke ich wird es etwas Probleme für mich mit dem .bashrc geben!

    Und das ich dazu C nehme liegt daran das ich es als Progammierübung benutzte ;)
     
  5. #4 z-shell, 22.07.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Code:
    alias start_usb='sudo mount /dev/sdx /mnt'
    in die ~/.bashrc eintragen

    Zum Bleistift

    Oder ein Startscript:
    Code:
    #! /bin/bash
    
    if [ ${UID} != "0" ]; then
     echo "Keine Berechtigung"
      exit 1
       fi
    
    case $1 in
    
    start)
    echo "Mounting /dev/sdx ..."
    mount /dev/sdx /mnt
    echo "done!"
    ;;
    
    stop)
    echo "Unmounting /dev/sdx ..."
    umount /dev/sdx
    echo "Done!"
    ;;
    
    restart)
    $0 stop
    $0 start
    ;;
    
    *)
    echo "Usage: `basename $0` start|stop|restart"
     exit 1
    ;;
    
    esac
    
     
  6. #5 Jehova1, 22.07.2007
    Jehova1

    Jehova1 Routinier

    Dabei seit:
    22.08.2006
    Beiträge:
    333
    Zustimmungen:
    0
    Ort:
    Wo die wilden Kerle wohnen
    Auch wenn du es jetzt nicht benutzen willst dürfte die .bashrc interessant für dich sein. Ich erklärs dir mal, weil ich grad zuviel zeit hab:
    In der Datei ( /home/deinusername/.bashrc ) stehen die Befehle, die beim Start der Shell ausgeführt werden sollen.
    Der Befehl "alias" erlaubt dir, kurzschreibweisen für lange Befehle zu erstellen.
    Wenn du so einen Alias-Befehl jetzt also in deine .bashrc reinschreibst läd die Shell immer diese kurzschreibweise. Jetzt kannst du zB in deine Bashrc sowas wie
    Code:
    # Meine Aliase <- das ist wegen der Route ein Kommentar
    alias [COLOR="Lime"]hans[/COLOR]='[COLOR="Purple"]sudo chown www-data /var/www/webdesign/ -R[/COLOR]'
    Das grüne Ding kannst du nennen, wie du willst (aber sollte kein normaler Befehl wie "ls" sein, sonst gibts Komplikationen). Das Lilane Ding muss der Befehl sein, der tatsächlich ausgeführt werden soll. also bei dir sowas wie "umount ..."
    Hoffe das war aufschlussreich
     
  7. #6 Schneemann, 22.07.2007
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    Hi,

    du kannst dich zur Gruppe wheel hinzufügen und dann in visudo (also root ausführen) hier die 2. Zeile unkommentieren:
    Code:
    # Same thing without a password
    #%wheel  ALL=(ALL)       NOPASSWD: ALL
    
    Dann musst du bei sudo nie mehr das Passwort eingeben. Ist ganz schön praktisch, aber auch unsicher.
     
  8. #7 gropiuskalle, 22.07.2007
    gropiuskalle

    gropiuskalle terra incognita

    Dabei seit:
    01.07.2006
    Beiträge:
    4.857
    Zustimmungen:
    0
    Ort:
    Berlin
    Megaunsicher, wenn ich das mal so sagen darf. Damit wird die Rechtearchitektur innerhalb eines Systems ja fast obsolet.
     
  9. #8 Hello World, 22.07.2007
    Hello World

    Hello World Routinier

    Dabei seit:
    22.11.2006
    Beiträge:
    324
    Zustimmungen:
    0
    Benutzt doch einfach pmount, das läuft suid-root und ist auch noch einfacher zu nutzen. Und ja, %wheel ALL=(ALL) NOPASSWD: ALL ist wirklich eine saudumme Idee.
     
  10. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    Also erstmal danke für eure Antworten. Ich bin mir nun noch nicht ganz sicher wie ich es machen werde, doch ich denke anhand eurer Beispiele wird mir schon eine Vernünftige Variante einfallen.

    Doch eine Frage z-shell(oder euch): Was ist das für ein Syntax? Also C ist das nicht oder? Wo bekomme ich Leermaterial für diese Sprache her!?

    Thx Yellow
     
  11. #10 z-shell, 23.07.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
  12. #11 Yellow, 23.07.2007
    Zuletzt bearbeitet: 23.07.2007
    Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    Wo bekomme ich gute Lektüre dafür her? Möchte das nicht nur Copy / Pasten. Möchte das dann schon begreifen was ich da genau schreibe und von meinem System verlange!

    EDIT: LACH, HABEN ZUR GLEICHEN GESCHRIEBEN! ;)
     
  13. #12 z-shell, 23.07.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Ich habs editiert. Wohl zu langsam ;)
    Und dann auch noch ohne es als edit zu markieren :brav:
     
  14. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    @z-shell: Danke für die Super Links. Habe dir mir erstmal gesaved ;) THX
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 z-shell, 23.07.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Kein Ding :)
     
  17. #15 lukrop, 01.08.2007
    Zuletzt bearbeitet: 03.08.2007
    lukrop

    lukrop Don't feed trolls

    Dabei seit:
    01.08.2007
    Beiträge:
    32
    Zustimmungen:
    0
    Ort:
    Wien
    *thread aufwaerm*

    ich schreibe ein programm, dass mittels forkpty() einen pseudo-terminal oeffnet und auf dessen file-diskreptoren ich schreiben kann... soweit so gut, das funktioniert... wenn ich allerdings auf diesem pty "su -c <irgendeincommand>" ausfuehren will passiert garnichts... irgendwie wird die passwortabfrage nicht and stdout geschickt sondern su handhabt das anders, jetzt wollte ich wissen ob jemand weiß wie ich das problem loesen kann...

    Code:
    //Ausschnitt aus dem Programm (Qt-Gui anwendung)
    
    #define BLOCKSIZE 64 //bytes
    #define BASH "/bin/bash"
    
    int fd;
    int pty;
    char buffer[BLOCKSIZE];
    
    
    pty = forkpty(&fd,0,0,0);
    
    if (pty == -1){
        perror("Failed!");
    }
    
    if (pty == 0){
    
        char *cmd[] = { "su -", (char *)0 };
    
        execv(BASH,NULL);
        write(fd, "\n",1);
        write(fd, "su\n", 3);
        write(fd, "meinpw\n", 7);
    // write(fd, "ls -oh\n",7);
        write(fd, "\n",1);
    }
    
    else {
    qDebug() << "Child PID:" << pty;
    
    while(1)
    {
        int length = 0;
        length = read (fd, buffer, BLOCKSIZE);
            if (length == 0 || (length < 0 && errno != EINTR))
                break;
            if (length > 0)
                write (1, buffer, length);
                
    }
    EDIT:
    geloest...

    Code:
    #define BLOCKSIZE 64 //bytes
    #define BASH "/bin/bash"
    
    int fdM;
    int fdS;
    
    char slaveName;
    
    int pty;
    int isctty;
    
    char buffer[BLOCKSIZE];
    
    char user[] = {"root"};
    
    pty = forkpty(&fdM,&slaveName,0,0);
    
    if (pty == -1){
        perror("Failed!");
    }
    
    else if (pty == 0){ /* Kindprozess */
    
        
        execl(BASH,"bash","-c","su","-",user,NULL);  
    }
    
    else { /* Elternprozess */
    // waitpid(pty,&status,NULL);
    
    fdS = open(&slaveName,O_RDWR);
    
    sleep(1);
    
    write(fdM,"<meinpw>\n",<pwlaenge>);
    write(fdM,"cd\n",3);
    write(fdM,"ls\n",3);
    qDebug() << "Child PID:" << pty;
    
    while(1){
        
        int length = 0;
    
        length = read (fdM, buffer, BLOCKSIZE);
            if (length == 0 || (length < 0 && errno != EINTR))
                break;
            if (length > 0)
                write (STDOUT_FILENO, buffer, length);
    }
    ist zwar nicht die schoenste variante aber endlich geht es... :)
     
Thema:

Mein C Programm braucht Root rechte!

Die Seite wird geladen...

Mein C Programm braucht Root rechte! - Ähnliche Themen

  1. Was für eine Programmiersprache sollte ich als erstes in meinem Leben lernen

    Was für eine Programmiersprache sollte ich als erstes in meinem Leben lernen: Titel sagt schon alles und welche Linux Distri sollte ich dafür verwenden. Übrigens die einzig ste Programmiersprache die ich kann und auch gut...
  2. XFCE4: Wo sind meiner Programme?

    XFCE4: Wo sind meiner Programme?: Hi, ich habe unter Debian die grafische Obefläche XFCE und als Anmldungsmanager gdm. Allerdings kann ich unter XFCE meine Programme nicht...
  3. Programmeintrag lässt sich nicht aus dem K-Menue entfernen

    Programmeintrag lässt sich nicht aus dem K-Menue entfernen: Ich hatte ein Programm (gCAD3D) installiert. Hat mir aber nicht zu gesagt. So hab ich es wieder mit der Uninstallroutine deinstalliert. Alles weg,...
  4. Systemnahe Programmierung allgemein

    Systemnahe Programmierung allgemein: ... wo finde ich am einfachsten Beschreibungen fuer verschiedene betriebssystemnahen Funktionen wie z.B.: --- Multithreading ---...
  5. Neuer Mod in "Programmieren allgemein"

    Neuer Mod in "Programmieren allgemein": ...ist mapiox! viel spass!!!! :]