Perché ulimit non funziona quando eseguito con sudo?


Risposte:


10

ulimitè specifico per shell / processo. Salta il sudo.

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384

Sono sorpreso sudonon ha dato un errore quando passato ulimit; di solito ha bisogno di un binario esterno, ma ulimitè incorporato nella shell.
anfetamachina,

@amphetamachine Dai un'occhiata which ulimit. Niente di sorprendente.
Daniel Beck

Questa risposta è orribilmente fuorviante e inutile, anche se basata su un granello di verità.
Hmijail piange le dimissioni il

3

La risposta di Daniel Beck non dice tutta la verità (in effetti è un po 'un gioco di prestigio), e non aiuta le persone che hanno davvero bisogno di fare "sudo ulimit".

Il problema è che

  • ulimit ha limiti soft e hard
  • una volta impostato il limite rigido, è necessario essere superutente per riportarlo più in alto
  • sudo avvia una nuova shell; quando lo esci, torni al tuo vecchio ulimit!

Spiegazione dettagliata

L'esempio di Daniel funziona solo in una situazione molto specifica (che per fortuna è quella predefinita).

controesempio:

$ ulimit -s 8191              # set both hard and soft limits
$ ulimit -s                   # show current soft limit
8191
$ ulimit -s 16384             # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

Quindi, hai impostato il limite ulimit -s, e quello è andato e hai impostato limiti sia soft che hard. Ora ti viene impedito di impostarlo più in alto.
A questo punto potresti pensare di provare sudo; ma non funzionerà, a causa di ciò che Daniel ha scritto.

$ sudo ulimit -s 16384        # maybe with sudo?
$ ulimit -s
8191
$

Quello che è successo qui è che ha sudoavviato una nuova shell, dove è stata eseguita ulimit; e in QUELLA shell, è stato impostato il nuovo ulimit. Ma poi quella shell ha finito il suo lavoro, è stata demolita, e ora sei tornato nella tua shell precedente con il suo precedente ulimit.

Prova:

$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s                           # It worked!
16384
# exit
exit
$ ulimit -s                           # ... but now we're back to the old ulimit.
8191
$

Allora, perché ha funzionato esattamente l'esempio di Daniel? A causa dei limiti hard e soft predefiniti di ulimit, poteva spingere il limite soft a quello hard. Possiamo farlo al rallentatore per mostrare il trucco:

$ ulimit -Ss                 # show the Soft limit
8192
$ ulimit -Hs                 # show the Hard limit
65532
$ ulimit -s                  # by default, shows the Soft limit
8192
$ ulimit -s 16384            # set both the Soft and Hard limit
$ ulimit -s                  # shows the Soft limit
16384
$ ulimit -Hs                 # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385            # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$

In sintesi: se imposti il ​​tuo limite rigido e vuoi aumentarlo, sei sfortunato in quella shell , ... a meno che tu non rimanga un superutente o usi un incantesimo per abbandonare i privilegi in seguito.

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.