ulimit: Unterschied zwischen harten und weichen Grenzen

87

Was ist der Unterschied zwischen harten und weichen Grenzen in ulimit?

Für die Anzahl der geöffneten Dateien habe ich ein Softlimit von 1024 und ein Hardlimit von 10240. Es ist möglich, Programme auszuführen, die mehr als 1024 Dateien öffnen. Wofür ist die weiche Grenze?

Daniel Kullmann
quelle
4
Sprechen Sie über ulimit -n? Versuchen Sie, eine Shell mit einem sehr niedrigen Wert ( bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c') auszuführen . Was ist die Ausgabe?
Gilles

Antworten:

77

Ein hartes Limit kann nur von root erhöht werden (jeder Prozess kann es senken). Aus Sicherheitsgründen ist dies nützlich: Ein Nicht-Root-Prozess kann ein festes Limit nicht überschreiten. Es ist jedoch unpraktisch, dass ein Nicht-Root-Prozess keine niedrigere Grenze als seine untergeordneten Prozesse haben kann.

Eine weiche Grenze kann jederzeit durch den Prozess geändert werden. So ist es praktisch, solange Prozesse zusammenarbeiten, aber nicht gut für die Sicherheit.

Ein typischer Anwendungsfall für weiche Limits besteht darin, Core-Dumps ( ulimit -Sc 0) zu deaktivieren und sie gleichzeitig für einen bestimmten Prozess zu aktivieren, den Sie debuggen ( (ulimit -Sc unlimited; myprocess)).

Der ulimitShell-Befehl ist ein Wrapper um den setrlimitSystemaufruf. Dort finden Sie die endgültige Dokumentation.

Beachten Sie, dass einige Systeme möglicherweise nicht alle Grenzwerte implementieren. Insbesondere unterstützen einige Systeme keine prozessbezogenen Beschränkungen für Dateideskriptoren (unter Linux). Wenn dies bei Ihnen nicht der Fall ist, ist der Shell-Befehl möglicherweise ein No-Op.

Gilles
quelle
6
+1 für den Anwendungsfall der weichen Grenzen. Das residente Größenlimit ( ulimit -m, RLIMIT_RSS) ist ein Beispiel für ein Limit, das unter Linux nicht mehr gültig ist. Die Begrenzung des virtuellen Speichers ( ulimit -v, RLIMIT_AS) funktioniert jedoch.
Adam Zalcman
@ Gilles, meinst du, ohne den Prozess neu zu starten, wenn wir das weiche Limit ändern, kann es sofort wirksam werden?
Ryan
1
@Ryan Ja, ein Programm kann sein eigenes Soft-Limit jederzeit durch Aufrufen ändern setrlimit(soweit dies durch das Hard-Limit zulässig ist, sofern es nicht als Root ausgeführt wird). Die meisten Programme haben keinen Befehl, mit dem der Benutzer das tun kann, aber Sie können versuchen, mit einem Debugger eine Verbindung zum Programm herzustellen und einen setrlimitAufruf auszulösen, oder Sie können unter Linux einen Aufruf ausführen prlimit(für den ich keine Shell kenne) Nützlichkeit).
Gilles
1
Es gibt jetzt auch ein prlimitShell-Dienstprogramm.
TelcoM
0

Die harte Grenze ist für den Sicherheitszweck. Für einen Benutzer ohne Rootberechtigung kann er nur das Hard Limit von dem aktuell festgelegten Hard Limit herabsetzen. er kann es nicht erhöhen. Das Erhöhen des Hardlimits kann nur vom Root-Benutzer durchgeführt werden (oder möglicherweise mit sudo-Berechtigung, nicht sicher). Ein Benutzer ohne Rootberechtigung kann ein Limit (so genanntes Soft-Limit) auswählen, das für seine Prozesse im Bereich [0, Hard-Limit] liegen kann. Es ist die weiche Grenze, die von den Prozessen gesehen und berücksichtigt wird.

Ankit Shubham
quelle