উদাহরণস্বরূপ এক্সিকিউটেবলগুলি কেন মূলত / usr / sbin লিখনযোগ্য?


31

আপনি কি দয়া করে ব্যাখ্যা করতে পারেন যে বাইনারি সংকলিত ফাইলটিতে (উদাহরণস্বরূপ, /usr/sbin) rootব্যবহারকারীর জন্য লেখার অনুমতি রয়েছে কেন?

আমার জন্য, এটি সংকলিত হয়। এর অর্থ হ'ল সরাসরি লেখার কোনও ব্যবহার নেই এবং কোনওরকম সুরক্ষার সমস্যাতে ফাইলটি প্রকাশ করতে পারে।

একটি স্ক্রিপ্ট (উদাহরণস্বরূপ একটি bashফাইল) লিখিত হতে পারে কারণ এটি মূলত একটি পাঠ্য ফাইল, তবে কেন এটি সংকলিত ফাইলের জন্য কেন একই রকম যেখানে আমি জানি যতদূর লেখার প্রয়োজন নেই?

আপনার মতামতের জন্য আগাম ধন্যবাদ।


6
কেবল পরিষ্কার করার জন্য, আপনি ভাবছেন যে ব্যবহারকারী কেন rootবাইনারি ফাইলটিতে লেখার অনুমতি পেয়েছেন? আর কিছু না হলে প্যাকেজটি আপগ্রেড করার সময় এটি সহায়তা করবে।
এরিক রেনোফ

5
দ্রষ্টব্য যে বাইনারি ফাইলগুলি কেবলমাত্র সেই ফাইল যা আমরা সাধারণত ডিস্কে সরাসরি / সম্পাদনা করি। আমরা স্ক্রিপ্টগুলির মতো পাঠ্য ফাইলগুলি সহ এটি করতে পারি না কারণ পাঠ্য পরিবর্তনগুলি ফাইলটিতে লেখা না লেখার মধ্যেই অন্তর্ভুক্ত করে তবে ফাইলের মাঝখানে অতিরিক্ত বাইট যুক্ত করা বা ফাইলের মাঝখানে বাইটগুলি মোছা হয়। এটি fseek fwrit এর সাথে করা অসম্ভব। সুতরাং পাঠ্য ফাইলগুলির জন্য আমরা সাধারণত র‌্যামে পড়ি তারপরে পুরানো ফাইলটি মুছুন এবং র‌্যামের সামগ্রীগুলি ডিস্কে লিখুন (যেমন আমরা ওভাররাইট করি)। এছাড়াও, যখন আপনি এক্সিকিউটেবলগুলি ইনস্টল করেন, সরান বা প্রতিস্থাপন করেন, আপনি ডিস্কে লিখছেন যাতে আপনার লেখার অনুমতি প্রয়োজন।
slebetman

1
@ স্লেবেটম্যান: আপনি সরাসরি পাঠ্য ফাইল সম্পাদনা করতে পারেন। উদাহরণস্বরূপ, ফাইলটি খুলুন, এটিকে প্রসারিত করুন, এটিকে মেমরি মানচিত্র করুন, memmove()শেষ অংশটি শেষের দিকে সরানোর জন্য এবং একটি গর্ত খুলুন, তারপরে গর্তটিতে নতুন পাঠ্য সন্নিবেশ করুন। অথবা আপনি এটির জন্য pread()/ সিরিজ ব্যবহার করতে পারেন pwrite()
জ্যান

6
@EricRenouf বাস্তবিক, বাইনারি ফাইলে লেখার অনুমতি নেই না প্যাকেজ যে এটা রয়েছে আপগ্রেড করার প্রয়োজন নেই। প্যাকেজ আপগ্রেডে, পুরানো বাইনারি লিখিত হয় না; বাইনারি বর্তমানে চলমান থাকলে (অনুসন্ধান করুন ETXTBSY) আসলে এটি অসম্ভব । পরিবর্তে, পুরানো বাইনারি সরানো হয়েছে , এবং নতুন বাইনারি একই নামের একটি নতুন ফাইলে লিখিত হয়েছে। ফাইলগুলি অপসারণ করার জন্য কেবলমাত্র কেবলমাত্র ধারণকারী ডিরেক্টরিতে (যেমন, /usr/sbin/) সেগুলি রচনার অনুমতি প্রয়োজন হয় না ।
মার্সেলম

1
@ মার্সেলম: কড়া কথায় বলতে গেলে আপনি কেবল ফেসেক এবং লেখাই ব্যবহার করছেন না, আপনি বাকী র‌্যামে বাফার করছেন। আপনি বাকীটি অন্য কোনও ফাইলে বাফার করতে পারেন। অথবা আপনি একটি নতুন ফাইলে নতুন সামগ্রী লিখতে পারেন। এর মধ্যে কোনওটিই আপনাকে কোনও ধরণের বড় বাফার ছাড়াই পাঠ্য ফাইল প্রসারিত করতে দেয় না।
slebetman

উত্তর:


50

