Re: Oje, ….. - Kasperskys Unix-Virenscanner ermöglicht …
Geschrieben von: admin in Allgemeinvirenscanneras hieße aber Du mußt eines der folgenden Dinge machen:
>
> > a) für jeden Nutzer einen Thread offen haben während Du die Platte
> > durchsuchst
> Ich benoetige pro Eigentuemer einen Prozess. Dies erlaubt allerdings
> zugleich, eine Mehrprozessormaschine von einem Virenscanner effektiv
> nutzen zu lassen…..
NaJa, Da sehe ich einige Probleme bei. Unter anderem, daß der
Controllierende Thread (Der weiter unter root-Rechten laufen muß, da
er ggf. einen Benutzerwechsel auslösen muß) All diese kontrolliert.
Das kann man zwar immernoch auf mehreren Prozessoren laufen lassen,
aber ich hoffe mal das der Scanner schnell genug ist um durch die IO
limitiert zu werden.
Außerdem sollten die Prozessoren durch andere Dinge schon Arbeit
haben (warum sonst mehrere Prozessoren?) Somit ist das egal.
> > b) Für jeden Nutzer die komplette Platte nach Datein durchsuchen auf
> > denen er die entsprechenden Rechte besitzt.
> Der Verzeichnisbaum muss nur einmal durchsucht werden pro Lauf.
Wie gesagt: Fall c
> > c) Für jede Datei (Ok nur bei jedem WEchsel der ID) einen Switch der
> > ID machen.
> Wie Du schon in Klammern richtig bemerkt hast, musst Du einen Prozess
> nur dann wechseln, wenn sich die IDentitaet des Eigentuemers der
> Datei aendert.
> Die Anzahl dieser zusaetzlich erforderlichen Prozesswechsel ist
> allerdings vernachlaessigbar klein gegenueber den bereits
> erforderlichen, wegen I/O und Starten von Tocherprozessen fuer
> Dekomprimierung,Archivverwaltung etc….
Wenn man da jedesmal als neuen Thread/Prozess startet hast Du recht.
Das sorgt aber vor allem für ds Problem, daß ein Virus der über eine
Lücke im Packprogramm funktioniert ersteinmal installiert wird. Aus
dem Grunde bringen doch Virenscanner meist ihre eigenen
Entpackroutinen mit wenn ich mich recht entsinne.
> > Bei ohne weiteres mehreren 100 Benutzern ist a) eine ungeahnte
> > Speicehrverschwendung, b) braucht beliebig lange und c) hat einen
> > beliebigen Overhead.
>
> Dies ist Unsinn. Mache Dir doch ein kleines Testprograemmchen und
> simuliere mal dieses Problem, mit Einlesen der Datei. Ermittle die
> tatsaechlich zusaetzlich erforderlichen Prozesswechsel…
Bei einem recht neuen System (bisher nutzt die Homeverzeichnisse noch
keiner wirklich und vor allem nicht zum Datenaustausch) sind das
schon etwa 200. Wenn die Nutzer anfangen die Homeverzeichnisse zum
Datenaustausch zu verwenden geht die Zahl aber schnell nach oben!
> …und Speicherverschwendung? Textsegmente werden ueberhaupt nicht
> kopiert, .data und .bss haben copy-on-write, und die DAteien liegen
> ueber mmap im Adressraum des jeweiligen Prozesses?
> WO schaffst Du es dann, Speicher zu verschwenden?
Weil Du wenn Du die Aufgaben auf die verschiedenen IDs trennst für
jeden Thread nicht nur bei der MMU einen Eintrag hast sondern auch
eigene Stacks, und vermutlich auch .data (es sei denn Du lagerst die
Daten alle auf dem Stack). Zwar kannst Du u.U. eine gemeinsame DB der
Signaturen nur einmal im Speicher halten, das ist aber nicht alles
mit dem der Virenscanner arbeitet.
> > Außerdem: Was machst Du mit Dateien die auf Ihre Rechte auf 111 oder
> > ähnlichem haben? Ersteinmal die Atribute ändern?
> >
> Genauso macht man das.
Du willst also Deinem Virenscanner erlaube einfach so die Attribute
von Dateien zu verändern???
> Eben, Problem der Aufgabenstellung. Ein sicherheitsrelevantes
> Programm muss (erst recht) mit den geringstmoeglichen Rechten
> ausgefuehrt werden koennen. Das ist hier gerade nicht gegeben. Der
> Virenscanner wird generell mit den maximal verfuegbaren Rechten
> ausgefuehrt.
Weil er sie eben braucht. Du selbst gibst zu, daß für das scannen von
Files die root gehören die entsprechenden Rechte erforderlich sind.
Die Frage ist also nur, ob auch der Scannende Thread die
entsprechenden Rechte benötigt. Ich denke es macht wenig Sinn sie ihm
nicht zu geben.
> > Wie machst Du es denn dann, wenn Die IDs nicht “sauber” verteilt
> > genutzt werden. z.B. bei einer Webseite bei der eine Gruppe von
> > Leuten arbeitet und die DAteien immer 664 sind. Die Dateien gehören
> > verschiedenen Nutzern. Also entweder mehreere Threads gleichzeitig
> > nutzen (Wieviele kann der Kernel gleichzeitig?) oder doch dauernder
> > Nutzerwechsel.
> >
> Ja und? Frist prkatisch kein Brot, siehe oben….(Weder
> Rechenleistung noch Speicher noch andere Ressourcen…)
Na, auch ohne irgendwelche Aktionen ist das anlegen eines neuen
Threads (Und Du mußt ihn neu anlegen, da du mit setuid nicht mehr
zurück kannst) nicht beliebig schnell. OHNE irgendwelche Tätigkeit
(nur anlegen eines neuen Prozesses und ID wechseln und Prozess
beenden sowie auf sein Ende warten (Ich habe fork genommen weil
einfacher und ich mir nicht sicher bin ob einzelne Threads des selben
Prozesses verschiedene NutzerIDs haben können)) dauert das ganze laut
time über 0,2ms (Über 1000 gemittelt). Wenn Du jetzt noch
Speicherzugriffe (writes), geshareten Speicher (Du mußt schließlich
mit dem Hauptprogramm komunizieren),… hinzufügst geht das noch
deutlich nach oben.
> Threads bei Linxu: sicher mehr als 1024. Hier allerdings unerheblich,
> denn wir brauchen Prozesse mit unterschiedlicher, effektiver
> Benutzeridentitaet.
Ok, dann muß man sogar fork nehmen,
> Es muessen nicht alle Kindprozesse fuer allemeoglichen Benutzer
> gleichzeitig gestartet sein. MAn wird hier eine maximale Anzahl von
> Prozessen vorgeben. Die Porzesse mit den am wenigsten genutzeten
> Benutzerkennungen werden beendet, und solche mit neu erforderlichen
> Identitaeten bei Bedarf gestartet. Absolut kein Problem.
Wie gesagt: Es gibt verschiedene Möglichkeiten.
> > wiso dev? wiso suid?
> > /tmp ist 1777 (Sticky ist hier die Lösung des Problems!)
> > /var/spool/mail ist i.a. auch 1777 wenn ich mich recht entsinne (habe
> > auf maildir umgestellt)
> Auch falsch. “ls -ld /var/mail” heisst mein Tipp….
s3:~ # ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Jan 14 2005 /var/mail -> spool/mail
s3:~ # ls -ld /var/spool/mail
drwxrwxrwt 2 root root 4096 May 22 17:06 /var/spool/mail
Sieht für mich nach 1777 aus!
> Oje, Du hast tatsaechih relativ wenig Ahnung. DU verwechselst Threads
> mit Prozessen,
Nein verwechsle ich nicht!
Aber im Falle einer ID kann man mit Threads effizienter arbeiten und
ob die ID thread oder Prozessweit gilt ist eine Designfrage. Mit
NutzerIDs schlage ich mich im Normalfall nicht rum!
> kennst keinen effektiven TReewalk usw…
falsch.
Die Frage ist nur mit welchen Nebenbedingungen Du Diene DFS machen
möchtest. Die von mir angesprochene war mit fester NutzerID, und da
kann man nunmal nicht in jedes Verzeichniß (abgesehen davon, daß man
u.U. auch nicht alle Datein erreicht wenn sie mit entsprechenden
Rechten in Verzeichnissen verteilt liegen). NAtürlich kann man das
direkt machen, hat dann aber im WC nunmal pro Datei die Notwendigkeit
einen anderen Task (ggf. sogar neu anzulegen) mit dem Scan zu
beauftragen.
> … muss HA bedauernd zur Kenntnis nehmen.
Tja, errare humanum est.
Stm