Anzeige:
Ergebnis 1 bis 7 von 7

Thema: sh: case mit regex? ! builtin abfangen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    15.05.2001
    Beiträge
    88

    sh: case mit regex? ! builtin abfangen?

    Hallo ;

    ich versuche mit einem sh-wrapper das ! der shell
    abzufangen. Spaeter soll der Input mal ausgefuehrt werden.

    Wenn ich in der Console folgendes eingebe funktioniert das nur
    halb:


    rtfmt:~ # sh ./echo-wrapper.sh at!d restart
    sh ./echo-wrapper.sh atdate restart

    atdate restart
    rtfmt:~ # sh ./echo-wrapper.sh at\!d restart
    atd restart


    Dazu gibt es bisher folgendes:

    Code:
    #!/bin/bash --restricted
    
    BAR=`echo "$@"|sed -e s'/!//g'|sed -e s'/\!//g'|sed -e s'/[^0-9,A-Z,a-z ]//g'`
    
    
     case "$@" in
    
       ls*)
            /bin/ls
            ;;
     *restart*)
            echo $BAR
            # sh -c  "/etc/init.d/$SSH_ORIGINAL_COMMAND"
            ;;
         *)
        /bin/echo "not allowed and forbidden by the nsa:"$SSH_ORIGINAL_COMMAND"
            ;;
    esac
    Bin dankbar fuer jeden Hint.
    gruss 403
    ;)

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Alle Ersetzungen nimmt die Shell vor, bevor das Programm ausgeführt wird, und dem Programm werden dann die Ergebnisse übergeben. Wenn du z.B
    Code:
    cat *
    schreibst, wird
    Code:
    cat foo bar baz
    aufgerufen, wenn diese 3 Dateiein im Verzeichnis sind.

    Du wirst das also so nicht umgehen können.

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.05.2001
    Beiträge
    88
    Hallo :-)

    warum sollte man * nicht durch s'/[^a-zA-Z0-9]//g' ersetzen keonnen?

    bzw, die einzelnen Metazeiuchen wie ! usw. ?


    Vermutlich ist es das beste nur "command " explizit zu erlauben statt mit
    einem Regex alles auszuschliessen?


    gruss 403

    Und Danke fuer die Hilfe/Zeit
    ;)

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Ich verstehe nicht!? * und ! werden, wenn sie ersetzt werden, vor dem Aufruf ersetzt, $@ enthält bereits das Ergebnis dieser Ersetzung.

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.05.2001
    Beiträge
    88
    Es geht darum Shell Builtins abzustellen.
    $@ enthält bereits das Ergebnis dieser Ersetzung...
    Deshalb sollte ja $@ auch nochmal gerippt werden.

    Ich glaube, was ich suche heisst einfach set -o noglob bzw.
    enable -n noglob...

    Im schlimmsten Fall wuerde man eben eine Bash neukompilieren, oder
    wie bereits gesagt, die Moeglichkeiten explizit angeben.

    ( case in $SSH-ORIGINAL-COMMAND
    atd restart
    ;;
    nscd restart
    ;;
    )

    usw.
    ;)

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Ich denke, es ist besser, wenn du uns mitteilst, welches Problem du lösen willst, und nicht wie; was du da vorhast verstehe ich nicht ganz. Wenn du das Shellbuiltin test ausschaltest, nehme ich als /bin/test.

    Also, welches Problem möchtest du lösen? Da gibt es sicherlich eine einfacherere udn sicherere Methode.

  7. #7
    Registrierter Benutzer
    Registriert seit
    15.05.2001
    Beiträge
    88
    Zitat Zitat von Joghurt
    Ich denke, es ist besser, wenn du uns mitteilst, welches Problem du lösen willst, und nicht wie; was du da vorhast verstehe ich nicht ganz. Wenn du das Shellbuiltin test ausschaltest, nehme ich als /bin/test.

    Also, welches Problem möchtest du lösen? Da gibt es sicherlich eine einfacherere udn sicherere Methode.
    Also folgendes Scenario:

    1) Ein User logt sich ein via SSH-PublickeyAuthorization mit forced commands
    2) Statt einer Shell oder einem Command wird ein Wrapper gestartet
    3) Das vom User uebertragene <Keyword> wird an den Wrapper uerbermittelt
    4) der Wrapper startet den Dienst <Dienst> neu , oder stellt ihn aus usw.

    5) Was verhindert werden soll ist, wenn jemand den Client cracked, dass
    jemand dann z.B. /bin/bash -c "/bin/cat /etc/shadow" oder aehnliches
    eingibt, weil im wrapper steht:


    case in bla

    *restart*)
    /etc/init.d/$dienst restart


    Dabei geht es um das erste *, was aus meiner sich eine potentielle Luecke
    darstellt, die mit oben genannten Wegen geschlossen werden sollte.
    natuerlich kann "*" nicht mehr verwendet werden, wenn noglob aktiv ist.
    ;)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •