Mengapa ulimit tidak berfungsi saat dijalankan dengan sudo?


Jawaban:


10

ulimitadalah shell / proses khusus. Lewati sudo.

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.