"কেবলমাত্র সম্পাদন করুন" ফাইল অনুমতিের জন্য বৈধ ব্যবহারের কেস?


20

আমি chmod এবং এর অষ্টাল মোডে পড়া ছিল । আমি দেখেছি যে 1শুধুমাত্র চালানো হয়। কেবলমাত্র মৃত্যুদন্ড কার্যকর করার জন্য বৈধ ব্যবহারের কেস? একটি ফাইল কার্যকর করতে, কেউ সাধারণত অনুমতি পড়তে এবং সম্পাদন করতে চায়।

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo

উত্তর:


41

শেল স্ক্রিপ্টগুলির সম্পাদন করার জন্য পঠনের অনুমতি প্রয়োজন তবে বাইনারি ফাইলগুলি এটি করে না:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

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

ডিরেক্টরিগুলির জন্য, নির্বাহের অনুমতিটি কিছুটা আলাদা; তার মানে আপনি ফাইল জিনিস করতে পারেন মধ্যে ডিরেক্টরিটি (যেমন পড়া বা তাদের চালানো)। সুতরাং আসুন আমরা বলি /toolsযে আপনার কাছে সরঞ্জামগুলির একটি সেট রয়েছে যাতে আপনি চান যে লোকেরা ব্যবহার করতে সক্ষম হবেন, তবে কেবল তারা যদি সেগুলি সম্পর্কে জানেন তবে। chmod 711 /tools। তারপরে কার্যনির্বাহী জিনিসগুলি /toolsস্পষ্টভাবে চালানো যেতে পারে (যেমন /tools/mytool) তবে ls /tools/তা অস্বীকার করা হবে। একইভাবে, দস্তাবেজগুলি সংরক্ষণ করা /private-docsযেতে পারে যা কেবলমাত্র ফাইলের নাম জানা থাকলে এবং পড়া যায়।


1
ঘটনাক্রমে সিস্টেম বাইনারিগুলিতে কেবল এক্সিকিউটিভ সেট করার কোনও মানে নেই যতক্ষণ না আপনি বেনামে এফটিপি চালান।
জোশুয়া

1
এছাড়াও, ডিরেক্টরিতে এক্সিকিউটেবল বিট সেট করা cdআপনাকে এটিতে অনুমতি দেয় ।
বাগানের মাথা


1
বিটিডাব্লু, এখানে সি হেডার অন্তর্ভুক্ত করার দরকার stdio.hনেই। আমি এটি অপসারণ পরামর্শ দিচ্ছি।
স্পিক্যাট্রিক্স

1
@ কেভিন: সম্ভবত যেহেতু lsএবং ট্যাব সমাপ্তি কাজ না করা রক্ষণাবেক্ষণের কাজকে বিরক্তিকর করে তোলে এবং কোনও আসল সুরক্ষা সুবিধা দিলে এটি সামান্যই সরবরাহ করে। একজন আক্রমণকারী যে ফাইলগুলিতে আগ্রহী হতে পারে সেগুলির বেশিরভাগই যে কোনওভাবেই প্রমিত স্ট্যান্ডার্ড লোকেশনগুলিতে বা অন্য ফাইলগুলির ডেটা থেকে তাদের অবস্থানগুলি অপ্রত্যক্ষভাবে আবিষ্কার করা যেতে পারে (অন্যথায় যে ফাইলগুলি বৈধভাবে এই ফাইলগুলি ব্যবহার করে সেগুলি তাদের কোথায় সন্ধান করবে তা কীভাবে জানতে পারে?)।
ইলমারি করোনেন

4

জেন্টুতে, নির্বাহযোগ্য প্রোগ্রাম যা সেটুইড হয় (তাদের চালকের পরিবর্তে তাদের মালিকের অনুমতি নিয়ে চালানোর জন্য সেট করা হয়) সেগুলি পড়ার অ্যাক্সেস (মোড 4711) অস্বীকার করে। এটি সুবিধাগুলি বৃদ্ধিতে সহায়তার জন্য বাগের শোষণের বিরুদ্ধে সুরক্ষাের একটি স্তর যুক্ত করা হয়।

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

আধুনিক সিস্টেমে প্রায়শই অতিরিক্ত সুরক্ষাগুলি অন্তর্ভুক্ত করা হয় যা আরও কার্যকর, যেমন এএসএলআর , তবে 32-বিট প্ল্যাটফর্মগুলিতে উপস্থিত বিধিনিষেধগুলি এগুলিকে আরও সহজেই কাজে লাগাতে পারে।


