ulimit -n not change - valores limits.conf não tem efeito


13

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

Esta questão é um pouco posterior a esta questão.

A configuração de limites de arquivo aberto do descritor de limites.conf não é lida pelo ulimit, mesmo quando pam_limits.so é necessário

exceto que eu adicionei as entradas "raiz" 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.sonão foram comentadas em todos os arquivos relevantes em /etc/pam.d/ e fs.file-maxforam definidas 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 consigo usar o chsh para alterar meu shell padrão, pois o meu usuário na máquina é autenticado por meio de algum esquema de autenticação distribuído.


strace -o LogLimit su - abc e depois que egrep "(limite | aberto)" LogLimit, talvez a sua configuração do PAM estão errados
c4f4t0r

@ c4f4t0r, a opção - su apenas causa um novo login quando é o último argumento. Só sei disso porque estava lendo essa página de manual. Além disso, como um detalhe, um usuário comum não pode rastrear um binário raiz suid.
precisa saber é o seguinte

como root, você precisa usar o comando strace -o loglimit su - abc
c4f4t0r

pena de spam, mas eu tenho esse tipo de problema unix.stackexchange.com/questions/200310/...
vladeli

Respostas:


5

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

Como se viu, quando você define:

UsePrivilegeSeparation yes

no /etc/ssh/sshd_configarquivo, o sshd bifurca um filho não privilegiado para configurar o env da conta. Como esse filho não tem privilégios, o pam_limits.so definir limites superiores não teve efeito.

Assim que eu definir

UsePrivilegeSeparation no

em /etc/ssh/sshd_confige saltou o serviço SSH, então o arquivo limits.conf foram respeitados nos logins SSH.


2
No meu caso, mudei o sshd-config para UsePAM yes. (+1 para mim apontando para sshd-config)
Randall Whitman

4

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

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

Eu adicionaria o parâmetro debug à linha pam_limits.conf da sessão necessária e depois observaria /var/log/auth.log enquanto você fazia login.

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

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

su -l -s / bin / bash

Boa sorte.


meu limite rígido é 4096 ieulimit -Hn
Nerrve

4

No servidor Redhat conectado como root

/etc/security/limits.conf

user01  -       nofile  2048

comando strace registrado como root

strace -o loglimit su - user01

com outro shell aberto 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

Eu desta maneira eu sei que, pam_limits foi carregado e limits.conf foi lido, se seus pam_limits foram carregados, mas você ainda vê outros valores usando ulimit -n, verifique seu perfil de shell como @etherfish disse


3

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

O comando strace imprimirá todas as interações que o processo está fazendo com bibliotecas externas, para que possamos 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 log de strace (strace -o log su - nome de usuário) não possui nenhuma instância de texto de limites; portanto, o arquivo limits.conf NÃO foi carregado.

Primeiro, verifique se o pam_limits.so procura pelo /etc/security/limits.conf

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

Portanto, verifique se o módulo pam_limits.so está carregado na operação de autenticação em arquivos localizados em /etc/pam.d ... por exemplo, em /etc/pam.d/su, adicionei:

session   required    pam_limits.so

Agora, posso criar um "su" para o meu usuário e os limites serão carregados. Você pode refazer a etapa de rastreamento para ter certeza.

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

Mas espero que isso ajude.


1

No meu caso (Centos 6.10), o strace mostrou que depois que o limite foi definido em /etc/security/limits.conf, mais tarde no processo de login, ele foi redefinido em /etc/security/limits.d/90-nproc.conf para todos os usuários root:

*          soft    nproc     1024
root       soft    nproc     unlimited
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.