tux

L i n u x - S c h u l e
Einrichtung des Quota-Pakets auf dem c't-ODS-Server

Homepage | Server | Linux-Clients | Win9x-Clients | WinNT-Clients | Win3.11-Clients | Dos-Clients | Utilities

Dieser Text stammt ursprünglich von Klaus Werner (kwerner@ash.ks.he.schule.de). Von ihm zuletzt geändert am 30.12.1998.

Wer mit dem c't-Server ein Intranet realisiert hat und den Schülern gezeigt hat, wie man in /home/www-pub eigenen Seiten in das Intranet bringen kann, der vermisst  eine Beschränkung des von den Schülern (und Lehrern) genutzten Plattenplatzes auf dem Kommunikationsserver. Hierzu ist Quota die Lösung!

  1. Was ist Quota?
  2. Der aktuelle Stand von Quota für Linux
  3. Voraussetzungen für die Nutzung des Quota-Pakets auf dem c't-ODS-Server
  4. Quota Setup auf dem c't-ODS-Server - Teil I: Quota konfigurieren
  5. Quota Setup auf dem c't-ODS-Server - Teil II: Zuweisung von Quotas an die User
  6. Verschiedene Quota Kommandos

Was ist Quota?

Das Quota-Paket erlaubt dem Systemverwalter unter zwei verschiedenen Aspekten den von den Benutzern genutzten Disk-Speicherbereich zu begrenzen: Einerseits kann die Anzahl der von den Nutzern oder einer Gruppe angelegten Dateien (number of inodes), andererseits der Gesamtumfang des genutzten Speicherbereichs auf einer Harddiskpartition (number of disk blocks) für einen User oder eine Gruppe von Usern begrenzt werden.

Der Ansatz des Quota-Pakets geht also dahin, die Benutzer zu zwingen, bei Verwendung des Disk-Speicherbereichs vorgebenene Grenzen einzuhalten.

Prinzipiell sind somit für jeden User auf jeder Partition verschiedene Vorgaben einstellbar.

Der aktuelle Stand von Quota für Linux

Die Quota-Unterstützung wurde nach meinen Kenntnissen seit der Kernel-Version 1.3.8x in Linux implementiert. In den Kerneln der Version 2.0.x ist Quota-Unterstüzung vorgesehen. Derzeit arbeitet das Quota-Paket nur mit dem ext2-Filesystem.

Voraussetzungen für die Nutzung des Quota-Pakets auf dem c't-ODS-Server

Kernel
Im Kernel muss die Quota-Unterstüzung eincompiliert sein. Das war meines Wissens in der Version 1 des c't-Servers der Fall. Bei der Version 2.x ist nach meinem Wissen diese Unterstüzung nicht eincompiliert. Beim Kernel-Update von Reiner Klaproth (auf Version 2.0.33 des Linux-Kernels) ist diese Unterstüzung jedoch wieder vorhanden. Dieses Update bringt gegenüber dem mit der Version 2 vorhandenen Kernel (V.2.0.29) einige Vorteile, aber den Nachteil, das ISDN-Karten mit PNP-Unterstüzung nicht ohne manuelle Änderungen zu betreiben sind.
Die Version 3 bringt bereits alle Voraussetzungen mit.

Die Quota-Software

Alle notwendigen Programme zum Betrieb des Quota-Pakets sind im Shadow-Update von Reiner Klaproth für die Version 2.1 enthalten und können notfalls auch ohne Installation des Shadow-Updates aus der entsprechenden Archiv-Datei entpackt werden.

Benötigt werden die Dateien:
/usr/sbin/edquota
/usr/sbin/quotacheck
/usr/sbin/quotaon
/usr/sbin/quotaoff (lediglich ein Link auf  /usr/sbin/quotaon, beide Dateien sind identisch!)
/usr/sbin/quotastats
/usr/sbin/repquota
/usr/sbin/warnqouta
/usr/bin/quota
und auf Wunsch die zugehörigen Manual-Dateien.


Quota Setup auf dem c't-ODS-Server - Teil I: Quota konfigurieren

1. Voraussetzung:   Ein Kernel mit aktiviertem Quota-Support liegt vor.

