ulimit -n não mudando - valores limits.conf não tem efeito

11

Estou tentando aumentar o máximo de descritor de arquivo aberto para todos os usuários em uma máquina ubuntu.

Esta questão é um pouco de seguimento a esta pergunta.

abrir descriptor de arquivo configuração limits.conf não é lida por ulimit mesmo quando pam_limits.so é necessário

exceto que eu adicionei as entradas "root" necessárias no limits.conf

Aqui estão as entradas

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

As linhas relacionadas a pam_limits.so não foram comentadas em todos os arquivos relevantes em /etc/pam.d/ e fs.file-max foi configurado corretamente em /etc/sysctl.conf

No entanto, ainda vejo

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

após a reinicialização.

Qual poderia ser o problema?

Meu shell padrão é / bin / sh e não posso usar o chsh para alterar meu shell padrão, pois o meu usuário na máquina é autenticado por meio de um esquema de autenticação distribuída.

    
por Nerrve 23.01.2014 / 11:13

4 respostas

4

No servidor Redhat logado como root

/etc/security/limits.conf

user01  -       nofile  2048

comando strace logado como root

strace -o loglimit su - user01

com outro shell loglimit aberto

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

Eu sei que o pam_limits foi carregado e o limits.conf foi lido, se o seu pam_limits foi carregado mas você ainda vê outros valores usando o ulimit -n, verifique o seu perfil do shell como @etherfish told

    
por 23.01.2014 / 12:26
4

Eu tive um problema semelhante, mas apenas com logins SSH. Logins locais (via console) respeitam o /etc/security/limits.conf .

Como se viu, quando você define:

UsePrivilegeSeparation yes

no arquivo /etc/ssh/sshd_config , então o sshd bifurca um filho sem privilégios para configurar o env da conta. Como essa criança é desprivilegiada, então pam_limits.so definiu limites superiores não teve efeito.

Assim que eu definir

UsePrivilegeSeparation no

em /etc/ssh/sshd_config e devolveu o serviço SSH, então o arquivo limits.conf foi respeitado com logins SSH.

    
por 31.05.2017 / 21:39
3

Eu suspeito que o ulimit está sendo aplicado por um / etc / profile ou por um ~ / .bashrc. O fato de seu sistema ter um pam complicado, eu confirmaria que algo não está dando errado.

Eu também confirmo que não há um arquivo errante em /etc/security/limits.d/ sendo analisado como mencionado em pam_limits (8).

Eu adicionaria o parâmetro debug à sessão necessária na linha pam_limits.conf e depois observaria o /var/log/auth.log ao fazer o login.

Se o seu limite virtual é 1024, qual é o seu limite rígido?

su deve obter um novo login com su usando o argumento -l.

su-l -s / bin / bash

Boa sorte.

    
por 23.01.2014 / 12:05
3

Eu estava com um problema como este, aqui o que eu fiz.

O comando strace irá imprimir todas as interações que o processo está fazendo com bibliotecas externas, então com ele podemos ver se nossa configuração está carregada ou não.

Então, como sugerido acima:

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

No meu problema, o strace log (strace -o log su-username) não tem nenhuma instância de texto de limites, então o arquivo limits.conf NÃO foi carregado.

Primeiro eu tenho certeza que o pam_limits.so procura o /etc/security/limits.conf

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

Então, eu tenho certeza que o módulo pam_limits.so está carregado na operação auth em arquivos localizados em /etc/pam.d ... por exemplo, em /etc/pam.d/su, eu adicionei:

session   required    pam_limits.so

Agora, posso fazer um "su" para o meu usuário e os limites serão carregados. Você pode refazer o passo da sequência para ter certeza.

Meu linux é um LFS, então é minha culpa a ausência de pam_limits.so em arquivos /etc/pam.d. Em outras distros, não acho que seja exatamente esse o assunto.

Mas espero que isso ajude.

    
por 22.11.2014 / 15:31