Hallo, wir verwenden Linux-Terminalserver in der Schule. Nachdem Schüler öfter mal Blödsinn ausdrucken oder einen Druckauftrag mit 100-Seiten herausgeben, muss die Druckerwarteschlange auch vom anwesenden Lehrer gelöscht werden können. Die Druckaufträge werden anscheinend in /var/spool/cups gespeichert. Jetzt hätte ich gerne einen Befehl oder ein Script, das der Gruppe teachers erlaubt beim ausführen dieses Scripts sämtliche vorhandene Druckaufträge löscht. Allerdings besitzt der Ordner /var/spool/cups ja die Rechte 700 und die Owner lp.sys. Wie kann ich es erreichen, dass jeder Lehrer trotzdem die Druckerwarteschlange löschen darf, oder gibt es noch andere Lösungen? (Btw. es ist völlig egal, wenn zusätzlich auch andere Druckaufträge gelöscht werden, die erst nach dem "Blödsinns-Druckauftrag" an die Reihe kommen würden.) -- Viele Grüße/kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
Dieter Kroemer, Donnerstag, 11. Dezember 2003 16:28:
Wie kann ich es erreichen, dass jeder Lehrer trotzdem die Druckerwarteschlange löschen darf, oder gibt es noch andere Lösungen?
Schreib doch ein Skript, das das gewünschte tut, root gehört, und setz das suid-Bit. Dann läuft das Skript mit root-Rechten, auch wenn es von jemand anders gestartet wurde. -- Andreas Feile www.feile.net
Hallo Andreas, * Andreas schrieb am 11.12.2003:
Dieter Kroemer, Donnerstag, 11. Dezember 2003 16:28:
Wie kann ich es erreichen, dass jeder Lehrer trotzdem die Druckerwarteschlange löschen darf, oder gibt es noch andere Lösungen?
Schreib doch ein Skript, das das gewünschte tut, root gehört, und setz das suid-Bit. Dann läuft das Skript mit root-Rechten, auch wenn es von jemand anders gestartet wurde.
Ich habe bei mir hier gerade ein Script #!/bin/sh echo $UID echo $USER als root gemacht, +x und +s drauf, und als normaler User ausgeführt. Dann kriege ich die ID und Kennung des *normalen* Users. Soweit ich weiß, ging so was ähnliches mal hier über die Liste vor langer Zeit. SUID auf Shell-Scripte werden ignoriert oder so ähnlich. Liege ich falsch oder total daneben? Grüße, Tom
Am Donnerstag, 11. Dezember 2003 16:53 schrieb Thomas Preissler:
* Andreas schrieb am 11.12.2003: [...]
Schreib doch ein Skript, das das gewünschte tut, root gehört, und setz das suid-Bit. Dann läuft das Skript mit root-Rechten, auch wenn es von jemand anders gestartet wurde.
Ich habe bei mir hier gerade ein Script
#!/bin/sh echo $UID echo $USER
als root gemacht, +x und +s drauf, und als normaler User ausgeführt. Dann kriege ich die ID und Kennung des *normalen* Users.
Soweit ich weiß, ging so was ähnliches mal hier über die Liste vor langer Zeit. SUID auf Shell-Scripte werden ignoriert oder so ähnlich.
Liege ich falsch oder total daneben?
Shell- (und nebenbei auch Perl-, PHP-, ...) Scripte werden nicht ausgeführt, sondern von einem Interpreter (bash, perl,...) eingelesen, interpretiert und dann die entspr. Befehle vom _Interpreter_ ausgeführt. Entscheidend sind also die Rechte des Interpreters - _das_ ist das laufende Programm. Und der bash will man ja nicht ernsthaft das S-Bit verpassen, oder? ;) Jan
Am Donnerstag, 11. Dezember 2003 16:59 schrieb Peter Wiersig:
On Thu, Dec 11, 2003 at 04:28:11PM +0100, Dieter Kroemer wrote:
gibt es noch andere Lösungen?
sudo,
Danke und mit sudoers erfüllt das genau meine Wünsche :-)) -- Viele Grüße/kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
Hallo, On Dec 11 16:28 Dieter Kroemer wrote (shortened):
Nachdem Schüler öfter mal Blödsinn ausdrucken oder einen Druckauftrag mit 100-Seiten herausgeben, muss die Druckerwarteschlange auch vom anwesenden Lehrer gelöscht werden können. Die Druckaufträge werden anscheinend in /var/spool/cups gespeichert. Jetzt hätte ich gerne einen Befehl oder ein Script, das der Gruppe teachers erlaubt beim ausführen dieses Scripts sämtliche vorhandene Druckaufträge löscht. Allerdings besitzt der Ordner /var/spool/cups ja die Rechte 700 und die Owner lp.sys.
Da scheint mir der grundsätzliche Gedankengang dahinter mehr als problematisch zu sein. 1. Grundsätzlich kann es beliebige Probleme geben, wenn man einem laufenden Prozess (hier dem cupsd) von aussen seine Daten ändert (hier Dateien im Spoolverzeichnis löscht). 2. Für einen aktiv im Druck befindlichen Druckauftrag ist es normalerweise zwecklos, die zugehörigen Dateien im Spoolverzeichnis zu löchen, um den Druckauftrag abzubrechen, denn die Daten können schon ganz oder zum allergrössten Teil in den verschiedenen Stufen der Filterung stecken. Daher bitte keine solche üblen Hacks machen (sonst heisst es hinterher wieder, dass das Drucksystem nicht funktioniert), sondern die Befehle nehmen, die dafür vorgesehen sind, mit dem Druckdienst zu kommunizieren (hier "lpstat -o" und "cancel"). Siehe das Administrationshandbuch und die CUPS-Dokumentation. Nur der Benutzer "root" darf beliebige Druckaufträge löschen. Ein Script kann aber nicht mit Setuid "root" laufen (das wird einfach ignoriert). Auch hier gibt es verschiedene übliche Wege, das trotzdem zu erreichen (z.B. "sudo"). Gruss, Johannes Meixner -- SUSE LINUX AG, Maxfeldstrasse 5 Mail: jsmeix@suse.de 90409 Nuernberg, Germany WWW: http://www.suse.de/
Hallo Johannes, Am Freitag, 12. Dezember 2003 11:28 schrieb Johannes Meixner:
Jetzt hätte ich gerne einen Befehl oder ein Script, das der Gruppe teachers erlaubt beim ausführen dieses Scripts sämtliche vorhandene Druckaufträge löscht.
Da scheint mir der grundsätzliche Gedankengang dahinter mehr als problematisch zu sein.
... sondern die Befehle nehmen, die dafür vorgesehen sind, mit dem Druckdienst zu kommunizieren (hier "lpstat -o" und "cancel").
Ersteinmal danke für deine Hinweise. Jetzt habe ich mir folgendes überlegt (wichtig dabei ist, dass der Lehrer im Prinzip nichts denken muss, da auch Lehrkräfte im Raum sind, die von Computern so gut wie keine Ahnung haben.) und würde gerne wissen, ob diese Lösung wieder cupsd durcheinander bringen kann: 1. Bei einem Problem mit dem Drucker schaltet der anwesende Lehrer diesen aus. 2. Der Befehl "lprm -" von root ausgeführt löscht ja alle vorhanden Druckjobs. Wenn man jetzt mit visudo bestimmten Usern (bestimmten Lehrern) diesen Befehl erlaubt, könnten diese alle vorhandenen Druckaufträge löschen und danach den Drucker wieder einschalten. (Den Befehl "sudo rpm -" kann ich ja in ein Script verpacken, sodass die Lehrer nur noch das zugehörige Icon anklicken müssen) 3. Jetzt den Drucker wieder einschalten - evtl. muss noch ein eingezogenes Blatt aus dem Drucker per Hand geholt werden - und man müsste wieder "normal" weiter drucken können. Ist an diesem Gedankengang wieder etwas vermurckst? Viele Grüße Dieter -- Viele Grüße/kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
Dieter Kroemer, Freitag, 12. Dezember 2003 12:56:
1. Bei einem Problem mit dem Drucker schaltet der anwesende Lehrer diesen aus.
Never ever! Jedenfalls nicht bei einem Laserdrucker. Einen solchen bringt man zum Schweigen, indem man ihm das Papier wegnimmt. Erst wenn er deshalb aufhört zu drucken, kann man ihn ggf. ausschalten. Andernfalls riskierst Du Dein Druckwerk, wenn nämlich das Papier plötzlich nicht gleichmäßig am heißen Fixierer vorbeigezogen wird, sondern stehen bleibt. Eigentlich schaltet man auch einen Tintenspritzer nicht einfach aus. Da trocknet nämlich die Tinte schnell ein.
3. Jetzt den Drucker wieder einschalten - evtl. muss noch ein eingezogenes Blatt aus dem Drucker per Hand geholt werden - und man müsste wieder "normal" weiter drucken können.
Siehe oben. -- Andreas Feile www.feile.net
Am Freitag, 12. Dezember 2003 13:05 schrieb Andreas Feile:
Dieter Kroemer, Freitag, 12. Dezember 2003 12:56:
1. Bei einem Problem mit dem Drucker schaltet der anwesende Lehrer diesen aus.
Never ever! Jedenfalls nicht bei einem Laserdrucker.
Danke für diesen wichtigen Hinweis. Also probier ich es nocheinmal. 1. Bei einem Problem mit dem Drucker ist der Papiereinzugsschacht ein bisschen heruaszuziehen - der Drucker bleibt eingeschaltet! (D.h. das evtl schon eingezogene Blatt wird noch fertig ausgedruckt) 2. Der Befehl "lprm -" von root ausgeführt löscht ja alle vorhanden Druckjobs. Wenn man jetzt mit visudo bestimmten Usern (bestimmten Lehrern) diesen Befehl erlaubt, könnten diese alle vorhandenen Druckaufträge löschen und danach den Drucker wieder einschalten. (Den Befehl "sudo rpm -" kann ich ja in ein Script verpacken, sodass die Lehrer nur noch das zugehörige Icon anklicken müssen) 3. Jetzt könnte man den Drucker ausschalten (bei mir hat er nämlich dann trotzdem ab und zu noch weiter gedruckt - wahrscheinlich wegen dem internen Druckerspeicher) und danach wieder einschalten und schließlich muss man den Papiereinschub wieder hineinschieben; jettz müsste wieder "normal" weiter drucken können. Was ist an diesem Gedankengang noch falsch? -- Viele Grüße/kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
Am 12.12.2003 um 13:58 Uhr schrieb Dieter Kroemer:
Am Freitag, 12. Dezember 2003 13:05 schrieb Andreas Feile:
Dieter Kroemer, Freitag, 12. Dezember 2003 12:56:
1. Bei einem Problem mit dem Drucker schaltet der anwesende Lehrer diesen aus.
Never ever! Jedenfalls nicht bei einem Laserdrucker.
Danke für diesen wichtigen Hinweis.
Nur nebenbei: Bei manchen Tintenstrahler (z. B. ESPON) gibt es dafür eine 'Trash-Taste' zum Löschen der aktuellen Jobs, d. h. der Drucker bricht von sich aus ab und löscht seinen Druckerspeicher, der nächste Auftrag wird allerdings dann wieder gedruckt, wenn der Drucker wieder online ist. Das ist IMHO die sanfteste Methode! cu PeeGee
Hallo, On Dec 12 13:58 Dieter Kroemer wrote (shortened):
1. Bei einem Problem mit dem Drucker ist der Papiereinzugsschacht ein bisschen heruaszuziehen ... 2. Der Befehl "lprm -" von root ausgeführt löscht ja alle vorhanden Druckjobs. ... 3. Jetzt könnte man den Drucker ausschalten ... und danach wieder einschalten und ... den Papiereinschub wieder hineinschieben ... Was ist an diesem Gedankengang noch falsch?
Nichts. In gewissen Fällen (evtl. dann, wenn der Drucker aus Panik mitten im Druck ausgeschaltet wurde) könnte nach dem "cancel" bzw. "lprm" noch ein "fuser -k /dev/lp0" (oder ähnlich) nötig sein, denn manchmal bleibt der CUPS Backend Prozess hängen und solange noch ein Prozess /dev/lp0 (oder ähnlich) im Zugriff hat, können nachflogende Jobs nicht über das Device gedruckt werden. D.h. nach "cancel" bzw. "lprm" war noch nicht wirklich alles weg. Man findet den CUPS Backend Prozess, indem man z.B. in "ps auxw" nach dem Wert der DeviceURI (aus /etc/cups/printers.conf) sucht. Z.B.: root@host> grep '^DeviceURI' /etc/cups/printers.conf DeviceURI parallel:/dev/lp0 user@host> ps auxw | grep 'parallel:/dev/lp0' | grep -v grep lp 18276 ... parallel:/dev/lp0 ... root@host> kill 18276 Das alles geht einfacher mit einem einzigen root@host> fuser -k /dev/lp0 Gruss, Johannes Meixner -- SUSE LINUX AG, Maxfeldstrasse 5 Mail: jsmeix@suse.de 90409 Nuernberg, Germany WWW: http://www.suse.de/
Hallo, On Dec 12 12:56 Dieter Kroemer wrote (shortened):
1. Bei einem Problem mit dem Drucker schaltet der anwesende Lehrer diesen aus.
Beim plötzlichen Stromausschalten während des Druckens ist fast sicher noch ein Blatt Papier irgendwo mittem im Drucker. Besser ist es, nur das Papier wegzunehmen, damit das drucken aufhört. Bei einem Laserdrucker genügt dazu, die Papierkassette etwas herauszuziehen. In seltenen Fällen könnte das herauszuziehen der Papierkassette während des Druckens auch zu einem Papierstau führen, aber das ist eben viel unwahrscheinlicher, als wenn einfach so der Strom ausgeschaltet wird. Das Ausschalten ist auch problematisch, weil dadurch die Kommunikation zum Drucker willkürlich unterbrochen wird. Wenn das CUPS Backend das merkt, dann wird evtl. die zugehörige Warteschlange "disabled" und muss später manuell "enabled" werden. Auch kann dadurch der Druckauftrag evtl. nicht korrekt beendet werden (auch ein "cancel" ist ein korrektes Ende) und verbleibt daher evtl. in der Warteschlange von wo er nach dem Einschalten von vorne gedruckt wird (wenn er nicht mit "cancel" gelöscht wird).
2. Der Befehl "lprm -" von root ausgeführt löscht ja alle vorhanden Druckjobs. Wenn man jetzt mit visudo bestimmten Usern (bestimmten Lehrern) diesen Befehl erlaubt, könnten diese alle vorhandenen Druckaufträge löschen und danach den Drucker wieder einschalten. (Den Befehl "sudo rpm -" kann ich ja in ein Script verpacken, sodass die Lehrer nur noch das zugehörige Icon anklicken müssen)
Wenn nur dieser Schritt ausgeführt wird, ohne dass der Drucker ausgeschaltet wurde, dann muss man nur etwas warten, bis das, was schon im Druckerspeicher ist, ausgedruckt wurde. Das sind in der Regel nur wenige Seiten - aber je nach Druckerspeicher können das natürlich auch etliche Seiten sein. Ich schlage daher folgendes vor: Siehe Administratiobshandbuch, Druckerkapitel, den Abschhnitt "Störungsbehebung mit obigen Befehlen beim LPRng" bzw. "Störungsbehebung mit obigen Befehlen bei CUPS" oder im Benutzerhandbuch bei der YaST-Konfiguration des Druckers den Teil "Mögliche Probleme": Die kurze und brutale Metode (löscht alle Druckaufträge): 1. Papier wegnehmen. 2. Alle Druckaufträge löschen, etwas warten ("sleep") und dann ggf. sicherheitshalber ein abschliessendes "fuser -k ..." 3. Drucker ausschalten, Papier wieder einlegen, etwas warten und Drucker wieder einschalten. Dadurch werden auch die restlichen Daten im Druckerspeicher gelöscht. Die saubere Methode (löscht nur den aktiven Druckauftrag): 1. Papier wegnehmen. 2. Das weitere Ausdrucken anhalten ("disable ..."). 3. Druckauftrag löschen. Es genügt, den aktiven Druckauftrag zu löschen, denn die Folgeaufträge werden wegen "disable" nicht gedruckt. 4. Sicherheitshalber evtl. ein "fuser -k ..." 5. Drucker ausschalten, Papier wieder einlegen, etwas warten und Drucker wieder einschalten. Dadurch werden auch die restlichen Daten im Druckerspeicher gelöscht. 6. Das weitere Ausdrucken wieder starten "/usr/bin/enable ...". Gruss, Johannes Meixner -- SUSE LINUX AG, Maxfeldstrasse 5 Mail: jsmeix@suse.de 90409 Nuernberg, Germany WWW: http://www.suse.de/
On Thursday 11 December 2003 16:28, Dieter Kroemer wrote: [...]
wir verwenden Linux-Terminalserver in der Schule. Nachdem Schüler öfter mal Blödsinn ausdrucken oder einen Druckauftrag mit 100-Seiten herausgeben, muss die Druckerwarteschlange auch vom anwesenden Lehrer gelöscht werden können. Die Druckaufträge werden anscheinend in /var/spool/cups gespeichert. Jetzt hätte ich gerne einen Befehl oder ein Script, das der Gruppe teachers erlaubt beim ausführen dieses Scripts sämtliche vorhandene Druckaufträge löscht. Allerdings besitzt der Ordner /var/spool/cups ja die Rechte 700 und die Owner lp.sys.
Wie kann ich es erreichen, dass jeder Lehrer trotzdem die Druckerwarteschlange löschen darf, oder gibt es noch andere Lösungen?
(Btw. es ist völlig egal, wenn zusätzlich auch andere Druckaufträge gelöscht werden, die erst nach dem "Blödsinns-Druckauftrag" an die Reihe kommen würden.) [...] Altbekantes Problem.
Kene ich noch aus meiner Zeit als Erstsemester. FORTRAN Programm errechnet Werte die auf einem Kettendrucker mit Endlospapier heraus gegeben werden. Das Mainframe stand leider nur 50km entfernt im HRZ Oldenburg und nur die Admins dort konnten die Printspool löschen, VM-CMS halt. Ich hatte damals ohne zu überlegen eine 10Mb grosse Ergebnisdatei, nur mit Nullen, drucken wollen. Nach einer halben Stunde waren alle Kollegen im Poolraum drauf und dran mich als abschreckendes Beispiel mit den Füssen nach oben an die Decke zu nageln. Seitdem hab ich nie wieder einen Druckjob gestartet ohne mir vorher anzusehen wie gross er ist. Also, solche Monsterdruckaufträge können auch eine pädagogisch wertvolle erzieherische Wirkung haben. Soviel nur zur Erheiterung aller Leser. :o) Ich würde das auf zwei Wegen angehen. - Druckaufträge laufen über den Lehrer Arbeitsplatz an dem auch der Drucker hängt. Der Lehrer hat das Web Frontend von cups laufen und hat den Drucker mit "Drucker anhalten" gesperrt. Unter "Druckaufträge kann der Lehrer nun die ankommenden Druckaufträge sehen und diejenigen die zu gross sind löschen. Alle 15 / 30 min gibt der Lehrer den Drucker wieder frei und es kann gedruckt werden. Das hat auch den Vorteil, dass die Arbeit nicht durch den andauernd rappelnden Drucker gestört wird. - Es gibt einen Report über den Ressoucen Verbrauch eines jeden Schülers. Recourcen sind auch besuchte URLs im Internet. Derjenige der am verantwortungsvollsten mit den Ressourcen umgeht bekommt einen Preis, einen Stern, oder was die pädagogische Zunft sonst noch zur Mitarbeitermotivation einsetzt. Vor allem den zweiten Teil sollte an Schulen mehr praktiziert werden. Ich halte es für totalen Quatsch so etwas wie Squidguard oder ähnliches an Schulen ein zu setzen. Das sind "Zensur" Systeme die alles andere als geeignet sind den Schülern so etwas wie Medienkompetenz beizubringen. Durch ein ausführliches Reporting eines jeden Schülers erreicht man IMHO zwei positive Effekte. 1. den Schülern wird deutlich gemacht, dass jeder Schritt im Internet nachvollziehbar ist. 2. Den Schülern wird ihr eigenes Verhalten vor Augen geführt. Bin schon gespannt wenn Papa die Liste seines Filius sieht und erkennen muss das der der Pubertät schon näher ist als er dachte. Was allerdings auch wieder ein Problem ist, die Eltern sind darüber im Vorfeld solch einer "Überwachung" zu informieren und vor allem davon zu überzeugen das dies pädagogisch sinnvoll ist. Ein Hinweis auf die Protokollierung aller Schritte im Internet, vom Provider, etcpp. mag da ein hilfreiches Argument sein. Sonst wird sich die Schule sicherlich auf eine Reihe von Klagen wegen angeblicher Verletzung der Persönlichkeitsrechte einstellen müssen. Was in meinen Augen an sich auch schon wieder Schwachfug ist, schliesslich sollen die Stepkes in der Schule erst zu Persönlichkeiten heranwachsen, will sagen sie sind dort noch keine Persönlichkeiten. Tschüss, Thomas -- Diese Adresse wird nur für die SuSE-Linux Liste benutzt. Mails die nicht über die SuSE Liste kommen erreichen mich _garantiert_nicht_
participants (8)
-
Andreas Feile
-
Dieter Kroemer
-
Jan.Trippler@t-online.de
-
Johannes Meixner
-
Peter Geerds
-
Peter Wiersig
-
Thomas Preissler
-
Thomas Templin