Mengapa ulimit tidak berfungsi saat dijalankan dengan sudo?

9

Baik..

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

Mengapa ulimitsaya tidak menghargai saya dengan cara yang begitu biadab?

ntl0ve
sumber
1
Anda akan memiliki masalah yang sama dengannya cd.
David Schwartz

Jawaban:

10

ulimitadalah shell / proses khusus. Lewati sudo.

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
Daniel Beck
sumber
Saya terkejut sudotidak memberikan kesalahan ketika melewati ulimit; biasanya membutuhkan biner eksternal, tetapi ulimitshell builtin.
amphetamachine
@amphetamachine Lihat which ulimit. Tidak ada yang mengejutkan tentang itu.
Daniel Beck
Jawaban ini sangat menyesatkan dan tidak membantu, bahkan jika didasarkan pada butir kebenaran.
hmijail meratapi orang-orang yang mengundurkan diri
3

Jawaban Daniel Beck tidak mengatakan yang sebenarnya (sebenarnya itu sulap), dan tidak membantu orang yang perlu melakukan "sudo ulimit".

Masalahnya adalah

  • ulimit memiliki batas lunak dan keras
  • setelah Anda menetapkan batas keras, Anda harus menjadi superuser untuk mengembalikannya lebih tinggi
  • sudo memulai sebuah shell baru; ketika Anda keluar, Anda kembali ke ulimit lama Anda!

Penjelasan detail

Contoh Daniel hanya berhasil dalam situasi yang sangat spesifik (yang untungnya adalah default).

Contoh tandingan:

$ 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

Jadi, Anda mengatur batas dengan ulimit -s, dan itu pergi dan menetapkan batas lunak dan keras. Sekarang Anda diblokir dari pengaturan yang lebih tinggi.
Pada titik ini Anda mungkin berpikir untuk mencoba sudo; tetapi itu tidak akan berhasil, karena apa yang ditulis Daniel.

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

Apa yang terjadi di sini adalah sudomemulai shell baru, tempat shell itu berlari ulimit; dan di shell ITU, ulimit baru ditetapkan. Tetapi kemudian shell itu menyelesaikan pekerjaannya, dihancurkan, dan sekarang Anda kembali ke shell sebelumnya dengan ulimit sebelumnya.

Bukti:

$ 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
$

Jadi, mengapa teladan Daniel bekerja? Karena batas keras dan lunak standar ulimit, ia dapat mendorong batas lunak ke batas keras. Kita bisa melakukannya dengan gerakan lambat untuk menunjukkan triknya:

$ 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
$

Singkatnya: jika Anda menetapkan batas keras dan ingin mendorongnya, Anda kurang beruntung dalam shell itu , ... kecuali Anda tetap sebagai pengguna super atau menggunakan mantra untuk menjatuhkan hak istimewa setelahnya.

hmijail meratapi para pengungsi
sumber