13.7 Limitare gli Utenti

Se hai degli utenti, potrebbero esserti venuto in mente come limitare il loro uso del sistema. FreeBSD fornisce all'amministratore molti modi per limitare la quantità di risorse di sistema che un individuo può usare. Questi limiti sono divisi in due sezioni: quote sui dischi e altri limiti di risorse.

Le quote sui dischi limitano l'uso del disco agli utenti e forniscono un modo per controllare velocemente quell'uso senza ricalcolarlo ogni volta. Le quote sono discusse in Sezione 18.12.

I limiti delle altre risorse includono modi per limitare la quantità di CPU, memoria ed altre risorse che un utente può consumare. Queste sono definite usando classi di login e sono discusse di seguito.

Le classi di login sono definite in /etc/login.conf . Anche se le semantiche precise sono al di là dello scopo di questa sezione, sono descritte in dettaglio nella pagina di manuale di login.conf(5). È sufficiente dire che ogni utente è assegnato ad una classe di login (default di default) e che ogni classe di login ha un insieme di capacità di login associate. Una capacità di login è una coppia nome=valore , dove nome è un noto identificatore e valore è una stringa arbitraria processata a seconda del nome. Impostare classi di login e capacità è abbastanza veloce ed è anche descritto in login.conf(5).

Nota: Il sistema normalmente non legge la configurazione in /etc/login.conf direttamente, ma legge il file database /etc/login.conf.db che fornisce lookup più veloci. Per generare /etc/login.conf.db da /etc/login.conf, esegui il seguente comando:

# cap_mkdb /etc/login.conf

I limiti alle risorse sono diversi dalle semplici capacità di login. Primo, per ogni limite c'è un limite soft ed uno hard. Un limite soft può essere modificato dall'utente o dall' applicazione, ma non può essere maggiore del limite hard. Quest'ultimo può essere abbassato dall'utente, ma mai alzato. Secondo, la maggior parte dei limiti alle risorse si applica per ogni processo di uno specifico utente, non ad un utente con tutti i suoi processi. Nota, comunque, che queste differenze sono dovute dallo specifico funzionamento dei limiti, non dall' implementazione dell'ambiente di limiti alle capacità ( ad esempio questi non sono veramente un caso speciale delle capacità di login).

E così, senza ulteriore confusione, sotto sono riportati i limiti alle risorse usati più di frequente (il resto, assieme alle altre capacità di login, può essere trovato in login.conf(5)).

coredumpsize

Il limite alla dimensione di un file core generato da un programma è, per ovvie ragioni, subordinato agli altri limiti sull'uso del disco (ad esempio filesize o quote sui dischi). Non di meno, è spesso usato come un mezzo meno severo per controllare il consumo di spazio disco: dato che gli utenti non generano da soli file core, e spesso non li cancellano, impostare questa opzione può impedire loro di finire lo spazio a disposizione se un grande programma (ad esempio emacs) dovesse andare in crash.

cputime

Questo è la massima quantità di tempo CPU che un processo utente può consumare. I processi trasgressori sono uccisi dal kernel.

Nota: Questo è un limite sul tempo di CPU consumato, non sulla precentuale di CPU come mostrato in certi campi da top(1) e ps(1). Un limite su quest'ultimo non è, al momento in cui scriviamo, possibile, e sarebbe abbastanza inutile; un compilatore --probabilmente un processo legittimo -- può tranquillamente consumare quasi il 100% della CPU per un certo periodo di tempo.

filesize

Questo è la massima dimensione del file che un utente può possedere. A differenza delle quote sui dischi, questo limite è forzato sui singoli file, non sull' insieme di tutti i file che un utente possiede.

maxproc

Questo è il massimo numero di processi che un utente può eseguire. Questo include sia processi background che processi foreground. Per ovvie ragioni, non può essere più di grande del limite di sistema specificato dal sysctl(8) kern.maxproc. Inoltre nota che impostare questo valore troppo basso può peggiorare la produttività utente: è spesso utile per loggarsi molte volte contemporaneamente o eseguire pipeline. Inoltre, alcuni compiti, come compilare un grande programma, richiedono molti processi (ad esempio make(1), cc(1) ed altri preprocessori intermedi).

memorylocked

Questa è la massima quantità di memoria che un processo può richiedere che sia lockata nella memoria principale. (ad esempio leggi mlock(2)). Alcuni programmi critici al sistema, come ad esempio amd(8), si lockano nella memoria principale in modo che in caso siano swappati, non contribuiscano al rallentamento del sistema in un momento critico.

memoryuse

Questo è la massima quantità di memoria che un processo può consumare in ogni istante. Include sia la memoria core che quella swap. Non che sia un limite per limitare tutto il consumo di memoria, ma è sempre un buon inizio.

openfiles

Questo è il massimo numero di file che un processo può avere aperti. In FreeBSD, i files sono anche usati per rappresentare socket e canali IPC; così, stai attento a non impostare questo valore troppo basso. Il limite di sistema per questo valore è definito dal sysctl(8) kern.maxfiles.

sbsize

Questo è il limite sulla quantità di memoria di rete, e quindi di mbufs, che un utente può consumare. Questo limite è nato come risposta ad un vecchio attacco DoS che creava moltissime socket, ma può essere usato per limitare in genere la comunicazione via rete.

stacksize

Questo è la massima dimensione che la stack di un processo può occupare. Questo limite da solo non è sufficiente per limitare la quantità di memoria che un processo può occupare; di conseguenza, dovrebbe essere usato in congiunzione con altri limiti.

Ci sono alcune altre cose da ricordare quando si impostano limiti alle risorse. Di seguito riportiamo alcuni trucchetti generali, suggerimenti e commenti vari.

Per maggiori informazioni sui limiti alle risorse e le classi di login e le capacità in genere, per favore consulta le pagine rilevanti di manuale:cap_mkdb(1), getrlimit(2), login.conf(5).

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.