cgi bash skripting

A

Adramelec

Grünschnabel
Hallo!

Ich habe eine Frage bezüglich CGI BASH Skripting.

Folgende Aufgabe es soll durch ein einfaches HTML Formular Dinge abgefragt werde, diese Dinge sollen dann in einen Bash Befehl (der auf das System direkt ausgeführt wird) verarbeitet werden.

ALso nehmen wir an .. das Formular besteht aus einem Feld, wo man eine Zahl von 1-3 eingeben soll.
Man gibt 2 ein und drückt auf abschicken. Dann soll AUF dem System z.B. der Befehl "echo "2" > /etc/config_whatever_file" ausgeführt werden.

Wie mache ich das ? Funktioniert das überhaupt so wie ich mir das vorstelle?

Danke schon mal im Vorraus!
 
Hi,


gibt es einen Grund dafür, dass du Bash benutzen willst? Es gibt viele Möglichkeiten, das umzusetzen (Von Sicherheitsaspekten mal abgesehen), aber Bash würde ich nicht in die engere Wahl schließen :)

Hier eine Variante aus dem playground mit Ruby, sehr primitiv und absolut nicht sicher, tut aber.

PHP:
#!/usr/bin/env ruby

require 'webrick'

class Call < WEBrick::HTTPServlet::AbstractServlet
  def do_GET(request, response)
    action = request.query['action']
    response.status = 200
    response['Content-Type'] = 'text/html'
    response.body = 'No command given'
    if action
      response.body = IO.popen(action.to_s).readlines.join("") #.join("<br/>")
    end
  end
  alias :do_POST :do_GET
end

if $0 == __FILE__ then
  server = WEBrick::HTTPServer.new(
    :BindAddress     => 'localhost',
    :Port            => 8080,
    :Logger          => WEBrick::Log.new('server.log', WEBrick::Log::DEBUG),
    :AccessLog       => [[File.open('access.log', 'w'), WEBrick::AccessLog::COMBINED_LOG_FORMAT]]
  )
  # Required for CGI on Windows; unnecessary on Unix/Linux
  server.config.store(:CGIInterpreter, WEBrick::HTTPServlet::CGIHandler::Ruby.to_s)
  server.mount("/call", Call)
  # Trap signals so as to shutdown cleanly
  ['TERM', 'INT'].each do |signal|
    trap(signal) { server.shutdown }
  end
  # Start the server and block on input
  server.start
end

Server startet per [~] ruby webserver.rb.
url wäre dann z.B. http://localhost:8080/call/?action=fortune.
Die action wird dann ausgeführt und die Ausgabe des Befehls in die Website geschrieben:
Antonym, n.:
The opposite of the word you're trying to think of.

cu
 
Zuletzt bearbeitet:
Ja, ich kann kein Ruby. Wenn ich Änderungen durchführen muss, kann ich diese nicht machen.

Bash wäre mir wesentlich angenehmer da es auch portabler ist. Gibt es da noch ein Beispiel-Skript?

Sicherheit ist völlig irrelevant da das sowieso nur bei mir lokal laufen würde.

Danke ;)
 
Code:
Bash wäre mir wesentlich angenehmer da es auch portabler ist.

Das halte ich für ein Gerücht :)

Mit Bash kann ich dir hier nicht dienen. Da das Rubyskript einfach die Ausgabe des Shell-Befehls zurückliefert, besteht imho so gut wie keine Notwendigkeit, Änderungen am Rubyskript selbst durchzuführen. Es leitet ja nur den Befehl durch. Niemand hindert dich, ein Shellskript zu schreiben, das die komplette HTML-Ausgabe erledigt und zurückliefert. Vielleicht kann jemand anderes helfen.

cu
 

Ähnliche Themen

Diveres Anfängerfragen

Server-Monitoring mit RRDTool

Zurück
Oben