butana
Anmeldungsdatum: 24. Mai 2009
Beiträge: Zähle...
|
Hallo, ich bin ein ziemlicher Linuxneuling und verwende es noch nicht allzu lange. Der Hauptgrund fuer meinen Umstieg (von Windows) ist die Moeglichkeit viele Dinge selbst erledigen zu koennen. Ich habe mir eine iptables Firewall eingerichtet und ein kleines Skript geschrieben mit dem ich Ausnahmeregeln hinzufuegen kann. Die eingabe von z.B. ./fireallow.sh forum.ubuntuusers.de ermoeglicht es mir jetzt auf dieser Seite zu sein. Soweit so gut. Nun da ich zu faul bin aus dem copy paste text jedes mal das http:// sowie die subfolder zu entfernen habe ich es so angepasst. trimmed_address="`echo $1 | sed s%http://%% | cut -d "/" --fields=1`" dann wird $trimmed_address iptables uebergeben was auch fuer die meisten urls funktioniert. nur bei seiten mit sonderzeichen wie & (google suche, allgemein php zeugs) geht das nicht. die muss ich extra immer in single quotes uebergeben, was mir zu aufwendig ist. Nun meine Fragen: * Gibt es eine moeglichkeit bash mitzuteilen das fuer das skript fireallow.sh automatisch single quotes verwendet werden bzw. das alle "sonderzeichen" deaktiviert sind und als reine strings uebergeben werden? * Wie geht es das ich mein skript nur einmal starte und immer urls eingeben kann gefolgt von enter ohne jedesmal das skript neu aufrufen zu muessen? * Geht das "trimmen" der urls (die als $1 uebergeben werden) auch irgendwie eleganter als oben geschrieben? das echo stoert mich irgendwie 😉 Ich hoffe ich konnte mich einigermaßen verstaendlich ausdruecken und wuerde mich sehr freuen wenn ihr mir helfen koenntet Viele Grueße butana
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
butana schrieb: * Gibt es eine moeglichkeit bash mitzuteilen das fuer das skript fireallow.sh automatisch single quotes verwendet werden bzw. das alle "sonderzeichen" deaktiviert sind und als reine strings uebergeben werden?
Nein.
* Wie geht es das ich mein skript nur einmal starte und immer urls eingeben kann gefolgt von enter ohne jedesmal das skript neu aufrufen zu muessen?
Das lässt sich mithilfe des Befehls read umsetzen. Näheres dazu steht in der Dokumentation der bash. Nebenbei bemerkt: Hast du den Artikel über Personal Firewalls gelesen?
|
butana
(Themenstarter)
Anmeldungsdatum: 24. Mai 2009
Beiträge: 18
|
read: genau den Befehl habe ich gesucht! Danke. Werde das gleich ausprobieren. Vielleicht "frisst" der ja auch meine Sonderzeichen. 😉 Zu deinem knappen "Nein": Das überrascht mich doch ein wenig, dass es in der bash dafür gar keine Möglichkeit gibt, ohne jetzt in den Quelltexten rumzupfuschen. Kann man einem User denn wenigstens komplett Escape-Sequenzen bzw. Sonderzeichen (ihr wisst, was ich mein) verbieten? Zum Firewall-Link: Den Artikel kannte ich bis jetzt nicht. Ich persönlich möchte eine Desktop-Firewall (GUI nicht notwendig) haben, da ich die Kontrolle darüber haben möchte, mit welchen IPs mein Computer Verbindungen aufbaut. Für den Standard-Desktopuser ist das natürlich zu aufwendig.
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
butana schrieb: Kann man einem User denn wenigstens komplett Escape-Sequenzen bzw. Sonderzeichen (ihr wisst, was ich mein) verbieten?
Nein. Die Syntax der Bash ist festgelegt und kann in dieser Hinsicht nicht durch die Konfiguration verändert werden.
|
Jacore
Anmeldungsdatum: 25. Mai 2008
Beiträge: 550
|
Es wäre auch recht unpraktisch, wenn die Bash die Init-Scripte - und was weiß ich nicht alles - nicht mehr interpretieren kann. 😉
|
butana
(Themenstarter)
Anmeldungsdatum: 24. Mai 2009
Beiträge: 18
|
Wenn man das einzelnen Usern verbieten koennte waere das sehr wohl praktisch! butana schrieb: Kann man einem User denn wenigstens komplett Escape-Sequenzen bzw. Sonderzeichen (ihr wisst, was ich mein) verbieten?
Noch eine andere Frage: Wie kann ich denn der bash mitteilen, dass ein bestimmter Befehl immer mit festen command line arguments gestartet wird?
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
butana schrieb: Wenn man das einzelnen Usern verbieten koennte waere das sehr wohl praktisch!
Es wäre äußerst unpraktisch, wenn man die Ausgabe eines Befehls nicht mehr umleiten kann oder den Befehl nicht mehr im Hintergrund ausführen könnte, nur weil der Admin meint, der Nutzer könne sich die zwei Anführungszeichen sparen.
Noch eine andere Frage: Wie kann ich denn der bash mitteilen, dass ein bestimmter Befehl immer mit festen command line arguments gestartet wird?
Du kannst ein Alias definieren, näheres dazu steht in der Bash-Dokumentation.
|
butana
(Themenstarter)
Anmeldungsdatum: 24. Mai 2009
Beiträge: 18
|
Lunar schrieb: Du kannst ein Alias definieren, näheres dazu steht in der Bash-Dokumentation.
Hab's gefunden. Danke! Lunar schrieb: Es wäre äußerst unpraktisch, wenn man die Ausgabe eines Befehls nicht mehr umleiten kann oder den Befehl nicht mehr im Hintergrund ausführen könnte, nur weil der Admin meint, der Nutzer könne sich die zwei Anführungszeichen sparen.
Ähm... also biologisch gesehen gibt es nur einen Benutzer - nämlich mich. Ich will niemanden bevormunden, keine Sorge 😉 Ich fände es nach wie vor praktisch, wenn ich einen "firewall" User anlegen könnte, der wirklich 'nichts anderes' machen darf als dieses eine Skript auszuführen. Die Sicherheit von Linux basiert doch größtenteils gerade auf dem Fakt, verschiedene Nutzer anlegen zu können, die wirklich nur ein Mindestmaß an Befugnissen besitzen, die für die vorgesehenen Aufgaben notwendig sind oder täusche ich mich da? Am liebsten wäre es mir sogar, dass dieser Benutzer nach der Anmeldung sich automatisch in einer chroot Umgebung befindet. Über Tipps/Links wie man das erreichen kann (auch über eine andere Methode) würde ich mich sehr freuen.
|
yeahns
Anmeldungsdatum: 20. September 2007
Beiträge: 50
|
Ich fände es nach wie vor praktisch, wenn ich einen "firewall" User anlegen könnte, der wirklich 'nichts anderes' machen darf als dieses eine Skript auszuführen. Die Sicherheit von Linux basiert doch größtenteils gerade auf dem Fakt, verschiedene Nutzer anlegen zu können, die wirklich nur ein Mindestmaß an Befugnissen besitzen, die für die vorgesehenen Aufgaben notwendig sind oder täusche ich mich da?
Da du ja recht fix zu sein scheinst mit dem Einfinden in das neue Betriebssystem, schlage ich vor, du liest erst noch ein wenig über den Aufbau und so weiter, bevor du versuchst völlig neue Sicherheitskonzepte zu entwickeln 😉. Über die Unix-Dateirechte ist schon genug Sicherheit definiert, sodass ein Standardbenutzer wirklich gar nichts kaputt machen kann. Schreibrechte hast du auf einem frischen System normalerweise nur in deinem Homedir und auf /tmp/. Da kann also wirklich nichts schiefgehen. Man könnte noch einen User definieren, der nicht zum Superuser werden kann, aber ein ausreichend sicheres Passwort gegeben sollte das auch erst mal nicht deine Sorge sein. Ach so, falls es dich stört, dass du root werden musst um dein Skript auszuführen: Ich denke nicht, dass du es einem unprivilegierten Nutzer gestatten solltest, ein bestimmendes Systemtool wie iptables zu nutzen. Und es ist auch fest in die administrativen Befehle einkodiert, dass diese sich nur vom Benutzer root steuern lassen. Und selbst, wenn du diese Eigenschaft aus den Programmen entfernen würdest, vermute ich, dass du trotzdem nicht in den Kernel eindringen kannst um die entsprechenden Dinge zu erledigen. Korrigiert mich, wenn ich falsch liege.
|
butana
(Themenstarter)
Anmeldungsdatum: 24. Mai 2009
Beiträge: 18
|
yeahns schrieb: Ach so, falls es dich stört, dass du root werden musst um dein Skript auszuführen: Ich denke nicht, dass du es einem unprivilegierten Nutzer gestatten solltest, ein bestimmendes Systemtool wie iptables zu nutzen.
Ich habe dem firewall user per sudo erlaubt iptables auszufuehren. Geht ja nicht anders! Wenn er das Skript ausfuehrt wird in eine
datei datum uhrzeit und user geloggt, aus der er nichts loeschen kann. Natuerlich kann er direkt iptables ausfuehren, daher ist das eigentlich eine unnoetige Spielerei. Gut waere es, wenn nur dem Skript erlaubt waere iptables auszufuehren, aber das geht wohl nicht oder?
Perfekt waere es, wie oben gefragt, wenn der User nichts anderes in der Bash eintippen kann als fireallow.sh. Ich hoffe sehr, dass das irgendwie geht.
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4695
Wohnort: Berlin
|
@butana: Wenn er in die Shell nichts anderes eintippen kann, wozu braucht er dann eine Shell? Schreib ein Programm, das in einer Endlosschleife auf Benutzereingaben wartet und die dann zur Firewall hinzufügt und setze das Programm als "Shell" für den Benutzer. Dann landet er sofort nach dem Login in diesem Programm, statt in einer allgemeinen Shell.
|
butana
(Themenstarter)
Anmeldungsdatum: 24. Mai 2009
Beiträge: 18
|
rofl. Ich lach mich gerade echt kaputt über mich selbst. Warum einfach wenn's auch kompliziert geht? Ich fass' das nochmal kurz zusammen, weil ich mir denken kann, dass etwas erfahrenere Linuxuser das auch komisch finden: butana schrieb: Am liebsten wäre es mir sogar, dass dieser Benutzer nach der Anmeldung sich automatisch in einer chroot Umgebung befindet.
butana schrieb: Perfekt waere es, wie oben gefragt, wenn der User nichts anderes in der Bash eintippen kann als fireallow.sh.
Marc 'BlackJack' Rintsch schrieb: @butana: Wenn er in die Shell nichts anderes eintippen kann, wozu braucht er dann eine Shell?
Ich wusste gar nicht, dass man als "Standardshell" einfach ein Skript nehmen kann. Vielen Dank fuer diesen simplen und zugleich genialen Tipp, der mein Problem schlagartig gelöst hat. Da es ja trotzdem ein Bashskript ist und keine Binary frage ich mich nun, ob es eine Möglichkeit für den User gibt daraus "auszubrechen" und eine normale Shell zu erlangen, bzw. ob es jetzt noch irgendwie möglich ist, iptables direkt auszuführen (Rechte hätte er ja)? Auch nochmal ein Dankeschön an die anderen User, die mir mit hilfreichen Tipps zur Seite standen. "read" und "alias" werde ich so schnell nicht mehr vergessen.
|
Jacore
Anmeldungsdatum: 25. Mai 2008
Beiträge: 550
|
Dein komplettes "Sicherheitssystem" auf dem single user Desktop ist für einen erfahrenen Linuxer etwas seltsam. =)
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Diese Frage lässt sich nicht pauschal beantworten. Prinzipiell ist es möglich, ein Skript so zu programmieren, dass es dem Nutzer keine Möglichkeit gibt, andere Prozesse aufzurufen und damit auszubrechen. Praktisch hängt das davon ab, wie sicher dein Skript geschrieben ist!
|
butana
(Themenstarter)
Anmeldungsdatum: 24. Mai 2009
Beiträge: 18
|
Das Skript macht nix anderes als die Eingabe zu "trimmen" (s. 1. Post) und iptables aufzurufen. Kann man das irgendwie sicher oder unsicher machen? while : ; do
read input
...
/sbin/iptables ...
done Jacore schrieb: Dein komplettes "Sicherheitssystem" auf dem single user Desktop ist für einen erfahrenen Linuxer etwas seltsam. =)
Naja, es könnte ja theoretisch sein, dass Malware oder eine Sicherheitslücke in einer Software (die ich selbst installiert habe) Rechte erlangt, die sie nicht haben sollte. In einem solchen Fall hätte sie es viel schwerer die Firewall zu umgehen und wenn doch, wird es ja geloggt und die Logs kann nur root lesen. Soweit meine Theorie. Abgesehen davon macht es mir auch Spaß ein bisschen rumzuexperimentieren und wer weiß, wie lange das nur von einem "Single" eingesetzt wird? Evtl. können ja auch irgendwann andere Leute (Verrückte?) davon profitieren. Praktisch brauche ich diese "Sicherheit" wohl eher nicht 😉
|