Apa perbedaan antara batas keras dan lunak dalam ulimit?
Untuk jumlah file terbuka, saya memiliki batas lunak 1024 dan batas keras 10240. Dimungkinkan untuk menjalankan program yang membuka lebih dari 1024 file. Untuk apa batas lunaknya?
Apa perbedaan antara batas keras dan lunak dalam ulimit?
Untuk jumlah file terbuka, saya memiliki batas lunak 1024 dan batas keras 10240. Dimungkinkan untuk menjalankan program yang membuka lebih dari 1024 file. Untuk apa batas lunaknya?
Jawaban:
Batas keras hanya dapat dinaikkan oleh root (proses apa pun dapat menurunkannya). Jadi ini berguna untuk keamanan: proses non-root tidak bisa melampaui batas keras. Tetapi tidak nyaman karena proses non-root tidak dapat memiliki batas yang lebih rendah daripada anak-anaknya.
Batas lunak dapat diubah oleh proses kapan saja. Jadi nyaman selama proses bekerja sama, tetapi tidak baik untuk keamanan.
Kasus penggunaan umum untuk batas lunak adalah untuk menonaktifkan dump inti ( ulimit -Sc 0
) sambil tetap mempertahankan opsi untuk memungkinkannya untuk proses tertentu yang Anda debug ( (ulimit -Sc unlimited; myprocess)
).
The ulimit
perintah shell adalah pembungkus sekitar setrlimit
system call, sehingga di situlah Anda akan menemukan dokumentasi yang definitif.
Perhatikan bahwa beberapa sistem mungkin tidak menerapkan semua batasan. Secara khusus, beberapa sistem tidak mendukung batas per-proses pada deskriptor file (Linux mendukung); jika Anda tidak, perintah shell mungkin no-op.
ulimit -m
, RLIMIT_RSS
) adalah contoh batas yang tidak lagi efektif di Linux. Batas memori virtual ( ulimit -v
, RLIMIT_AS
) berfungsi, meskipun.
setrlimit
(sejauh diizinkan oleh batas keras kecuali berjalan sebagai root tentu saja). Sebagian besar program tidak memiliki perintah yang memungkinkan pengguna melakukan itu, tetapi Anda dapat mencoba melampirkan ke program dengan debugger dan membuatnya mengeluarkan setrlimit
panggilan, atau di Linux Anda dapat memanggil prlimit
(yang saya tidak tahu shell apa pun) utilitas).
prlimit
utilitas shell juga.
Batas kerasnya adalah untuk tujuan keamanan. Untuk pengguna non-root, ia hanya dapat mengurangi batas hard dari batas hard yang ditetapkan saat ini; dia tidak bisa meningkatkannya. Meningkatkan batas keras hanya dapat dilakukan oleh pengguna root (atau mungkin dengan hak istimewa sudo, tidak yakin tentang itu). Apa yang dapat dilakukan oleh pengguna non-root adalah memilih batas (disebut batas lunak) yang dapat berada dalam kisaran [0, batas keras] untuk prosesnya. Ini adalah batas lunak yang dilihat dan dipertimbangkan oleh proses.
ulimit -n
? Coba jalankan shell dengan nilai yang sangat rendah (bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
). Apa hasilnya?