Cách bảo vệ Ubuntu khỏi bom ngã ba


72

Tôi nghe ai đó nói về một quả bom ngã ba, tôi đã thực hiện một số nghiên cứu và tìm thấy một số thông tin khủng khiếp về một số nhân vật có vẻ ngoài kỳ lạ mà mọi người có thể yêu cầu bạn gõ vào dòng lệnh và kết quả là làm những điều xấu trên máy tính. Tôi chắc chắn sẽ không đưa ra các lệnh tôi không hiểu nhưng người ta không bao giờ biết điều gì có thể xảy ra.

Tôi nghe nói rằng một số HĐH cho phép quản trị viên đặt một số giới hạn đối với các quy trình của người dùng để giảm thiểu tác động của bom ngã ba, đây có phải là bảo vệ trong Ubuntu hay một người có đặc quyền sudo phải đặt điều này? Nếu vậy thì thế nào?

Câu trả lời:


73

Bạn có thể dễ dàng giới hạn số lượng quy trình có thể sinh ra trong Ubuntu và hầu hết các bản phân phối Linux khác bằng cách sửa đổi /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Sau đó thêm dòng này vào dưới cùng của tập tin đó:

*    hard     nproc     nnn

Ở đâu:

  • hard đặt giới hạn ở cấp kernel để không thể thay đổi mà không cần khởi động lại.
  • nproc là số lượng quá trình tối đa trên mỗi người dùng.
  • nnn là một số mà bạn nên tính toán cho hệ thống của mình bằng cách:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

Lệnh trên sẽ liệt kê tất cả các quy trình cho tất cả người dùng bao gồm các luồng , tổng hợp chúng và liệt kê tên người dùng với số lượng quy trình lớn nhất. Để đảm bảo an toàn, hãy mở bao nhiêu ứng dụng mà bạn thường cần trước khi chạy lệnh trên và sau đó nhân đôi số đó cho an toàn.

Sau khi giới hạn này được đưa ra, bạn sẽ cần khởi động lại, nhưng nó sẽ ảnh hưởng đến từng người dùng không root trên hệ thống. Vì vậy, nếu một quả bom ngã ba được thực thi bởi bất kỳ người dùng không phải root nào thì nó sẽ có giới hạn cứng đó.

Theo mặc định, giới hạn nhóm và ký tự đại diện không áp dụng cho người dùng root . Sử dụng tên người dùng theo nghĩa đen roottrong các quy tắc nếu bạn muốn áp dụng quy tắc cho siêu người dùng.

Ngoài ra, nếu bạn không muốn khởi động lại bất cứ lúc nào sớm, bạn có thể sử dụng sudo ulimit -u 800, điều này sẽ chỉ hạn chế trong phiên chạy nhưng có thể dễ dàng bị phá hủy bởi một quả bom ngã ba với các sudođặc quyền!

Sau khi khởi động lại, bất cứ thứ gì trong /etc/security/limits.confđó sẽ được sử dụng.

Một số thông tin bổ sung về bom ngã ba: Chúng không phải là phần mềm độc hại hay bất cứ thứ gì khủng khiếp. Chúng thường bao gồm một cái gì đó cơ bản như một tập lệnh tự gọi hai lần - do đó tăng sự hiện diện của nó trên máy theo cấp số nhân. Mặc dù chúng có dung lượng bộ nhớ nhỏ với tốc độ nhanh, chúng vẫn nhanh chóng lấp đầy tất cả RAM có sẵn và máy đóng băng hoặc khởi động lại. Nguy hiểm duy nhất là mất thông tin chưa được lưu. Tôi sẽ phân loại một cái nĩa nhiều hơn là một trò chơi khăm hơn là phần mềm độc hại.

Một lời nhắc nhở quan trọng:

Bạn hiếm khi thực hiện bất cứ điều gì trong dòng lệnh khi bạn không chắc chắn 98% hành động của nó. Nếu bạn không thể đọc các lệnh bạn đang thực thi - đừng làm điều đó. Điều này áp dụng gấp đôi cho các đoạn không thể đọc được của các ký tự hex / base64, có thể được sử dụng để che khuất tất cả các loại khó chịu. Nếu bạn không chắc chắn về lệnh, bạn luôn có thể tìm kiếm các hành động của nó trong Trang web Ubuntu và hãy thận trọng hơn khi sử dụng sudovì lệnh đó sẽ thực thi với tư cách là người dùng root.


@MarcoCeppi: số của bạn không còn xa đối với một người dùng Unity thông thường: đầu ra cho phép tính hiện là 404 cho hệ thống của tôi ...
Fabby

1
Nếu tôi, nói, đặt một cái gì đó như alias ":(){ :|: & };:"="echo 'No.'"trong của tôi .bashrc- nó sẽ thực hiện mỗi lần đăng nhập?
Đại

Có bất lợi nào khi chọn giới hạn nproc cao hơn không? Có vẻ như không có nhiều phòng với giới hạn ở mức hoặc thậm chí gấp đôi số quy trình hiện tại, liệu giới hạn có cao hơn nhiều, thậm chí 10.000 trở lên, vẫn có hiệu quả đối với bom ngã ba không? Khoảng bao nhiêu ram mỗi ngã ba / quá trình tiêu thụ? Có lẽ có một giới hạn xuất phát RAM phổ quát hơn?
Xen2050

1

Một cách đơn giản mà tôi thích là tạo bí danh mặc dù bí danh 'không phải lúc nào cũng được áp dụng, hãy kiểm tra câu trả lời ở trên.

alias :="echo No."

Hiện nay

$ :(){ :|: & };:
bash: syntax error near unexpected token `('

22
chắc chắn, đây là một giải pháp phổ biến; Làm thế nào để điều này dừng lại a(){ a|a & };a? (hoặc bất kỳ tên chức năng nào khác?)
mèo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.