ফাইলগুলি /bin(বা অন্য কোনও স্ট্যান্ডার্ড ডিরেক্টরিতে যেখানে এক্সিকিউটেবলগুলি রাখা আছে) রুট দ্বারা লিখনযোগ্য কিনা তা আসলেই কিছু যায় আসে না। আমি যে লিনাক্স সার্ভারটি ব্যবহার করছি সেগুলিতে এগুলি মূল দ্বারা লিখিত হয়, তবে আমার ওপেনবিএসডি মেশিনে তারা তা করে না।

যতক্ষণ না তারা গ্রুপ বা "অন্য" দ্বারা লিখিত না হয়!

সুরক্ষার কোনও সমস্যা নেই যেমন, উদা

-rwxr-xr-x 1 root root 126584 Feb 18  2016 /bin/ls

যদি কেউ এটিকে ওভাররাইট করতে চায় তবে তাদের মূল হতে হবে এবং যদি সেগুলি হয় rootএবং এটি মুছে ফেলা হয় তবে তারা হয়

  1. একটি নতুন সংস্করণ ইনস্টল করা, বা
  2. আনাড়ি, বা
  3. ইতিমধ্যে রুট অনুমতি সহ একটি আক্রমণকারী ।

আরেকটি বিষয় বিবেচনা করা উচিত হ'ল রুট ফাইলটিতে রাইটিং লিখতে পারে তা রক্ষিত কিনা তা সুরক্ষিত হোক না কেন, কারণ ... রুট।

এটিও লক্ষ করুন যে "স্ক্রিপ্ট" বাইনারি ফাইলের মতোই কার্যকর কার্যকর। একটি স্ক্রিপ্টের লেখার প্রয়োজন হয় না "কারণ এটি একটি পাঠ্য ফাইল"। যদি কিছু হয় তবে সম্ভবত এটি একই ডিরেক্টরিতে অন্যান্য এক্সিকিউটেবলের মতো একই অনুমতি থাকা উচিত।

এখনই প্রতিটি কিছুর অনুমতি পরিবর্তন করবেন না! এটি সমস্ত ধরণের সর্বনাশ ডেকে আনতে পারে এবং সম্ভাব্যতা সঠিকভাবে সেট করা আছে কিনা তা যাচাই করতে পারে এমন প্যাকেজ পরিচালকদের সম্ভাব্য বিভ্রান্ত করতে পারে। যদি আপনি কোনও সুরক্ষা-সমালোচনামূলক অ্যাপ্লিকেশনটিতে ভুলভাবে অনুমতিগুলি ভুলভাবে পরিবর্তন করেন তবে এটি সিস্টেমটিকে দুর্বল করে তুলতে পারে।

কেবলমাত্র ধরে নিন যে এক্সিকিউটেবলের অনুমতিগুলি সঠিকভাবে সেট করা আছে, যদি না আপনি সত্যিই অদ্ভুত কিছু দেখেন, তবে সেক্ষেত্রে আপনার সম্ভবত স্টাফ পরিবর্তন শুরু করার পরিবর্তে যাচাই করার জন্য প্রাসঙ্গিক প্যাকেজ পরিচালকের সাথে যোগাযোগ করা উচিত।


মন্তব্য এবং চ্যাট থেকে কিছু ইতিহাসের ডাক পড়ল was

লিনাক্সে বাইনারিগুলির অনুমতিগুলির ইতিহাস আমার সম্পর্কে কিছুই জানা নেই। এটি অনুমান করা যেতে পারে যে তারা কেবল ডিরেক্টরি থেকে umaskলিনাক্সের ডিফল্ট থেকে ডিরেক্টরি থেকে অনুমতিগুলি উত্তরাধিকার সূত্রে পেয়েছিল , তবে আমি সত্যি জানি না।

আমি কী জানি ওপেনবিএসডি ডিফল্টরূপে 555 অনুমতি মোডের সাহায্যে বেস সিস্টেম 1 এ বাইনারি ইনস্টল করে -r-xr-xr-x। এটি একটি মেকফিল টুকরাতে নির্দিষ্ট করা হয়েছে /usr/share/mk/bsd.own.mkযা BINMODE555 এ সেট হয় (এটি ইতিমধ্যে সেট না করা থাকলে)। এটি পরে এক্সিকিউটেবলগুলি ইনস্টল করার সময় ব্যবহৃত make buildহয় /usr/src

আমি এই ফাইলটির জন্য টীকাযুক্ত সিভিএস লগটি দেখেছি এবং 1995 সালে নেটবিএসডি থেকে আমদানি করার পরে ফাইলটিতে এই লাইনটি অপরিবর্তিত রয়েছে।

নেটবিএসডি-তে, 1993 সালে ফাইলটি প্রথমবার সিভিএসে রাখা হয়েছিল , BINMODE555 সেট করা হয়েছিল।

ফ্রিবিএসডি প্রকল্পটি কমপক্ষে ১৯৯৪ সাল থেকে নেটবিএসডি-র মতো একই ফাইলটি ব্যবহার করেছে বলে মনে হয়েছে এবং পরবর্তীকালে প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিতে একটি ইঙ্গিত যুক্ত করা হয়েছে যে পুরাতন ফাইলগুলি বার্কলে সফটওয়্যার বিতরণের ৪.৪ বিএসডি প্রকাশের ছিল from

