Tôi mới nhận ra rằng hệ thống của tôi không giới hạn số lượng quy trình cho mỗi người dùng một cách chính xác, do đó không ngăn người dùng thực hiện ném bom và làm hỏng toàn bộ hệ thống:
user@thebe:~$ cat /etc/security/limits.conf | grep user
user hard nproc 512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.
Đây có phải là một lỗi hay tại sao nó lại bỏ qua giới hạn trong limits.conf
và tại sao không áp dụng giới hạn mà ulimit -n
nó tuyên bố?
Tái bút: Tôi thực sự không nghĩ giới hạn bộ nhớ bị ảnh hưởng trước giới hạn quá trình. Chiếc máy này có ram 8GB và nó chỉ sử dụng 4% trong số đó khi tôi thả bom ngã ba.
BIÊN TẬP:
Tôi quản lý để tái tạo điều này trên một đĩa CD trực tiếp. Vì vậy, tôi đoán đây phải là một lỗi. Về cơ bản, nó kết thúc việc tiêu diệt tất cả các quy trình, bao gồm cả những thứ quan trọng của hệ thống như X11, SSHD, v.v.
Bất kỳ người dùng có thể sụp đổ hệ thống.
user@thebe:~$ ulimit -u
1024
ulimit -u
tôi nhận được 31325. Khi tôi chạy, ulimit -u 512
nó sẽ chạy 512. Khi tôi chạy cái nĩa đó, phần còn lại của hệ thống của tôi vẫn ổn.
ulimit -u