নোট করুন যে সুরক্ষাটি কেবল উত্স-ভিত্তিক ডিস্ট্রোজে প্রযোজ্য। বাইনারি-ভিত্তিক ডিস্ট্রোস সহ, আক্রমণকারী কেবল আকর্ষণীয় জিনিসগুলি কোথায় তা নির্ধারণের জন্য প্রোগ্রামটির নিজস্ব কপিটি দেখতে পারে।
চিহ্নিত করুন

একটি এক্সিকিউটেবল-বাইনারিতে এম্বেড করা পাসওয়ার্ডও থাকতে পারে। ব্যবহারকারী প্রোগ্রামটি চালাতে পারে এবং এটি পাসওয়ার্ডটি সার্ভারে প্রেরণ করতে পারে, তবে ব্যবহারকারী এটি থেকে পাসওয়ার্ড পেতে সক্ষম হবেনা (সিস্টেমটি তাদের কোর ডাম্পগুলি তৈরি করার অনুমতি দেয় না)।
বর্মার

1

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

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied

1
এটি উল্লেখযোগ্য যে এটি দরকারী কারণ হ'ল কারণ যদি আপনি ফাইলের নাম জানেন তবে আপনি foo / বারটি পড়তে পারেন। আমি এটি ওয়েব সার্ভারে ব্যবহার করেছি।
র্যান্ডম 832

0

কোনও স্ক্রিপ্ট কার্যকর করার জন্য আপনার অনুমতি পড়তে হবে এবং সম্পাদন করতে হবে। স্ক্রিপ্টের বিষয়বস্তু পড়া যা এটি কার্যকর করতে দেয় তাই আপনাকে সক্ষম হতে হবে read and execute। অন্যথায়, আপনি এটি ছাড়া কোনও স্ক্রিপ্ট চালাতে পারবেন না।

কেবলমাত্র মৃত্যুদন্ড কার্যকর করার জন্য বৈধ ব্যবহারের কেস?

নিরাপত্তা। কেউ কেউ তাদের ফাইলগুলি সুরক্ষিত করতে এবং অন্যকে তাদের সম্পাদন বা ব্যবহার থেকে বিরত রাখতে চায়।


2
chmod 000অনুমতি বিবেচনা করবে কেউ কিছু ছাড়া root। কখনও কখনও আপনার কেবল সুরক্ষার জন্য এত বিস্তৃত হওয়া প্রয়োজন হয় না - এটি ব্যবহারকারীর উদ্দেশ্যগুলির উপর নির্ভর করে। করার জন্য, আসুন ফাইলটি "পুনরায় chmod" বলুন পাঠযোগ্য এবং লিখনযোগ্য অনুমতিগুলিতে ফিরে যাবার জন্য আপনাকে এগুলি করতে হবে root। আপনি যদি অ্যাক্সেস করতে সক্ষম না হন root, তবে এটি কঠিন প্রমাণিত হবে।
জর্ডান সেভেল

2
ধরা যাক আপনার কাছে সরঞ্জামগুলির একটি সেট রয়েছে /toolsযাতে আপনি চান যে লোকেরা ব্যবহার করতে সক্ষম হবেন, তবে তারা যদি সেগুলি সম্পর্কে জানেন তবেই। chmod 711 /tools। তারপর এক্সিকিউটেবল জিনিষ মধ্যে /tools স্পষ্টভাবে চালানো যেতে পারে, কিন্তু ls /tools/অস্বীকার করা হবে।
ডোপঘোটি

1
ভাল উত্তর! আমাকেও সেখানে কিছু শিখিয়েছে। বাইনারি ফাইলগুলি সম্পাদন করার জন্য পঠনের অনুমতিের প্রয়োজন হয় না কেন?
জর্ডান সেভেল

2
কারণ কোনও ফাইলের বিষয়বস্তু প্রদর্শন করা এবং সেগুলি সম্পাদন করা দুটি ভিন্ন জিনিস। শেল স্ক্রিপ্টগুলি একটি নতুন শেলের মধ্যে "পড়ার" দ্বারা "মৃত্যুদন্ড কার্যকর করা হয়" (যদি আপনি সরলীকরণটি ক্ষমা করে দেন), যার কারণে আপনাকে সেগুলি পড়তে সক্ষম হওয়া দরকার। বাইনারিরা সেই প্রক্রিয়াটি ব্যবহার করে না।
ডোপঘোটি

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