Scripte Compilieren. Geht das??
Hallo zusammen, ich habe ein einfaches Script geschrieben. Da steht z.B. drin: rcsmb reload rm -R *.tmp usw Natürlich ist das jetzt nur ein Beispiel. Kann ich so eine Datei Compilieren, so das derjenige, der es starten muß nicht sehen kann, was in dem Script steht??? (Natürlich auch wenn er rootig ist) Background: Es habe verschiedene User zugriff auf diesem Server und nicht jeder darf sehen was bestimmte Scripte alles so machen. Währ echt klasse wenn mir einer da weiter helfen kann. Danke schonmal.... So long Stefan
On Tuesday 03 September 2002 22:32, Stefan Eggert wrote:
Natürlich ist das jetzt nur ein Beispiel. Kann ich so eine Datei Compilieren, so das derjenige, der es starten muß nicht sehen kann, was in dem Script steht??? (Natürlich auch wenn er rootig ist)
Ein Skript kann man nicht kompilieren. Wenn Du das Lesen verhindern willst, musst Du ein echtes Binary bauen. Auch ein Ändern der Zugriffsrechte (z.B. auf --x--x--x) nützt nichts. Dann kann das Skript nicht mehr ausgeführt werden. Genaugenommen wird ja auch gar nicht das Skript ausgeführt, sondern eine darin definierte Shell, die dann das Skript einliest und die darin enthaltenen Befehle ausführt.
Background: Es habe verschiedene User zugriff auf diesem Server und nicht jeder darf sehen was bestimmte Scripte alles so machen. Währ echt klasse wenn mir einer da weiter helfen kann.
Ich habe im Moment ein paar Schwierigkeiten, mir einen Use-Case für dieses Problem vorzustellen ... Heiner -- heiner at kflog dot org GnuPG - Key: E05AEAFC Fingerprint: 257A DFBF 4977 4585 77A0 3509 973B 92AA E05A EAFC
Heiner Lamprecht wrote:
On Tuesday 03 September 2002 22:32, Stefan Eggert wrote:
Natürlich ist das jetzt nur ein Beispiel. Kann ich so eine Datei Compilieren, so das derjenige, der es starten muß nicht sehen kann, was in dem Script steht??? (Natürlich auch wenn er rootig ist)
Ein Skript kann man nicht kompilieren. Wenn Du das Lesen verhindern willst, musst Du ein echtes Binary bauen. Auch ein Ändern der Zugriffsrechte (z.B. auf --x--x--x) nützt nichts. Dann kann das Skript nicht mehr ausgeführt werden. Genaugenommen wird ja auch gar nicht das Skript ausgeführt, sondern eine darin definierte Shell, die dann das Skript einliest und die darin enthaltenen Befehle ausführt.
Richtig. Wenn ich nun aber ein Programm in C schreibe, u. es compiliere, muß es gehen. Problem nur ich kann kein C. Deswegen wollte ich es mal so probieren. Thats the problem. Stefan
On Die, 03 Sep 2002 at 22:49 (+0200), Stefan Eggert wrote:
Heiner Lamprecht wrote: [Warum man Skripte nicht kompilieren kann]
Richtig. Wenn ich nun aber ein Programm in C schreibe, u. es compiliere, muß es gehen. Problem nur ich kann kein C. Deswegen wollte ich es mal so probieren. Thats the problem.
Du hast 2 Möglichkeiten, Dein Ziel zu erreichen: 1. Du lernst C oder eine andere Compilersprache (C++, Java, ...) 2. Du beschäftigst Dich mal näher mit dem Thema *Rechte unter Linux* Zu 2: Wenn Du nicht willst, dass jeder Anwender jedes Script einsehen kann, dann kannst Du Benutzer und Scripte einzelnen Gruppen zuordnen und _nur_ diesen Gruppen dann r-x Rechte auf die Dateien geben. Du kannst nicht verhindern, dass ein Anwender sieht, was in dem Script passiert, dass er startet. Eine Ausnahme wäre mit Punkt 1 zu realisieren: In C einen Wrapper schreiben, der das Script mit einer anderen User-ID startet. Jan
Jan Trippler wrote:
On Die, 03 Sep 2002 at 22:49 (+0200), Stefan Eggert wrote:
Heiner Lamprecht wrote:
[Warum man Skripte nicht kompilieren kann]
Richtig. Wenn ich nun aber ein Programm in C schreibe, u. es compiliere, muß es gehen. Problem nur ich kann kein C. Deswegen wollte ich es mal so probieren. Thats the problem.
Du hast 2 Möglichkeiten, Dein Ziel zu erreichen:
1. Du lernst C oder eine andere Compilersprache (C++, Java, ...)
Hatte ich ja gemacht. Habe nur leider in der Schule mehr geschlafen als alles andere :-(
2. Du beschäftigst Dich mal näher mit dem Thema *Rechte unter Linux*
Denke das kann ich mir sparen, denn das kann ich zu genüge.
Zu 2: Wenn Du nicht willst, dass jeder Anwender jedes Script einsehen kann, dann kannst Du Benutzer und Scripte einzelnen Gruppen zuordnen und _nur_ diesen Gruppen dann r-x Rechte auf die Dateien geben. Du kannst nicht verhindern, dass ein Anwender sieht, was in dem Script passiert, dass er startet.
Aber genau das MUSS ich. Deswegen habe ich ja auch dieses kleine C Programm. Es geht auch nicht genau darum das er nicht sieht was gestartet wird. sondern darum, das er nicht sieht WIE (mit welchem Komando, Parameter usw) es gestartet wird.
Eine Ausnahme wäre mit Punkt 1 zu realisieren: In C einen Wrapper schreiben, der das Script mit einer anderen User-ID startet.
Oder das Komando einfach in das C Programm einbinden. Und genau das mache (versuche) ich ja gerade. Stefan
* Stefan Eggert schrieb am 04.Sep.2002:
Jan Trippler wrote:
Zu 2: Wenn Du nicht willst, dass jeder Anwender jedes Script einsehen kann, dann kannst Du Benutzer und Scripte einzelnen Gruppen zuordnen und _nur_ diesen Gruppen dann r-x Rechte auf die Dateien geben. Du kannst nicht verhindern, dass ein Anwender sieht, was in dem Script passiert, dass er startet.
Aber genau das MUSS ich. Deswegen habe ich ja auch dieses kleine C Programm. Es geht auch nicht genau darum das er nicht sieht was gestartet wird. sondern darum, das er nicht sieht WIE (mit welchem Komando, Parameter usw) es gestartet wird.
Wirst Du nicht vermeiden können. Der Anwender braucht doch blos ps oder top aufzurufen, und sieht welche Prozesse laufen. Wenn er den Befehl mit strace aufruft, dann sieht er sämtliche systemaufrufe, ergo auch den execve, der ein anderes Programm aufruft. Wenn es kompiliert ist, so gibt es auch decompiler. Da das Program nicht so sonderlich schwer ist, wird der User das auch verstehen können. Habe auch nicht verstanden, wofür das gut sein soll. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Bernd Brodesser schrieb:
* Stefan Eggert schrieb am 04.Sep.2002:
Jan Trippler wrote:
Zu 2: Wenn Du nicht willst, dass jeder Anwender jedes Script einsehen kann, dann kannst Du Benutzer und Scripte einzelnen Gruppen zuordnen und _nur_ diesen Gruppen dann r-x Rechte auf die Dateien geben. Du kannst nicht verhindern, dass ein Anwender sieht, was in dem Script passiert, dass er startet.
Aber genau das MUSS ich. Deswegen habe ich ja auch dieses kleine C Programm. Es geht auch nicht genau darum das er nicht sieht was gestartet wird. sondern darum, das er nicht sieht WIE (mit welchem Komando, Parameter usw) es gestartet wird.
Wirst Du nicht vermeiden können. Der Anwender braucht doch blos ps oder top aufzurufen, und sieht welche Prozesse laufen. Wenn er den Befehl mit strace aufruft, dann sieht er sämtliche systemaufrufe, ergo auch den execve, der ein anderes Programm aufruft. Wenn es kompiliert ist, so gibt es auch decompiler. Da das Program nicht so sonderlich schwer ist, wird der User das auch verstehen können.
Habe auch nicht verstanden, wofür das gut sein soll.
Bernd
Aber ein Dau wird nciht auf die Idee kommen. Hat wirklich seinen Grund ;-) Stefan
* Stefan Eggert schrieb am 04.Sep.2002:
Bernd Brodesser schrieb:
Wirst Du nicht vermeiden können. Der Anwender braucht doch blos ps oder top aufzurufen, und sieht welche Prozesse laufen. Wenn er den Befehl mit strace aufruft, dann sieht er sämtliche systemaufrufe, ergo auch den execve, der ein anderes Programm aufruft. Wenn es kompiliert ist, so gibt es auch decompiler. Da das Program nicht so sonderlich schwer ist, wird der User das auch verstehen können.
Habe auch nicht verstanden, wofür das gut sein soll.
Aber ein Dau wird nciht auf die Idee kommen.
Security by Obscurity hat noch nie funktioniert.
Hat wirklich seinen Grund ;-)
Ach, und welchen? Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
* Stefan Eggert schrieb am Mittwoch, 2002-09-04:
Es geht auch nicht genau darum das er nicht sieht was gestartet wird. sondern darum, das er nicht sieht WIE (mit welchem Komando, Parameter usw) es gestartet wird.
Das sieht der User dann spätestens mittels strace: $ strace -fve trace=execve c-wrapper-um-skript-mit-geheimen-parametern -- Christian Ullrich Registrierter Linux-User #125183 "Deliver."
Am Mittwoch, 4. September 2002 00:00 schrieb Jan Trippler:
On Die, 03 Sep 2002 at 22:49 (+0200), Stefan Eggert wrote:
Heiner Lamprecht wrote: [Warum man Skripte nicht kompilieren kann]
Richtig. Wenn ich nun aber ein Programm in C schreibe, u. es compiliere, muß es gehen. Problem nur ich kann kein C. Deswegen wollte ich es mal so probieren. Thats the problem.
Du hast 2 Möglichkeiten, Dein Ziel zu erreichen:
1. Du lernst C oder eine andere Compilersprache (C++, Java, ...) 2. Du beschäftigst Dich mal näher mit dem Thema *Rechte unter Linux*
3. Man lernt tcl und besorgt sich den Kompiler, den es dafür geben soll tcl/tk ist eine Scriptsprache, mit der man auch Programme mit GUI schreiben kann. Da kannst Du ohne kompilieren so lange testen, bis es läuft und kannst es dann übersetzen. -- mfg Peter Küchler, Planungsverband Ballungsraum Frankfurt/Rhein-Main
Am Mit, 04 Sep 2002 schrieb Peter Kuechler:
Am Mittwoch, 4. September 2002 00:00 schrieb Jan Trippler:
On Die, 03 Sep 2002 at 22:49 (+0200), Stefan Eggert wrote:
Heiner Lamprecht wrote: [Warum man Skripte nicht kompilieren kann]
Richtig. Wenn ich nun aber ein Programm in C schreibe, u. es compiliere, muß es gehen. Problem nur ich kann kein C. Deswegen wollte ich es mal so probieren. Thats the problem.
Du hast 2 Möglichkeiten, Dein Ziel zu erreichen:
1. Du lernst C oder eine andere Compilersprache (C++, Java, ...) 2. Du beschäftigst Dich mal näher mit dem Thema *Rechte unter Linux*
3. Man lernt tcl und besorgt sich den Kompiler, den es dafür geben soll
tcl/tk ist eine Scriptsprache, mit der man auch Programme mit GUI schreiben kann. Da kannst Du ohne kompilieren so lange testen, bis es läuft und kannst es dann übersetzen.
Das gleiche geht übrigens auch mit perl, auch dafür gibt es einen Kompiler (weiß gar nicht mehr, ob das erst nach C übersetzt und dann kompiliert wurde, oder ob das direkt ging). Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
On Wed, 04 Sep 2002 at 09:11 (+0200), Christoph Maurer wrote:
Am Mit, 04 Sep 2002 schrieb Peter Kuechler:
Am Mittwoch, 4. September 2002 00:00 schrieb Jan Trippler:
On Die, 03 Sep 2002 at 22:49 (+0200), Stefan Eggert wrote:
Heiner Lamprecht wrote: [Warum man Skripte nicht kompilieren kann]
Richtig. Wenn ich nun aber ein Programm in C schreibe, u. es compiliere, muß es gehen. Problem nur ich kann kein C. Deswegen wollte ich es mal so probieren. Thats the problem.
Du hast 2 Möglichkeiten, Dein Ziel zu erreichen:
1. Du lernst C oder eine andere Compilersprache (C++, Java, ...) 2. Du beschäftigst Dich mal näher mit dem Thema *Rechte unter Linux*
3. Man lernt tcl und besorgt sich den Kompiler, den es dafür geben soll
tcl/tk ist eine Scriptsprache, mit der man auch Programme mit GUI schreiben kann. Da kannst Du ohne kompilieren so lange testen, bis es läuft und kannst es dann übersetzen.
Das gleiche geht übrigens auch mit perl, auch dafür gibt es einen Kompiler (weiß gar nicht mehr, ob das erst nach C übersetzt und dann kompiliert wurde, oder ob das direkt ging).
Der übersetzt erst nach C. Die Binarys werden riesengroß (um die 600 kByte), weil der halbe Perl-Interpreter drinsteckt und außerdem geht das teilweise out-of-the-box nur mit einfacheren Skripten gut. In Perl 5.6 ist dieses Feature auch noch mehr experimentell, weiß nicht, wie's mit der 5.8 aussieht. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Es wird Wagen geben, die von keinem Tier gezogen werden und mit unglaublicher Gewalt daherfahren. -- Leonardo da Vinci
Ja, indirekt geht das schon.
Es ist zwar vielleicht primitiv, aber macht das Richtige.
Man schreibe ein "Programm" z.B. meinjob.c
----
#include
Hallo zusammen,
ich habe ein einfaches Script geschrieben. Da steht z.B. drin:
rcsmb reload rm -R *.tmp usw
Natürlich ist das jetzt nur ein Beispiel. Kann ich so eine Datei Compilieren, so das derjenige, der es starten muß nicht sehen kann, was in dem Script steht??? (Natürlich auch wenn er rootig ist)
Background: Es habe verschiedene User zugriff auf diesem Server und nicht jeder darf sehen was bestimmte Scripte alles so machen. Währ echt klasse wenn mir einer da weiter helfen kann.
Danke schonmal.... So long Stefan
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
-- SYSTEMBERATUNG Ing. Martin Irrgang Engerthstraße 196 1020 Wien mail: office@systemberatung.at http://systemberatung.at FAX: +43 1 961 8210 DVR: 0924806
Martin Irrgang wrote:
Ja, indirekt geht das schon.
Es ist zwar vielleicht primitiv, aber macht das Richtige.
Man schreibe ein "Programm" z.B. meinjob.c
---- #include
void main( int ac, char **av, char **ep) { system("erstes Kommando"); system("zweites Kommando"); system("drittes Kommando");
Hallo Martin,
habe folgenses Programm mal zum Test Compiliert
#include
Hi, Am 03.09.2002 (23:24) schrieb Stefan Eggert:
Diese Fehler kamen: beim Compilieren:
stefan@linux:~> make otto cc otto.c -o otto otto.c: In function `main': otto.c:3: warning: return type of `main' is not `int'
Der gcc erwartet eine main mit int als return Wert. Das ist nur eine Warnung, und wie Du siehst, wird die Applikation dennoch überstzt. Falls es Dich zusehr stört, pass die main Funktion einfach an.
Und wenn ich das Programm starten will kommt: stefan@linux:~> ./otto sh: rcsmb: command not found
Als normaler Nutzer? Ich schätze das steht nur bei root im Pfad. Also entweder direkt (klappt aber als lokaler Nutzer auch nicht) oder mit Dingen wie suid arbeiten. Aber vorsicht. Ciao Sascha -- http://www.livingit.de linux at programmers-world dot com http://www.mobile-bookmarks.info http://www.programmers-world.com Der graduelle Verfall des bewohnten Körpers strapaziert im normalen Verlauf der Dinge kaum den Geist. -- Sir Peter Ustinov
otto.c:3: warning: return type of `main' is not `int'
Der gcc erwartet eine main mit int als return Wert. Das ist nur eine Warnung, und wie Du siehst, wird die Applikation dennoch überstzt. Falls es Dich zusehr stört, pass die main Funktion einfach an.
Neeee, bin froh das es klappt, dann lasse ich es auch so ;-)
Und wenn ich das Programm starten will kommt: stefan@linux:~> ./otto sh: rcsmb: command not found
Als normaler Nutzer? Ich schätze das steht nur bei root im Pfad. Also entweder direkt (klappt aber als lokaler Nutzer auch nicht) oder mit Dingen wie suid arbeiten. Aber vorsicht.
Ist schon ein bissle spät, sorry. Hatte vergessen mich Rootig zu machen ;-) Aber eine kleine Frage habe ich noch: Ich möchte gerne eine Zeile auf dem Bildschirm schmeißen. Mit Printf geht das aber irgendwie nicht. Weißt Du was ich in diesem Code einfügen muß??? Und: Kann ich auch dieses Programm mit Variabeln starten??? Z.b: ./test hugo Im Code steht dann z.B. system("useradd %x"); Das system sollte dann einen User namens Hugo anlegen. Oder kann ich alternativ im Code auch eine Abfrage Programmieren die folgendes ausgibt: ./test Bitte Usernamen eingeben: Das währe natürlich besser als die Variabeln geschichte. Danke schonmal. Sorry überigend wenn ich soooo viel frage, aber wie gesagt, ich kann kein c. Stefan
-----Original Message----- From: Stefan Eggert [mailto:stefan.linux.privat@gmx.de] Sent: Wednesday, September 04, 2002 12:07 AM To: Sascha Andres Cc: suse-linux@suse.com Subject: Re: Scripte Compilieren. Geht das??
otto.c:3: warning: return type of `main' is not `int'
Der gcc erwartet eine main mit int als return Wert. Das ist nur eine Warnung, und wie Du siehst, wird die Applikation dennoch überstzt. Falls es Dich zusehr stört, pass die main Funktion einfach an.
Neeee, bin froh das es klappt, dann lasse ich es auch so ;-)
Und wenn ich das Programm starten will kommt: stefan@linux:~> ./otto sh: rcsmb: command not found
Als normaler Nutzer? Ich schätze das steht nur bei root im
Pfad. Also
entweder direkt (klappt aber als lokaler Nutzer auch nicht) oder mit Dingen wie suid arbeiten. Aber vorsicht.
Ist schon ein bissle spät, sorry. Hatte vergessen mich Rootig zu machen ;-)
Aber eine kleine Frage habe ich noch: Ich möchte gerne eine Zeile auf dem Bildschirm schmeißen. Mit Printf geht das aber irgendwie nicht. Weißt Du was ich in diesem Code einfügen muß???
Und: Kann ich auch dieses Programm mit Variabeln starten??? *sourcecode von turnierscript rauskram*
int main (int argc, char *argv[]) { // mit argv[1 bis n] kannst du dann auf die übergebenen // Parameter zugreifen }
Z.b:
./test hugo
Im Code steht dann z.B.
system("useradd %x");
Das system sollte dann einen User namens Hugo anlegen. Oder kann ich alternativ im Code auch eine Abfrage Programmieren die folgendes ausgibt:
./test Bitte Usernamen eingeben:
uh, mit wieviel Jahren kann man alzheimer bekommen ? *g* verdammt, ich glaub ich hab sie ;) mh, fällt mir grad nich ein... unter c++ isses jedenfalls cin und cout und du brauchst dafür die <stdio> das sähe dann so aus: cout << "Bitte Usernamen eingeben:"; cin >> variableMitUsernamen;
Das währe natürlich besser als die Variabeln geschichte.
wenn du ein passwort übergeben musst, ist die 2te Variante besser...
Danke schonmal. Sorry überigend wenn ich soooo viel frage, aber wie gesagt, ich kann kein c.
wird halt langsam OT! aber wir begnügen uns damit, dass das programm unter SuSE Linux kompiliert und verwendet wird ;) Mfg André
mh, fällt mir grad nich ein... unter c++ isses jedenfalls cin und cout und du brauchst dafür die <stdio>
habe es mit scanf gemacht. Frage ist nur ob ich die Variabel auch in der
Zeile System verwenden kann.
So siehts zz aus:
#include
Stefan Eggert wrote:
mh, fällt mir grad nich ein... unter c++ isses jedenfalls cin und cout und du brauchst dafür die <stdio>
habe es mit scanf gemacht. Frage ist nur ob ich die Variabel auch in der Zeile System verwenden kann. So siehts zz aus:
#include
void main( int ac, char **av, char **ep) { int name; printf ("\n Username: \n"); scanf ("%i",&name); system("");
Jetzt muß ich das noch in der letzten Zeile so umforkeln: system("useradd &name";
Macht er leider nicht. Er will das &name nicht als oben definierte Variabel schlucken, sondern als &name. Was nun tun? stefan
* Stefan Eggert schrieb am Mittwoch, 2002-09-04:
system("useradd &name";
Macht er leider nicht. Er will das &name nicht als oben definierte Variabel schlucken, sondern als &name.
char cmd[256]; snprintf(cmd, sizeof(cmd)-1, "useradd %d", name); system(cmd); Übrigens sind deine Benutzernamen numerisch. Ist das beabsichtigt? -- Christian Ullrich Registrierter Linux-User #125183 "Deliver."
Christian Ullrich schrieb:
* Stefan Eggert schrieb am Mittwoch, 2002-09-04:
system("useradd &name";
Macht er leider nicht. Er will das &name nicht als oben definierte Variabel schlucken, sondern als &name.
char cmd[256]; snprintf(cmd, sizeof(cmd)-1, "useradd %d", name); system(cmd);
Übrigens sind deine Benutzernamen numerisch. Ist das beabsichtigt?
Folgender Fehler kommt:
Option 1 ist keine gültige Option
für useradd.
Habe es jetzt so abgeändert:
#include
* Stefan Eggert schrieb am Mittwoch, 2002-09-04:
Christian Ullrich schrieb:
Übrigens sind deine Benutzernamen numerisch. Ist das beabsichtigt?
Folgender Fehler kommt: Option 1 ist keine gültige Option für useradd.
Wie gesagt, deine Benutzernamen sind numerisch, weil du sie woanders im Thread mit scanf("%i"...) einliest. Und da numerische Benutzernamen nicht zulässig sind, beschwert sich useradd. Macht es auch, wenn du es direkt auf der Konsole aufrufst.
Habe es jetzt so abgeändert:
[...]
char name[5]; [...] scanf ("%i",&name);
Das schreibt eine Zahl in das erste Byte von name.
snprintf(cmd, sizeof(cmd)-1, "useradd %d", name);
Und hier wird die Adresse von name[0] eingesetzt, die im Zweifel eine zehnstellige Zahl sonstwo im Adreßraum ist. Ein Vorschlag: Mach' name größer und verwende statt %i und %d jeweils %s. Oder laß' es ganz bleiben. Die Sinnlosigkeit des Unterfangens ist ja mittlerweile hinreichend ausgebreitet worden. -- Christian Ullrich Registrierter Linux-User #125183 "Deliver."
On Tue, 03 Sep 2002 at 23:24 (+0200), Stefan Eggert wrote:
Martin Irrgang wrote:
Ja, indirekt geht das schon.
Es ist zwar vielleicht primitiv, aber macht das Richtige.
Man schreibe ein "Programm" z.B. meinjob.c
---- #include
void main( int ac, char **av, char **ep) { system("erstes Kommando"); system("zweites Kommando"); system("drittes Kommando");
Einige Anmerkungen:
1. Die main-Funktion hat nach ANSI einen int-Wert zurückzugeben.
2. system steckt in stlib.h und nicht in stdio.h.
3. Diese Parameter für die Return-Funktion habe ich noch nie gesehen,
ich kenne nur (int argc, char *argv[]). Wofür soll bei Dir der
dritte gut sein?
4. Wenn man die Parameter eh nicht verwendet, kann man sie gleich
weglassen.
Folgendes Programm würde immerhin ohne Warnungen durchkompilieren:
==============================
#include
* Bernhard Walle schrieb am 04.Sep.2002:
On Tue, 03 Sep 2002 at 23:24 (+0200), Stefan Eggert wrote:
void main( int ac, char **av, char **ep)
3. Diese Parameter für die Return-Funktion habe ich noch nie gesehen, ich kenne nur (int argc, char *argv[]). Wofür soll bei Dir der dritte gut sein?
Du meinst main-Funktion. Im dritten ist das Enviroment, in der Form VAR=value Das natürlich in einem Array. Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Der dritte Parameter ist der Environment-Pointer. Hält also den Zugriff auf die Liste der ENV-Variablen. Bin nicht sicher, ob das ANSI-C ist, aber so gut bin ich mit C auch nicht. Wenn man das dumpen des Binary verhindern will, kann man eventuell noch mit "crypt"-Funktionen arbeiten. Das müsste man sich ansehen. Aber so geheime Funktionen sollte man nicht einbauen - ist gegen den Open Software Gedanken. Gruß, Martin Irrgang Bernhard Walle schrieb:
On Tue, 03 Sep 2002 at 23:24 (+0200), Stefan Eggert wrote:
Martin Irrgang wrote:
Ja, indirekt geht das schon.
Es ist zwar vielleicht primitiv, aber macht das Richtige.
Man schreibe ein "Programm" z.B. meinjob.c
---- #include
void main( int ac, char **av, char **ep) { system("erstes Kommando"); system("zweites Kommando"); system("drittes Kommando"); Einige Anmerkungen:
1. Die main-Funktion hat nach ANSI einen int-Wert zurückzugeben. 2. system steckt in stlib.h und nicht in stdio.h. 3. Diese Parameter für die Return-Funktion habe ich noch nie gesehen, ich kenne nur (int argc, char *argv[]). Wofür soll bei Dir der dritte gut sein? 4. Wenn man die Parameter eh nicht verwendet, kann man sie gleich weglassen.
Folgendes Programm würde immerhin ohne Warnungen durchkompilieren:
============================== #include
int main(void) { system("erstes Kommando");
return(0); } ==============================
Übirgens mit gcc -W -Wall -o prog prog.c kompiliert.
Außerdem bringt das Ganze sowieso nicht viel: Wenn man sich mal das Binary anschaut, stehen die Kommandos schön nebeneinander drin:
erstes Kommando^@zweites Kommando^@drittes Kommando
Das einzig schwierige ist, den Anfang zu finden. Wenn man nun nach einem häufig vorkommenden Kommando wie "rm" sucht, hat man eigentlich alles, was man braucht.
Gruß, Bernhard
-- _________ http://www.bwalle.de _________________________________________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man lernen kann, möglichst früh zu begehen. -- Sir Winston Churchil
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
-- SYSTEMBERATUNG Ing. Martin Irrgang Engerthstraße 196 1020 Wien mail: office@systemberatung.at http://systemberatung.at FAX: +43 1 961 8210 DVR: 0924806
Ja, bitte um Entschuldigung. Ich habe es schon selbst ausprobiert, das Ergebnis dann aber nicht ins Mail übernommen. Das "void" muß vor dem "main" in dieser Version Compiler WEG, dann gehts. Gruß, Martin Irrgang Stefan Eggert schrieb:
Martin Irrgang wrote:
Ja, indirekt geht das schon.
Es ist zwar vielleicht primitiv, aber macht das Richtige.
Man schreibe ein "Programm" z.B. meinjob.c
---- #include
void main( int ac, char **av, char **ep) { system("erstes Kommando"); system("zweites Kommando"); system("drittes Kommando"); Hallo Martin,
habe folgenses Programm mal zum Test Compiliert
#include
void main( int ac, char **av, char **ep) { system("rcsmb start"); } Diese Fehler kamen: beim Compilieren:
stefan@linux:~> make otto cc otto.c -o otto otto.c: In function `main': otto.c:3: warning: return type of `main' is not `int'
Und wenn ich das Programm starten will kommt: stefan@linux:~> ./otto sh: rcsmb: command not found
Weißt Du da vielleicht noch einen kleinen Tip???
Danke schonmal, Stefan
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
-- SYSTEMBERATUNG Ing. Martin Irrgang Engerthstraße 196 1020 Wien mail: office@systemberatung.at http://systemberatung.at FAX: +43 1 961 8210 DVR: 0924806
Moin Moin,
From: "Stefan Eggert"
ich habe ein einfaches Script geschrieben. Da steht z.B. drin:
rcsmb reload rm -R *.tmp usw
Natürlich ist das jetzt nur ein Beispiel. Kann ich so eine Datei Compilieren, so das derjenige, der es starten muß nicht sehen kann, was in dem Script steht??? (Natürlich auch wenn er rootig ist)
Mit Perl kannst Du das machen, ob die bash das kann glaube ich eher weniger. perldoc perlcc... Ciao Andre
participants (14)
-
Andre Frimberger
-
Andre Heine
-
B.Brodesser@t-online.de
-
Bernhard Walle
-
Christian Ullrich
-
Christoph Maurer
-
Heiner Lamprecht
-
Jan.Trippler@t-online.de
-
Martin Irrgang
-
memsys@t-online.de
-
Peter Kuechler
-
Sascha Andres
-
Stefan Eggert
-
Stefan Eggert