2. Start-Skripten ergänzen: Beim Systemstart muss das Quota-Paket gestartet werden. Dies wird mit einer Datei /etc/rc.d/rc.quota realisiert. Dazu ist eine Modifikation der Datei /etc/rc.d/rc.local nötig. Im Paket zur Einwahl (Dialup Version 2, Skripte-Teilpaket) auf meiner Homepage finden Sie die entsprechenden Dateien inclusive der Datei /etc/rc.config, in der jeweils die beim Start des Servers gewünschten Parameter eingestellt werden können. Im vorgestellten Beispiel wird nur die Aktivierung des Quota-Paket für einzelne User, nicht für Gruppen vorgestellt. Die beidem Cron-Skripte zum nächtlichen Testen auf Quota-Warnungen bzw. zum wöchentlichen Quota-Check finden Sie ebenfalls in diesem Paket!

3. Modifizieren der Datei /etc/fstab
Die Datei /etc/fstab muss entsprechend mit einem Editor bearbeitet werden, wobei die beiden fett markierten Ergänzungen anzubringen sind:

/dev/hda1       /       ext2            defaults                1 1 
/dev/hda2       swap    swap            defaults                1 1 
/dev/hda3       /var    ext2            defaults,usrquota       1 1 
/dev/hda4       /home   ext2            defaults,usrquota       1 1 
none            /proc   proc            defaults                        1 1 
/dev/hdd        /cdrom  iso9660         defaults,ro,user,noauto         1 1 
/dev/fd0        /a      vfat            defaults,rw,umask=000,user,noauto,noexec        1 1

4. Erzeugen der Dateien  "quota.user"
Auf beiden Partionen (/dev/hda3 und /dev/hda4) muss nun eine Datei quota.user angelegt werden, die dem Benutzer root gehören sollte, Lese- und Schreibberechtigung für den Benutzer root und für niemanden sonst haben sollte.

Eingeloggt als root setzen Sie folgende Kommandos ab:


touch /var/quota.user 
touch /home/quota.user 
chmod 600 /var/quota.user 
chmod 600 /home/quota.user

Bei der aktuellen Installation des c't-Servers werden diese Dateien später leider ca 2MB groß,  dies liegt an der Vergabe der Usernummer -1 an den User nobody. Wenn dem User nobody die Usernummer 19 zugeteilt wird, dann reduziert sich die Dateigröße auf 64 kB. (Vorsicht: Auch alle Dateien, die bisher dem User nobody gehört haben,  müssen dann dem neuen User nobody (uid=19) zugeordnet werden, sonst arbeitet z.B. Squid nicht mehr!! )

5. Reboot
Nachdem in der Datei /etc/rc.config (sollte nach dem Shadow-Update vorhanden sein, ergänzte und angepasste Fassung in der Vorbereitung
für das Dial-In-Paket der Version 2) die Eintragung vorgenommen wurde, daß das Quota-Paket nach dem nächsten Booten aktiviert werden soll, aktiviert ein Booten des Rechners das Quota-Paket.

Quota Setup auf dem c't-ODS-Server - Teil II: Zuweisung von Quotas an die User

Dazu dient das Programm edquota..
Normallerweise sollte vor dem Editieren  "quotacheck -avu" aufgerufen werden, um sicherzustellen, dass die aktuelle Plattenbelegung in den Quota-Dateien vorliegt.

Zuweisung der Quotas für einen speziellen User:
Hier am Beispiel des auf dem c't-Server nicht weiter benutzten User games. Das Kommando "edquota -u games" startet den Editor (hoffentlich joe, nicht vi!, siehe meine Eintragung im Profil in der Liste zu Änderungen an Arktur! ):

Quotas for user games:
/dev/hda3: blocks in use: 0, limits (soft = 1024, hard = 2048)
        inodes in use: 0, limits (soft = 20, hard = 30)
/dev/hda4: blocks in use: 0, limits (soft = 4096, hard = 6144)
        inodes in use: 0, limits (soft = 400, hard = 500)

