কাঁটাচামচ বোমা থেকে রক্ষা করার জন্য কি লিনাক্সের কোনও ব্যবস্থা আছে?


12
#include <unistd.h>
int main(int argc, char* argv[]) {
  while(1)
  {
    fork();
  } 
}

আমি আমার লিনাক্সটিতে এই প্রোগ্রামটি চালাচ্ছি, টার্মিনালের কোনও ফলাফল নেই, ওএস মারা গেছে বলে মনে হচ্ছে। লিনাক্সের এমন প্রোগ্রামের কোনও সুরক্ষা ব্যবস্থা রয়েছে যা স্মৃতিশক্তি শেষ হতে পারে?


2
আমি সন্দেহ করি যে আপনি যদি অনেকগুলি ডিপ্রোস একটি বৃহত্তর অদলবদল তৈরির জন্য যে খারাপ পরামর্শ দেন, সেগুলি অনুসরণ না করেন ...
আর .. গিটিহাব স্টপ হেল্পিং আইসিসি

1
"65 কে আঘাত করার পরে কোনও নতুন প্রক্রিয়া তৈরি হচ্ছে না" কি কাউন্টার-পরিমাপ হিসাবে গণনা করা হয়? ;)
ববি

উত্তর:


18

এটি ফর্ক বোমা হিসাবে পরিচিত ।

লিনাক্সের এমন প্রোগ্রামের কোনও সুরক্ষা ব্যবস্থা রয়েছে যা স্মৃতিশক্তি শেষ হতে পারে?

আসলে তা না. প্রতিটি কাঁটাচামচ তার নিজস্ব ভার্চুয়াল ঠিকানার স্থান এবং মেমরির ব্যবহার সহ একটি নতুন প্রক্রিয়া তৈরি করে। সুতরাং প্রতিটি অনুলিপি তুলনামূলকভাবে ছোট। অবশেষে, আপনি সিস্টেমে সমস্ত শারীরিক + অদলবদল মেমরি ব্যবহার করবেন এবং মেমোরির বাইরে থাকা (ওওএম) ঘাতক পৃথক প্রক্রিয়াগুলি হত্যা শুরু করবে। তবে কাঁটাচামচ বোমাটি এখনও ঠিক তত দ্রুত (দ্রুত না হলে) প্রক্রিয়া তৈরি করবে।

প্রথমত এই ঘটনাটি রোধ করার একটি উপায় হ'ল ব্যবহারকারীর প্রক্রিয়া সংখ্যা সীমাবদ্ধ করা ulimit -u(আপনি ধরে নিচ্ছেন বাশ ব্যবহার করছেন বলে ধরে নেওয়া; অন্যান্য শেলের সমতুল্য হবে)।


2
একটি বিষয় লক্ষণীয় তা ulimitহ'ল বাশ; অন্যান্য শেলগুলির সম্ভবত অন্তর্নির্মিত কমান্ড একইরকম হতে পারে তবে অন্য কোনও নাম সহ হতে পারে।
জয়

@ জায়ে: ফেয়ার পয়েন্ট আমি এখন উত্তরে উল্লেখ করেছি যে, ধন্যবাদ!
অলিভার চার্লসওয়ার্থ

1
ব্যবহারকারী প্রতি মেমরি / ফাইল বর্ণনাকারীদের সীমাবদ্ধ করা যথেষ্ট হওয়া উচিত। ব্যবহারকারী প্রতি মেমরি সীমাবদ্ধ করা সর্বদা একটি ভাল ধারণা। কোনও প্রক্রিয়া মারা গেলে (ওওম), নজরদারিটি একটি বিজ্ঞপ্তি প্রেরণ করবে যাতে বিওএফএইচ 'দুর্বৃত্ত' ব্যবহারকারী ডাব্লু / সমস্ত সম্পর্কিত প্রক্রিয়াটি সিস্টেমের বাইরে বুট করতে পারে

আমি বিশ্বাস করি আপনি লগইন প্যারামিটারগুলির মাধ্যমেও কিছু সীমা নির্ধারণ করতে পারেন
p_l

10

হ্যাঁ, যদিও এটি আপনার সিস্টেমে ডিফল্টরূপে সক্ষম নাও হতে পারে। setrlimitব্যবহারকারী প্রতি প্রসেস সংখ্যা সহ - সিস্টেম কল সিস্টেম সীমা সংজ্ঞায়িত করে।

আসুন এটি প্রথমে কার্নেল এপিআইতে দেখি (যেহেতু আপনি "লিনাক্স" উল্লেখ করেছেন): আপনি সেট্রলিমিটের জন্য ম্যানপেজ ব্যবহার করতে পারেন, যা আপনাকে এমন কিছু করতে বলবে

