আরএম কেন কেবল পঠনযোগ্য ফাইল সরিয়ে ফেলতে পারে?


91

আমি যদি একটি ফাইল তৈরি করি এবং তার অনুমতিগুলি 444(কেবলমাত্র পঠনযোগ্য) এ পরিবর্তন করি তবে কীভাবে আসবে rmএটি এটিকে সরাতে পারে?

আমি যদি এটি করি:

echo test > test.txt
chmod 444 test.txt
rm test.txt

... rmআমি জিজ্ঞাসা করব যে আমি লিখন-সুরক্ষিত ফাইলটি সরাতে চাই কিনা test.txt। আমি প্রত্যাশা করতাম যে এই rmধরণের ফাইল সরাতে পারে না এবং এটি আমাকে chmod +w test.txtপ্রথমে করতে হবে । আমি যদি তা করি rm -f test.txtতবে rmএটি কেবল পঠনযোগ্য সত্ত্বেও জিজ্ঞাসা না করেই ফাইলটি সরিয়ে ফেলবে।

কেউ কি স্পষ্ট করতে পারেন? আমি উবুন্টু 12.04 / ব্যাশ ব্যবহার করছি।


স্পষ্টকরণ: আমি এই নিয়মগুলি আমার নিয়মিত ব্যবহারকারী হিসাবে চালাচ্ছি, মূল হিসাবে নয়।
ম্যাগনাস

উত্তর:


104

সমস্ত rmপ্রয়োজন হ'ল পিতামাতার ডিরেক্টরিতে অনুমতি চালানো + লিখুন। ফাইলের অনুমতিগুলি অপ্রাসঙ্গিক।

এখানে এমন একটি রেফারেন্স রয়েছে যা অনুমতিগুলির মডেলটি আমার চেয়ে আরও পরিষ্কারভাবে ব্যাখ্যা করে:

কোনও ফাইলের ডেটা অ্যাক্সেস করার যে কোনও প্রয়াসের পড়ার অনুমতি প্রয়োজন। কোনও ফাইলের ডেটা পরিবর্তন করার যে কোনও প্রয়াসের লেখার অনুমতি দরকার। কোনও ফাইল (একটি প্রোগ্রাম বা স্ক্রিপ্ট) কার্যকর করার যে কোনও প্রয়াসের জন্য মৃত্যুদন্ড কার্যকর করার অনুমতি প্রয়োজন ...

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

কোনও ডিরেক্টরিতে এটি সিডি করতে সক্ষম হওয়ার জন্য নির্ধারিত অনুমতি প্রয়োজন (এটি কোনও ডিরেক্টরিকে আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি তৈরি করতে)।

এর মধ্যে ফাইলগুলির "ইনোড" তথ্য অ্যাক্সেস করতে একটি ডিরেক্টরিতে এক্সিকিউট প্রয়োজন। এর মধ্যে থাকা ফাইলগুলির ইনোডগুলি পড়তে আপনাকে একটি ডিরেক্টরি অনুসন্ধান করতে হবে। এই কারণে কোনও ডিরেক্টরিতে মৃত্যুদন্ড কার্যকর করার অনুমতিটিকে তার পরিবর্তে প্রায়শই অনুসন্ধানের অনুমতি বলা হয়।


2
সুতরাং আমি যদি এমন একটি ডিরেক্টরি তৈরি করতে চাই যেখানে প্রথমে chmod না করে কিছু ফাইল মুছে ফেলা / পরিবর্তন করা যায় না, তবে অন্যরা নির্দ্বিধায় লেখার যোগ্য হতে পারে, তা কি অসম্ভব? আমাকে 555 ডিরেক্টরিটি chmod করতে হবে যার অর্থ ডিরেক্টরিতে কোনও ফাইল তৈরি বা পরিবর্তন করা যাবে না।
ম্যাগনাস

3
@ ম্যাগনাস - অবশ্যই, আপনাকে কেবলমাত্র পঠনযোগ্য ডিরেক্টরিতে লিখনযোগ্য শিশু ডিরেক্টরি তৈরি করা এবং এর ভিতরে আপনার লিখনযোগ্য ফাইলগুলি সংরক্ষণ করা কিছুই নেই। চাইল্ড ডিরেক্টরি নিজেই মোছা যায় না, তবে এর সামগ্রীগুলি পারে।
ire_and_curses

7
আপনি কি ডিরেক্টরিটি স্টিকি দিয়ে তৈরি করতে পারবেন না +tযাতে লোকেদের ডিরেক্টরিতে লেখার অ্যাক্সেস থাকা সত্ত্বেও সেই ডিরেক্টরিতে থাকা ফাইলগুলিকে আর পরিবর্তন করতে বা মুছে ফেলা যায় না?
শাদুর

3
@ ম্যাগনাস যদি আপনার রুট অ্যাক্সেস থাকে (সুডো সহ), আপনি chattrফাইলগুলিতে অপরিবর্তনীয় পতাকা যুক্ত করতে ব্যবহার করতে পারেন । যদি তা না হয় তবে ire_and_curses বেশ সঠিক।
জেমস ও'গর্মন

6
আরএম -f ব্যবহার না করা কেবলমাত্র যতক্ষণ আমি স্বচ্ছ ... প্লাস, আমি জানি না যে আমি যে রিটার্ডেড বাশ স্ক্রিপ্টগুলি লিখি তা কী করতে পারে
ম্যাগনাস

53

ঠিক আছে, ire_and_curses এর আপনার মন্তব্য অনুসারে আপনি যা করতে চান তা হ'ল কিছু ফাইল অপরিবর্তনীয়। আপনি chattrকমান্ড দিয়ে এটি করতে পারেন । উদাহরণ স্বরূপ:

যেমন

$ cd /tmp
$ touch immutable-file
$ sudo chattr +i immutable-file

$ rm -f immutable-file
rm: remove write-protected regular empty file `immutable-file'? y
rm: cannot remove `immutable-file': Operation not permitted

$ mv immutable-file someothername
mv: cannot move `immutable-file' to `someothername': Operation not permitted

$ echo foo > immutable-file 
-bash: immutable-file: Permission denied

আপনি কোন অপরিবর্তনীয় ফাইলের জন্য কিছুই করতে পারবেন না - আপনি এটি মুছতে, সম্পাদনা করতে, ওভাররাইট করতে, পুনরায় নামকরণ, chmod বা এটি chown বা অন্য কিছু করতে পারবেন না। আপনি কেবল এটির সাথে যা করতে পারেন তা হ'ল (যদি ইউনিক্স অনুমতি দেয় তবে) এবং (রুট হিসাবে) chattr -iঅপরিবর্তনীয় বিট অপসারণ করা।

সমস্ত ফাইল সিস্টেম সমস্ত বৈশিষ্ট্য সমর্থন করে না। আফাইক, অপরিবর্তনীয় সমস্ত সাধারণ লিনাক্স ফাইল সিস্টেম দ্বারা সমর্থিত (Incl ext2 / 3/4 এবং xfs। Zfsonlinux এই মুহুর্তে বৈশিষ্ট্যগুলি সমর্থন করে না)


3
এটি মাঝে মাঝে দরকারী। বিটিডব্লিউ, এমনকি রুটও অপরিবর্তনীয় ফাইলটি পরিবর্তন করতে বা মুছতে পারে না (প্রথমে অপরিবর্তনীয় বৈশিষ্ট্য অপসারণ না করে)। এছাড়াও বিটিডব্লিউ, lsattrবৈশিষ্ট্যগুলি তালিকাবদ্ধ করতে ব্যবহার করুন ।
ক্যাস

2
+1 - আমি গুণাবলীর কথা ভুলে গিয়েছিলাম এবং আক্ষরিক প্রশ্নের উত্তর দিতে এতটাই ব্যস্ত ছিলাম rmযে এটি আমার কাছে কখনও ঘটেনি ...
ire_and_curses

2
এটি ফাইল সিস্টেম নির্দিষ্ট এবং এটি আপনার সমাধান করে এমন আরও সমস্যা আনতে পারে।
স্টাফেন গিমেনেজ

4
@ ম্যাগনাস: সম্ভাব্য সমস্যাগুলির মধ্যে রয়েছে ব্যাকআপ (সমস্ত ব্যাকআপ ইউটিলিটিস বৈশিষ্ট্যগুলি ব্যাকআপ করবে না - বাস্তবে, বেশিরভাগই হবে না) এবং পুনরুদ্ধার করে (আপনি যদি এমন ডিরেক্টরিতে পুনরুদ্ধার করেন যা ইতিমধ্যে একটি অপরিবর্তনীয় ফাইল রয়েছে তবে কিছু প্রোগ্রাম সেই ফাইলটি ওভাররাইট করতে অক্ষমতার সাথে আচরণ করবে) মারাত্মক ত্রুটি এবং গর্ভপাত হিসাবে)। এছাড়াও আপনি নিজেরাই বিভ্রান্তি সৃষ্টি করতে পারেন যদি আপনি ভুলে যান যে আপনি কোনও ফাইল অপরিবর্তনীয় করে ফেলেছেন এবং কেন আপনি এটি মুছতে পারবেন না তা বুঝতে পারেন না .... 'অপারেশন অনুমোদিত নয়' ত্রুটি বার্তাটি একই ধরণের বার্তা যা আপনি কিছু ধরণের ফাইল সিস্টেমের সাথে দেখেন দুর্নীতি, যা সম্ভাব্য বিপজ্জনক অতিরিক্ত প্রতিক্রিয়া হতে পারে।
ক্যাস

1
আপনি একটি অপরিবর্তনীয় ফাইল অনুলিপি (সিপি) করতে পারেন
অক্টোপাস

0

এই প্রশ্নের একটি উত্তরে দাবি করা হয়েছে যে আপনি ডিরেক্টরি থেকে কোনও ফাইল মুছতে পারেন কেবলমাত্র তার writeঅনুমতি থাকলে তা সম্পূর্ণই ভুল! এটা চেষ্টা করুন! একটি ডিরেক্টরিকে কেবল writeঅনুমতি দিন এবং মুছতে চেষ্টা করুন, আপনি পারবেন না!
একটি ডিরেক্টরি আপনি উভয় প্রয়োজন ভিতরে একটি ফাইল মুছে ফেলতে writeএবং executeঅনুমতি ডিরেক্টরি

এখন প্রশ্নে ফিরে যান: কোনও ফাইল মুছে ফেলার জন্য rmআপনি কেবল ডিরেক্টরি থেকে তার ইনোড তথ্য সরিয়ে ফেলছেন, আপনি shreddingএটি ডিস্ক থেকে নন । যদি ফাইলের ইনোড তথ্য ডিরেক্টরিতে না থাকে তবে আপনি অ্যাক্সেস করতে পারবেন না (কারণ এটি এটি দেখতে পারবেন না কারণ এটি এর পিতামহিত ডিরেক্টরি দ্বারা তালিকাভুক্ত নয়) অর্থাৎ এটি আপনার জন্য মুছে ফেলা হয়েছে।
সুতরাং ডিরেক্টরি থেকে কোনও ফাইল মুছতে আপনার ডিরেক্টরিতে যা অনুমতি রয়েছে; এই ফাইলটিতে অনুমতিগুলি অপ্রাসঙ্গিক

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