"blocks in use" ist die Gesamtzahl der Blöcke (in Kilobytes), die der Benutzer auf der Partition belegt hat.
"inodes in use" ist die Gesamtzahl der Dateieinträge, die der Benutzer auf der Partition angelegt hat.
Auf der Partition /dev/hda3 hat ein Benutzer eigentlich nur seine Mail-Datei (und ggf. temporäre Dateien beim Drucken), daher wird hier ein
Softlimit von 1MB und ein Hardlimit von 2MB eingetragen, die Anzahl der Dateien auf 20 (max 30) festgesetzt. Auf der Partition /dev/hda4 liegt das Homeverzeichnis, daher werden hier größere Werte eingetragen.

Zuweisung von Quota-Einstellungen an mehrere Benutzer gleichzeitig:

Das schnelle Zuweisen identischer Quota-Setzungen an alle User mit UID über 1999 (das sind auf dem c't-Server die Schüler) oder an alle User mit UID über 999 (das sind auf dem c't-Server die normalen User, Lehrer und Schüler) kann dann mit eine Shell-Skript setquota vorgenommen werden, wobei der User games als Vorlage dient:

Bei mir sieht dieses Skript /usr/sbin/setquota wie folgt aus:

#! /bin/bash 
# 
# Script zum Übertragen der Quotas vom User games auf alle 
# Schüler. Sollen Lehrer mit gesteuert werden, bitte die 
# Zahl 1999 gegen 999 tauschen! 
 
# 1. Schritt: die Userliste 
awk -F: '{ 
        if ( $3>1999 ) 
           print $1 ; }' /etc/passwd > /tmp/userlist 
 
# 2. Schritt: Quotas kopieren. games als "Beispiel" 
for name in `cat /tmp/userlist` ; do 
        /usr/sbin/edquota -p games $name 
done 
 
rm -f /tmp/userlist 
Damit werden allen Usern mit uid > 1999 (bzw. nach Änderung mit uid>999) gleiche Quota-Sätze zugewiesen, wie sie der User games bereits hat.
Statt des jeweils manuellen Aufrufs des Kommandos nach der Eintragung neuer User kann man den Aufruf dieses Skripts auch als letzte Zeile des Skripts /usr/lib/ods-server/bin/user einfügen, dann wird die Quotierung automatisch auf neu eingetragene User übertragen. (Einfach mit einem Editor als letzte Zeile /usr/sbin/setquota in dieses Skript eintragen!)

Im Zusammenhang mit Quota sind die folgenden 3 Begriffe wichtig: Soft Limit, Hard Limit, and Grace Period.

Soft Limit

Soft limit gibt den maximal belegbaren Diskspeicher (oder Dateianzahl) vor, die ein Benutzer auf der Partition belegen kann. Wenn diese Option mit  grace period kombiniert wird, dient diese Angabe als erste Grenze, ab der der User Quota-Warnungen bekommt, wenn er dieses Limit überschreitet. Diese Warnungen werden beim Einloggen in den Server beim Login ausgegeben (oder auch per Mail zugestellt, siehe Warnquota weiter unten!). Beim Einloggen erhält ein User z.B. dann bei Überschreiten des Limits bei aktivierter grace period die Meldung:
 

Welcome to Linux 2.0.36. 
c't-ODS Kommunikationsserver V.2.2 mit Shadow und Dialup V.2.5 
Albert-Schweitzer-Schule, Hofgeismar, Hessen, Germany 
Systemverwaltung: Klaus Werner (kwerner@ash.ks.he.schule.de)
Arktur login: kwerner 
Password: 
Linux 2.0.36. 
Last login: Wed Dec 30 16:32:49 on ttyp0 from Aachen.ash.ks.he. 
You have new mail. 
Disk quotas for user kwerner (uid 1002): 
           In block grace period on /dev/hda4 
kwerner@Arktur:/home/kwerner >

Hard Limit

Hard limit arbeitet nur, wenn grace period gesetzt ist. Damit wird dann die absolute Obergrenze vorgegeben, die auch kurzfristig nicht überschritten werden kann.

Grace Period