#include <sys/resource.h>
...

struct rlimit  r;

rnew.r_cur = 40;
rnew.r_max = 50;
setrlimit(RLIMIT_NPROC,&r);

এটি ব্যবহারকারীর জন্য সর্বোচ্চ প্রক্রিয়াগুলি ( RLIMIT_NPROC) 40 এ (নরম সীমা) এবং 50 (হার্ড সীমা) নির্ধারণ করবে।

এখন, শেল থেকে, আপনি যদি ব্যাশ ব্যবহার করেন তবে আপনি ulimitবিল্ট-ইন কমান্ডটি ব্যবহার করতে পারেন :

ulimit -u
29089

আপনি এটি একটি আর্গুমেন্ট হিসাবে পাস করে সীমাটি সেট করতে পারেন:

ulimit -u 100

ulimit --help আপনাকে দেখাবে যে আপনি নির্ধারণ করতে পারেন এমন আরও কয়েকটি সীমাবদ্ধতা রয়েছে (ব্যবহারকারীদের দ্বারা ব্যবহৃত ফাইল বর্ণনাকারীর সর্বাধিক সংখ্যাই আগ্রহী হতে পারে)।


7

আপনি যদি এটি ব্যবহারকারীর স্তরে বা সিস্টেমের স্তরে ব্যবহার করতে চান তবে এটি নির্ভর করে। ব্যবহারকারীর স্তরে ulimit(বা অন্যান্য শেলগুলির জন্য সংশ্লিষ্ট কমান্ডগুলি) সবচেয়ে সহজ সমাধান হতে পারে।

তবে সিস্টেমের স্তরে দূষিত ব্যবহারকারীদের (বা কেবলমাত্র ইউলিমিট ব্যবহার না করে) সিস্টেমটি থামানো থেকে রোধ করার জন্য ব্যবস্থা রয়েছে। লিনাক্স সিগ্রুপ মেকানিজম প্রতি গ্রুপ ভিত্তিতে সংস্থানগুলি সীমাবদ্ধ করতে পারে। আপনি ( pam_systemdম্যাকানিজম দ্বারা ) ব্যবহারকারীর সেশনটি নির্দিষ্ট গোষ্ঠীতে বাধ্য করতে পারেন । এর অন্যান্য সুবিধা রয়েছে যেমন, সিপিইউ শিডিয়ুলার।


1
+1: সিগ্রুপগুলি সত্যই নতুন, এবং বেশিরভাগ লোকেরা তাদের সম্পর্কে এখনও বেশি কিছু জানে না। আমরা আরও কোথায় জানতে পারি?
কেন ব্লুম

1
@ কেনব্লুম: ১. ব্রাউজ করে /sys/fs/cgroup/২. গুগলে অনুসন্ধান করে ৩. ব্রাউজ করে make menuconfig4.. সন্ধান করে /usr/src/linux/Documentation/cgroups৫. সিস্টেমড ডকুমেন্টেশন পড়ে। দুঃখিত আমি আরও সাহায্য করতে পারি না তবে আমি কেবল সেগুলি ব্যবহার করেছি। আমি রিসোর্সগুলি নিয়ন্ত্রণ করতে ডেস্কটপে সিগ্রুপ ব্যবহার করেছি।
ম্যাকিয়েজ পাইচোটকা

6

ulimit -u"সর্বাধিক ব্যবহারকারীর প্রক্রিয়াগুলির" সীমা নির্ধারণ করতে ব্যাশ শেল থেকে ব্যবহার করুন ।

সি শেল থেকে আপনি limitকমান্ডটি ব্যবহার করুন ।

এটি করার জন্য যদি আপনার একটি সিস্টেম কল প্রয়োজন setrlimitহয়, সেট করতে কলটি ব্যবহার করুন RLIMIT_NPROC


1

যেহেতু এখানে সর্বাধিক সাম্প্রতিক উত্তরগুলি 3 বছরেরও বেশি পুরানো, আমি এটি উল্লেখ করতে চাই যে নতুন কার্নেলগুলি (4.3 থেকে) নতুন "পিআইডিএস সাবসিস্টেম" এর মাধ্যমে কাঁটাচামচ বোমা প্রতিরোধে স্পষ্ট সমর্থন পেয়েছে have ( Https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=49b786ea146f69c371df18e81ce0a2d5839f865c এবং https://git.kernel.org/cgit/linux/kernel/git দেখুন /torvalds/linux.git/commit/?id=917d8e2d10f40e28aa9e0d824b2e5b8197d79fc2 )

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.