ulimit -n ändert sich nicht - Werte limits.conf hat keine Auswirkung

13

Ich versuche, die maximale Anzahl offener Dateideskriptoren für alle Benutzer eines Ubuntu-Computers zu erhöhen.

Diese Frage ist eine Art Folgemaßnahme zu dieser Frage.

Die Einstellung des offenen Dateideskriptors limits.conf wird von ulimit nicht gelesen, auch wenn pam_limits.so erforderlich ist

mit der Ausnahme, dass ich die erforderlichen "root" -Einträge in der limits.conf hinzugefügt habe

Hier sind die Einträge

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000

pam_limits.soZugehörige Zeilen wurden in allen relevanten Dateien in /etc/pam.d/ nicht kommentiert und fs.file-maxin /etc/sysctl.conf korrekt gesetzt

Ich sehe jedoch immer noch

abc@machine-2:/etc/pam.d$ ulimit -n
1024

nach dem Neustart.

Woran könnte das liegen?

Meine Standard-Shell ist / bin / sh und ich kann chsh nicht verwenden, um meine Standard-Shell zu ändern, da mein Benutzer auf dem Computer über ein verteiltes Authentifizierungsschema authentifiziert wird.

Nerrve
quelle
strace -o loglimit su - abc und danach egrep "(limit | open)" loglimit, vielleicht ist deine pam-konfiguration falsch
c4f4t0r
@ c4f4t0r, die Option - auf su bewirkt nur dann eine neue Anmeldung, wenn dies das letzte Argument ist. Ich weiß das nur, weil ich gerade diese Manpage gelesen habe. Außerdem kann ein regulärer Benutzer eine suid-Root-Binärdatei nicht stracen.
Ätherfisch
als root benötigen Sie den Befehl Strace -o LogLimit su verwenden - abc
c4f4t0r
Entschuldigung für Spam, aber ich habe diese Art von Problem unix.stackexchange.com/questions/200310/…
vladeli

Antworten:

5

Ich hatte ein ähnliches Problem, aber nur mit SSH-Anmeldungen. Lokale Anmeldungen (über die Konsole) respektierten die /etc/security/limits.conf.

Wie sich herausstellte, wenn Sie einstellen:

UsePrivilegeSeparation yes

In /etc/ssh/sshd_configfile fordert sshd ein nicht privilegiertes Kind auf, die env des Kontos einzurichten. Da dieses Kind nicht privilegiert ist, hatte pam_limits.so das Festlegen von Obergrenzen keine Auswirkung.

Sobald ich gesetzt habe

UsePrivilegeSeparation no

Beim /etc/ssh/sshd_configSSH-Dienst wurde ein Bounce ausgeführt, und anschließend wurde die Datei limits.conf mit SSH-Anmeldungen berücksichtigt.

user418149
quelle
2
In meinem Fall habe ich sshd-config auf geändert UsePAM yes. (+1 für den Hinweis auf sshd-config)
Randall Whitman
4

Ich vermute, das ulimit wird von einem / etc / profile oder einem ~ / .bashrc angewendet. Die Tatsache, dass Ihr System eine komplizierte PAM hat, würde ich bestätigen, dass etwas nicht schief geht.

Ich würde auch bestätigen, dass es keine fehlerhafte Datei in /etc/security/limits.d/ gibt, die wie in pam_limits (8) erwähnt analysiert wird.

Ich würde der für die Sitzung erforderlichen Zeile pam_limits.conf den Parameter debug hinzufügen und dann beim Anmelden /var/log/auth.log beobachten.

Wenn Ihre weiche Grenze 1024 ist, was ist Ihre harte Grenze?

su sollte Ihnen ein neues, frisches Login mit su mit dem Argument -l ermöglichen.

su -l -s / bin / bash

Viel Glück.

Ätherfisch
quelle
meine harte Grenze ist 4096 dhulimit -Hn
Nerrve
4

Auf dem Redhat-Server als root angemeldet

/etc/security/limits.conf

user01  -       nofile  2048

Befehl strace als root angemeldet

strace -o loglimit su - user01

mit anderen Shell offen loglimit

grep "limit" loglimit
open("/lib64/security/pam_limits.so", O_RDONLY) = 6
 ..........
 ..........
 open("/etc/security/limits.conf", O_RDONLY) = 3
 read(3, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 1823
 open("/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
 setrlimit(RLIMIT_NOFILE, {rlim_cur=2*1024, rlim_max=2*1024}) = 0

Auf diese Weise weiß ich, dass pam_limits geladen und limits.conf gelesen wurde. Wenn Ihre pam_limits geladen wurden, aber Sie mit ulimit -n noch andere Werte sehen, überprüfen Sie Ihr Shell-Profil, wie @etherfish sagte

c4f4t0r
quelle
3

Ich war mit einem Problem wie diesem hier, was ich getan habe.

Der Befehl strace gibt alle Interaktionen aus, die der Prozess mit externen Bibliotheken ausführt, sodass wir sehen können, ob unsere Konfiguration geladen ist oder nicht.

Also mache ich, wie oben vorgeschlagen:

root:/etc/pam.d$ strace -o ~/loglimit su - glaudiston
glaudiston:~$ exit
logout
root:/etc/pam.d$ cat ~/loglimit | grep limits.conf

In meinem Problem enthält das Strace-Protokoll (strace -o log su - Benutzername) keine Instanz von Limits-Text, daher wurde die Datei limits.conf NICHT geladen.

Zuerst stelle ich sicher, dass die Datei pam_limits.so nach /etc/security/limits.conf sucht

root:/etc/pam.d$ strings /lib/security/pam_limits.so | grep limits.conf
/etc/security/limits.conf

Also stelle ich sicher, dass das Modul pam_limits.so in der Auth-Operation in Dateien geladen wird, die sich unter /etc/pam.d befinden.

session   required    pam_limits.so

Jetzt kann ich meinem Benutzer ein "su" zuweisen und die Limits werden geladen. Sie können den Strace-Schritt wiederholen, um sicherzugehen.

Mein Linux ist ein LFS, also ist mein Fehler das Fehlen von pam_limits.so in /etc/pam.d Dateien. In anderen Distributionen glaube ich nicht, dass genau dies der Fall ist.

Aber ich hoffe das hilft.

Tonne
quelle
1

In meinem Fall (Centos 6.10) zeigte Strace, dass nach dem Festlegen des Limits aus /etc/security/limits.conf später beim Anmeldevorgang dieses aus /etc/security/limits.d/90-nproc.conf für alle Nicht- Benutzer zurückgesetzt wurde -stammnutzer:

*          soft    nproc     1024
root       soft    nproc     unlimited
verwischen
quelle