Mit dem Kommando "edquota -t", kann der Wert von grace period gesetzt werden. Dies meint einen Zeitraum, der dem User nach Überschreiten des Soft Limits (bis maximal zum Hard Limit) zur Verfügung gestellt wird, bevor die Anwendung des soft limit erzwungen wird. Benutzte Zeiteinheiten können sec(onds), min(utes), hour(s), day(s), week(s) und month(s) sein. Nach Eingabe von "edquota -t" kann im Editor die folgende Einstellung herbeigeführt werden:

Time units may be: days, hours, minutes, or seconds 
Grace period before enforcing soft limits for users: 
/dev/hda3: block grace period: 7 days, file grace period: 7 days 
/dev/hda4: block grace period: 7 days, file grace period: 7 days
Ein User, der sein Softlimit überschritten hat, bekommt so beim Einloggen entsprechende Rückmeldung, bekommt einem Zeitraum von bis zu 7 Tagen eingeräumt, in dem er das Softlimit bis zum Hardlimit überschreiten darf, danach werden die als Softlimit angegebenen Grenzwerte aktiv.


Verschiedene Quota Kommandos

Quotacheck
Mit Quotacheck werden die Dateien "quota.user" auf den aktuellen Stand gebracht. In der vorgeschlagenen rc.quota wird dies beim Booten des Rechners automatisch gestartet.

Repquota
Repquota gibt eine Zusammenfassung des von den Usern belegten Disk-Speicherplatzes aus: Ein Aufruf mit "repquota -av" ergibt:

*** Report for user quotas on /dev/hda3 (/var) Block limits File limits User used soft hard grace used soft hard grace root -- 5615 0 0 563 0 0 bin -- 2 0 0 3 0 0 lp -- 1 0 0 1 0 0 news -- 23 0 0 28 0 0 uucp -- 18 0 0 17 0 0 nobody -- 5030 0 0 4160 0 0 www -- 2 0 0 2 0 0 kwerner -- 4 2048 4096 1 20 40 *** Report for user quotas on /dev/hda4 (/home) Block limits File limits User used soft hard grace used soft hard grace root -- 72231 0 0 236 0 0 adm -- 3342 0 0 20 0 0 nobody -- 5 0 0 1 0 0 ftp -- 670 0 0 6 0 0 www -- 17304 0 0 1898 0 0 kwerner -- 207 4096 6144 35 300 400

Quotaon and Quotaoff
Quotaon wird im Start-Skript /etc/rc.d/rc.quota benutzt um Quota einzuschalten; quotaoff um Quota beim Herunterfahren des Servers wieder abzuschalten.

Warnquota
Warnquota versendet Warnungen an Benutzer per eMail.
Dazu ist es sinnvoll das folgende Skript als Datei /usr/lib/ods-server/cron/job.TAG.quota dem Server hinzuzufügen:

#! /bin/bash 
# /usr/lib/ods-server/cron/job.TAG.quota 
# Dieser Job veranlaßt die tägliche Prüfung der Quoata-Warnung. Er sollte zu 
# verkehrsschwachen Zeiten (nachts) laufen.
echo "Teste auf Quota-Warnungen ...." 
/usr/sbin/warnquota
Hierdurch werden jeweils nachts um 2.11 (mit den übrigen per job.TAG aufgerufenen Tätigkeiten) die Warnungen an Nutzer versandt, die ihre Speicherplatzgrenzen überschritten haben. Eine solche, per eMail zugestellte Warnung sieht dann z.B. so aus:
Message 1/11 From root                     Aug 5, 98 04:39:00 pm 
 
Return-Path: <root> 
Date: Wed, 5 Aug 98 16:39 MEST 
Subject: Quota usage on system 
To: kwerner 
Cc: root 
 
Hi, 
We noticed that you are in violation with the quotasystem 
used on this system. We have found the following violations: 
                       Block limits                 File limits 
Filesystem        soft   hard   grace   used      soft  hard  grace 
/dev/hda4     +-  4913   4096    6144   7days      38    300   400 
 
We hope that you will cleanup before your grace period expires 
 
root (System Super User).
Nach oben

© Thomas Litsch, 27.04.2000, Email: thomas.litsch@linux-schule.de