Benutzerrechte ändern, Superuser

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Benutzerrechte ändern, Superuser

    Ich bin gerade dabei, ein Admin-Tool zu bauen, welches mir ersparen soll, mich auf meinem Server über ssh einzuloggen, um folgende Befehle auszuführen:
    - cd
    - ls [-all]
    - rm
    - chmod

    Die ersten drei, also Verzeichnisse durchforsten und Infos anzeigen und Dateien löschen funktioniert auch wunderbar!
    Nur beim Ändern der Benutzerrechte klappt es nicht:

    "Warning: chmod(): Operation not permitted in ..."

    Die Benutzerrechte werden aber korrekt angezeigt und sollten mir eigentlich auch das
    Ändern der Benutzerrechte erlauben.
    Egal, ob z.B. 'rwxrwxr--' mit Gruppe 'www' oder sogar 'rwxrwxrwx'.
    Schließlich kann ich die Datei auch löschen.

    Hier ein Code-Ausschnitt:

    PHP-Code:
    // Button 'Benutzerrechte ändern' gedrückt
    if ($_REQUEST['chmod']){
        
        
    $file $_REQUEST['chmodfile']; // zu ändernde Datei
        
    $pfad $_REQUEST['pfad']; // Pfad zur Datei

        
    $ow 0// Eigentümer-Rechte
        
    $gr 0// Gruppen-Rechte
        
    $ot 0// andere

           //  Abfragen der Checkboxes und entsprechendes Setzen der Rechte
        
    if ($_REQUEST['owner_r']) $ow $ow+4;
        if (
    $_REQUEST['owner_w']) $ow $ow+2;
        if (
    $_REQUEST['owner_x']) $ow $ow+1;
        if (
    $_REQUEST['group_r']) $gr $gr+4;
        if (
    $_REQUEST['group_w']) $gr $gr+2;
        if (
    $_REQUEST['group_x']) $gr $gr+1;
        if (
    $_REQUEST['others_r']) $ot $ot+4;
        if (
    $_REQUEST['others_w']) $ot $ot+2;
        if (
    $_REQUEST['others_x']) $ot $ot+1;

        
    $mod '0'.$ow.$gr.$ot// Zusammensetzen des Strings mit führender '0'
        
    $ch = @chmod($pfad."/".$file,$mod); // ändern
        
    if(!$ch) echo "keine ausreichenden Rechte!"// hat nicht geklappt
        
    else echo "neue Benutzerrechte von '$file': $mod"// hat geklappt

    Ist was im Code falsch (glaub ich eigentlich nicht) oder brauch ich andere Rechte, um chmod() zu verwenden?

    Ich hab was von 'Superuser' gelesen. Liegt es etwa daran, daß 'www' kein chmod() durchführen darf, aber z.B. der Eigentümer? Wie kann ich mich denn als 'Superuser' anmelden?


  • #2
    mach mal das @ vor dem chmod weg.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Re: Benutzerrechte ändern, Superuser

      Original geschrieben von tijab
      PHP-Code:
      $mod '0'.$ow.$gr.$ot// Zusammensetzen des Strings mit führender '0'
      $ch = @chmod($pfad."/".$file,$mod); // ändern 
      das manual rät davon ab, einen string als parameter zu übergeben.

      funtkioniert es denn, wenn du chmod mit der oktalzahl 0yxz direkt aufrufst?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Re: Re: Benutzerrechte ändern, Superuser

        @Abraxax:
        Ja, hab ich natürlich zum Testen weggemacht. Dann kommt oben stehende Warnung.

        Original geschrieben von wahsaga
        das manual rät davon ab, einen string als parameter zu übergeben.

        funtkioniert es denn, wenn du chmod mit der oktalzahl 0yxz direkt aufrufst?
        Hmmm, ja. Ich hab das auch gelesen.
        Aber ich hätte mal noch ein wenig weiter unten die Beispiele lesen sollen.

        Ich hatte das oberste Beispiel so verstanden, daß man Strings z.B. nicht so verwenden darf: "u+rwx"
        Ich dachte, wenn ich einen String "0777" übergebe, funktioniert das. Gibt ja auch keinen Parse-Error.

        Hab die chmod-Zeile nun so geändert, und es tut:
        PHP-Code:
        $ch chmod($pfad."/".$file,intval($mod8)); 
        Aber zum Superuser hätte ich da noch eine Frage:
        Kann man denn in diesen Modus überhaupt gelangen, oder ist man als Client immer 'www'?
        Was müsste ich machen, wenn ich Rechte ändern will, bei denen 'www' keine Schreibrechte hat?

        Kommentar


        • #5
          Ach, und noch was:
          Gibt es eine Möglichkeit, die Rechte rekursiv zu ändern (also auch die Rechte aller Unterobjekte) oder muß man sowas selbst implementieren?
          Hab da im Manual nix zu gefunden.

          Kommentar


          • #6
            suchfunktion -> "rechte rekursiv"
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Original geschrieben von wahsaga
              suchfunktion -> "rechte rekursiv"
              Hab ich nur Unix-Befehle entdeckt. (chmod -r)
              Wie ich das über die shell mache, weiß ich auch. Aber ich möchte ja gerade mit meinem Skript verhindern, mich per ssh einloggen zu müssen.

              Ah, bin grad beim Rumstöbern auf shell_exec() gestoßen!
              Löst das alle meine Probleme?
              Damit müsste ich mich doch als Superuser einloggen können und alles steuern können, was ich per ssh auch hinkriege.

              Gleich mal ausprobieren ...

              Kommentar


              • #8
                Dein chmod () im PHP Script wird immer von User www oder wie der bei dir auch heisst gestartet. Logischerweise kannst du keine Rechte an Dateien ändern, auf die www keine Schreibrechte hat.

                su frägt meines wissens immer interaktiv das Passwort ab und du kannst z.B. mit exec ('su root chmod 777 /datei') auch nicht landen - zumal du das root passwort ja irgendwo speichern müsstest wenn du es in der Kommandozeile übergeben wolltest - nicht ganz ungefährlich

                Bleibt nur noch den Apache als root statt www zu starten, dazu braucht man wohl nix zu sagen....
                Cocoa Entwicklertraining - Alles für die Apfelzucht

                Kommentar


                • #9
                  oder aber man gibt dem www-user die rechte das chmod als root (sudo - ohne pw-eingabe) zu starten. allerdings kann der www-user dann die rechte aller dateien ändern. und das ist eine postentielle sicherheitslücke, die du damit öffnen würdest.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    root-Rechte hab ich auf dem Server ja eh nicht. So viel Mist kann ich gar nicht bauen ;-)
                    Kann höchstens mein home-Verzeichnis schrotten.
                    Ich stelle mir das so vor, daß ich einen Login-Screen bekomme, wo ich meinen Account-Namen auf dem Server und das dazugehörige Passwort eintrage.
                    Anschließend führe ich folgendes aus:

                    PHP-Code:
                    shell_exec('login');
                    shell_exec($user);
                    shell_exec($pass);
                    shell_exec('chmod '.$rekursiv.' '.$mod.' '.$file);
                    shell_exec('exit'); 
                    Sollte doch funktionieren, oder?
                    Sicherheitsprobleme gibt es halt bei der Übertragung des Passwortes.
                    Wie könnte man das umgehen?

                    Kommentar


                    • #11
                      @tijab
                      ich habe mit mal erlaubt eines der *CROSSPOSTING*'s zu löschen. sowas wollen wir hier eigentlich nicht haben ....


                      mit dem von dir beschriebenen weg kannst du leider kein root-recht erhalten. der apache (und somit deine php-scripte) kann nur dateien ändern, wo er auch entsprechende rechte dazu hat.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        ... wenn du mir noch erklärst, was ein crossposting ist, und was du gelöscht hast, wird du vermutlich mein Einverständnis bekommen

                        Kommentar


                        • #13
                          dein posting 30-08-2004 15:24 gab es auch schon um 15:13 bereits 1:1. und das habe ich entfernt.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Oh, sorry.
                            Das hängt wohl damit zusammen, daß ich hier recht wenig WLAN-Empfang habe...
                            Manchmal drücke ich auf 'antworten', aber die Verbindung ist zu schwach.
                            Dann muß ich in den Nebenraum gehen und es dort nochmal versuchen.
                            Ich werd versuchen, das zu vermeiden.

                            Kommentar


                            • #15
                              Original geschrieben von tijab
                              Dann muß ich in den Nebenraum gehen und es dort nochmal versuchen.
                              aber 11 minuten? da ist dein nebenraum aber weit weg ....

                              ok. ist ja nicht schlimm. und jetzt back2topic ...
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X