ulimit -n non cambia - i valori limits.conf non hanno alcun effetto


13

Sto cercando di aumentare il massimo descrittore di file aperto per tutti gli utenti su una macchina Ubuntu.

Questa domanda è in qualche modo un seguito a questa domanda.

L'impostazione di descrittore di file aperto limits.conf non viene letta da ulimit anche quando è richiesto pam_limits.so

tranne che ho aggiunto le voci "root" richieste in limits.conf

Ecco le voci

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

Le righe correlate pam_limits.sosono state non commentate in tutti i file rilevanti in /etc/pam.d/ efs.file-max è stata impostata correttamente in /etc/sysctl.conf

Tuttavia, vedo ancora

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

dopo il riavvio.

Quale potrebbe essere il problema?

La mia shell predefinita è / bin / sh e non posso usare chsh per cambiare la mia shell predefinita poiché il mio utente sulla macchina è autenticato tramite uno schema di autenticazione distribuito.


strace -o loglimit su - abc e after that egrep "(limit | open)" loglimit, forse la tua configurazione di pam è sbagliata
c4f4t0r

@ c4f4t0r, l'opzione - su su provoca solo un nuovo login quando è l'ultimo argomento. Lo so solo perché stavo solo leggendo quella pagina man. Inoltre, come dettaglio, un utente normale non può tracciare un binario root suid.
etherfish,

come root devi usare il comando strace -o loglimit su - abc
c4f4t0r

scusate lo spam ma ho questo tipo di problema unix.stackexchange.com/questions/200310/…
vladeli

Risposte:


5

Ho avuto un problema simile, ma solo con accessi SSH. Gli accessi locali (tramite console) hanno rispettato il /etc/security/limits.conf.

Come si è scoperto, quando si imposta:

UsePrivilegeSeparation yes

nel /etc/ssh/sshd_configfile, quindi sshd crea un figlio senza privilegi per configurare l'account dell'account. Poiché questo figlio non è privilegiato, pam_limits.so l'impostazione dei limiti superiori non ha avuto alcun effetto.

Non appena ho impostato

UsePrivilegeSeparation no

in /etc/ssh/sshd_confige rimbalzato il servizio SSH, quindi il file limits.conf sono stati rispettati con i login SSH.


2
Nel mio caso ho cambiato sshd-config in UsePAM yes. (+1 per avermi indicato sshd-config)
Randall Whitman,

4

Sospetto che l'ulimit sia applicato da un profilo / etc / o da un ~ / .bashrc. Il fatto che il tuo sistema abbia un pam complicato, confermerei che qualcosa non va storto.

Confermerei anche che non esiste un file errante in /etc/security/limits.d/ che viene analizzato come indicato in pam_limits (8).

Aggiungerei il parametro di debug alla sessione richiesta linea pam_limits.conf e quindi guarderei /var/log/auth.log quando accedi.

Se il tuo limite soft è 1024, qual è il tuo limite hard?

su dovrebbe procurarti un nuovo accesso con su usando l'argomento -l.

su -l -s / bin / bash

In bocca al lupo.


il mio limite duro è 4096 cioèulimit -Hn
Nerrve il

4

Sul server Redhat registrato come root

/etc/security/limits.conf

user01  -       nofile  2048

comando strace registrato come root

strace -o loglimit su - user01

con altri loglimit shell aperti

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

In questo modo so che, pam_limits è stato caricato e limits.conf è stato letto, se il tuo pam_limits è stato caricato ma vedi ancora altri valori usando ulimit -n, controlla il profilo della shell come ha detto @etherfish


3

Ero con un problema come questo, ecco cosa ho fatto.

Il comando strace stamperà tutte le interazioni che il processo sta facendo con le librerie esterne, quindi con esso possiamo vedere se la nostra configurazione è caricata o meno.

Quindi, come suggerito sopra:

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

Nel mio problema, il registro strace (strace -o log su - username) non ha alcuna istanza di testo dei limiti, quindi il file limits.conf NON è stato caricato.

Per prima cosa mi assicuro che pam_limits.so cerchi /etc/security/limits.conf

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

Quindi, mi assicuro che il modulo pam_limits.so sia caricato in operazione auth nei file che si trovano in /etc/pam.d ... ad esempio, in /etc/pam.d/su, ho aggiunto:

session   required    pam_limits.so

Ora, posso fare una "su" al mio utente e i limiti verranno caricati. È possibile ripetere il passaggio della traccia per accertarsene.

Il mio Linux è un LFS, quindi è colpa mia l'assenza di pam_limits.so nei file /etc/pam.d. In altre distro non credo sia questo problema esatto.

Ma spero che questo aiuti.


1

Nel mio caso (Centos 6.10), strace ha mostrato che dopo che il limite era stato impostato da /etc/security/limits.conf in seguito nel processo di accesso, è stato ripristinato da /etc/security/limits.d/90-nproc.conf per tutti i non utenti root:

*          soft    nproc     1024
root       soft    nproc     unlimited
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.