এর বাইরে, বার্কলে সিএসআরজি এসিসিসি-তে উত্সগুলি রেখেছিল তবে তাদের সংগ্রহশালা গিটহাব ২- এ গিট আকারে উপলব্ধ । আমরা যে ফাইলটি এখানে ফরেনসিক ট্রিটমেন্ট দিচ্ছি তা মনে হয় 1990 সালে কিথ বোস্টিক (বা তার নিকটবর্তী কেউ) দ্বারা প্রতিশ্রুতিবদ্ধ হয়েছিল ।

সুতরাং যে গল্প। যদি আপনি এটি কেন চান তবে আমি মনে করি আমাদের কিথকে জিজ্ঞাসা করতে হবে। আমি দয়া করে একটি পরিবর্তনের প্রতিশ্রুতিবদ্ধ বার্তাটি দেখার প্রত্যাশায় ছিলাম " এটি 555 হওয়া দরকার কারণ ... ", তবে তা নয়।

1 বিএসডি সিস্টেমে লিনাক্সের চেয়ে "বেস সিস্টেম" এবং "তৃতীয় পক্ষের প্যাকেজ" (পোর্ট / প্যাকেজ) তে আরও কঠোর বিভাগ রয়েছে। বেস সিস্টেমটি একটি সুসংহত ইউনিট যা অপারেটিং সিস্টেম চালনার জন্য সম্পূর্ণ সুযোগ সুবিধাগুলি সরবরাহ করে, যখন পোর্ট বা প্যাকেজগুলি "স্থানীয় সফ্টওয়্যার" হিসাবে দেখা হয় এবং এর অধীনে ইনস্টল করা হয় /usr/local

2 70 এর দশকের পর থেকে ইউনিক্স রিলিজের আরও বিস্তৃত গিটহাবের সংগ্রহশালাও উপলভ্য


1
উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। লেখার অনুমতি স্বাভাবিক কারণ এটি ব্যবহারকারীর রুট হওয়া সত্যিই গুরুত্বপূর্ণ নয় (তিনি কিছু করতে পারেন)। তবে, যেমনটি আসলে কিছু যায় আসে না, কেন এটি শুরু থেকে লেখার অনুমতি রাখি না? এটা কি নির্বিচারে সিদ্ধান্ত?
t1m0th33

1
@ t1m0th33 আমি বিশ্বাস করি এটি একটি স্বেচ্ছাসেবী সিদ্ধান্ত হতে পারে যে কেউ গ্রহণ করেছে, হ্যাঁ। যেমনটি আমি বলেছি, আমার ওপেনবিএসডি সিস্টেমে locations লোকেশনগুলির ফাইলগুলি লিখনযোগ্য নয় root
কুসালানন্দ

1
আমি মনে করি না যে এটি কারও দ্বারা সচেতন সিদ্ধান্ত। প্যাকেজ ম্যানেজারটি বিল্ড প্রক্রিয়া চলাকালীন শেষ হওয়া অনুমতি বিট দিয়ে ফাইল ইনস্টল করতে ডিফল্ট থাকে; লিংক তৈরি করার সময় অনুমতি নিয়ে ফাইলগুলি তৈরি করা হয়েছে 755 কারণ আপনি যা পেয়েছেন যখন আপনি mask7 থেকে উমাস্কটি বিয়োগ করেন এবং উমাস্ক রুট (ওএস বিক্রেতার বিল্ড মেশিনে) ছিল 022 কারণ বিল্ডিং 022 সকলের জন্য ডিফল্ট উমাস্ক এবং এটি মূলর জন্য 222 হবে অর্থহীন অতিরিক্ত কাজ।
হেনিং মাখোলম

8
"এখনই সমস্ত কিছুতে অনুমতি পরিবর্তন করতে যাবেন না!" আমি অনেক ব্যবহারকারী যেখানে করেনি উবুন্টু জিজ্ঞাসা উপর যে মত প্রশ্ন দেখতে chmod -R উপর /usrবা /var, এবং বিস্ময় - তাদের sudoকাজ করছে না বা অন্য কিছু কাজ করছে না।
সের্গেই কোলোডিয়াজনি

4
Icallyতিহাসিকভাবে মূলের লেখার অনুমতি না থাকায় কোনও প্রভাব পড়বে না (রুট যে কোনও কিছুকে chmod করতে পারে, এমনকি এটির প্রয়োজনও হয় না, কারণ রুট কখনই খোলা বা লেখার জন্য কোনও EPERM পায় না)। আমি ভাবছি যে 555 টি স্টাফটি শুরু হয়েছে কারণ মূলের পক্ষে এটি সীমাবদ্ধ রাখা সম্ভব হয়েছিল (সিকিউরলেভেলগুলি প্রথম কখন দেখা গিয়েছিল? একই সাথে প্রায় 4.4BSD বা 386BSD / নেটবিএসডি শুরু হয়েছিল?)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.