ulimit -n no cambia - valores limits.conf no tiene efecto

13

Estoy tratando de aumentar el descriptor de archivo abierto máximo para todos los usuarios en una máquina ubuntu.

Esta pregunta es algo así como un seguimiento de esta pregunta.

El archivo abierto descriptor limit.conf no es leído por ulimit incluso cuando se requiere pam_limits.so

excepto que he agregado las entradas "root" requeridas en limits.conf

Aquí están las entradas

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

Las líneas relacionadas con no pam_limits.sose han comentado en todos los archivos relevantes en /etc/pam.d/ y fs.file-maxse han configurado correctamente en /etc/sysctl.conf

Sin embargo, todavía veo

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

después de reiniciar.

¿Cual podría ser el problema?

Mi shell predeterminado es / bin / sh y no puedo usar chsh para cambiar mi shell predeterminado ya que mi usuario en la máquina se autentica a través de algún esquema de autenticación distribuido.

Nerrve
fuente
strace -o loglimit su - abc y después de eso egrep "(límite | abierto)" loglimit, tal vez la configuración de su pam sea incorrecta
c4f4t0r
@ c4f4t0r, la opción - su solo provoca un nuevo inicio de sesión cuando es el último argumento. Solo sé esto porque estaba leyendo esa página de manual. Además, como detalle, un usuario normal no puede dividir un binario raíz suid.
etherfish
como root necesita usar el comando strace -o loglimit su - abc
c4f4t0r
perdón por el spam pero tengo este tipo de problema unix.stackexchange.com/questions/200310/…
vladeli

Respuestas:

5

Tuve un problema similar, pero solo con inicios de sesión SSH. Los inicios de sesión locales (a través de la consola) respetaron el /etc/security/limits.conf.

Al final resultó que, cuando configuras:

UsePrivilegeSeparation yes

en el /etc/ssh/sshd_configarchivo, luego sshd bifurca a un hijo sin privilegios para configurar el entorno de la cuenta. Debido a que este hijo no tiene privilegios, entonces pam_limits.so establecer límites superiores no tuvo ningún efecto.

Tan pronto como me puse

UsePrivilegeSeparation no

en /etc/ssh/sshd_configy rebotó el servicio SSH, entonces el archivo limits.conf se respetaron los inicios de sesión con SSH.

usuario418149
fuente
2
En mi caso cambié sshd-config a UsePAM yes. (+1 por señalarme a sshd-config)
Randall Whitman
4

Sospecho que el ulimit está siendo aplicado por un / etc / profile o un ~ / .bashrc. El hecho de que su sistema tenga una pam complicada, confirmaría que algo no va mal.

También confirmaría que no hay un archivo errante en /etc/security/limits.d/ que se analiza como se menciona en pam_limits (8).

Agregaría el parámetro de depuración a la línea requerida pam_limits.conf y luego vería /var/log/auth.log al iniciar sesión.

Si su límite suave es 1024, ¿cuál es su límite duro?

su debería obtener un nuevo y nuevo inicio de sesión con su utilizando el argumento -l.

su -l -s / bin / bash

Buena suerte.

Etherfish
fuente
mi límite duro es 4096, es decirulimit -Hn
Nerrve
4

En el servidor Redhat registrado como root

/etc/security/limits.conf

user01  -       nofile  2048

comando strace registrado como root

strace -o loglimit su - user01

con otra concha abierta 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

De esta manera, sé que se cargó pam_limits y se leyó limit.conf, si se cargó su pam_limits pero aún ve otros valores usando ulimit -n, verifique su perfil de shell como @etherfish le dijo

c4f4t0r
fuente
3

Estaba con un problema como este, aquí lo que hice.

El comando strace imprimirá todas las interacciones que el proceso está haciendo con bibliotecas externas, por lo que con él podemos ver si nuestra configuración está cargada o no.

Entonces, sí, como se sugirió anteriormente:

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

En mi problema, el registro de strace (strace -o log su - nombre de usuario) no tiene ninguna instancia de texto de límites, por lo que el archivo limits.conf NO se cargó.

Primero me aseguro de que pam_limits.so busque /etc/security/limits.conf

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

Entonces, me aseguro de que el módulo pam_limits.so se cargue en la operación de autenticación en archivos ubicados en /etc/pam.d ... por ejemplo, en /etc/pam.d/su, agregué:

session   required    pam_limits.so

Ahora, puedo hacer un "su" para mi usuario y los límites se cargarán. Puede rehacer el paso de strace para asegurarse.

Mi Linux es un LFS, por lo que es mi culpa la ausencia de pam_limits.so en los archivos /etc/pam.d. En otras distribuciones, no creo que sea este problema exacto.

Pero espero que esto ayude.

tonelada
fuente
1

En mi caso (Centos 6.10), la versión mostró que después de establecer el límite desde /etc/security/limits.conf más adelante en el proceso de inicio de sesión, se restableció desde /etc/security/limits.d/90-nproc.conf para todos los que no usuarios raíz:

*          soft    nproc     1024
root       soft    nproc     unlimited
difuminar
fuente