লিনাক্স সিস্টেমে এক্সিকিউট ফ্ল্যাগ সাবভার্ট করা হচ্ছে। কেন এটা সম্ভব?


23

যতক্ষণ পড়া এই , আমি দেখেছি নিম্নলিখিত কাজে লাগান:

% cp /usr/bin/id ~
% chmod -x ~/id
% ls -al ~/id
-rw-r--r-- 1 edd edd 22020 2012-08-01 15:06 /home/edd/id
% ~/id
zsh: permission denied: /home/edd/id
% /lib/ld-linux.so.2 ~/id
uid=1001(edd) gid=1001(edd) groups=1001(edd),1002(wheel)

এই স্নিপেটটি দেখায় যে আমরা সাধারণ অপ্রত্যাশিত ব্যবহারকারী হিসাবে ফাইল সিস্টেমের নির্বাহের অনুমতিগুলি তুচ্ছভাবেই পার্শ্ববর্তী করতে পারি। আমি এটি একটি উবুন্টু 12.04 এ চালিয়েছি।

লিনাক্স লোডার ফাইল (1) অনুসারে একটি ভাগ করা বস্তু হিসাবে এটির একটি এন্ট্রি পয়েন্ট রয়েছে যা এটি সরাসরি সম্পাদন করতে দেয়। এইভাবে কার্যকর করা হলে লিনাক্স লোডার ELF বাইনারিগুলির জন্য দোভাষী হিসাবে কাজ করে।

আমার ওপেনবিএসডি মেশিনে, তবে, এই শোষণ কার্যকর নয়, কারণ আপনি কোনও প্রোগ্রাম হিসাবে লোডার কার্যকর করতে পারেন না। ওপেনবিএসডি ম্যানুয়াল পৃষ্ঠাটি বলে: "ld.so নিজেই একটি ভাগ করা অবজেক্ট যা প্রাথমিকভাবে কার্নেল দ্বারা লোড করা হয়েছে"।

সোলারিস 9 এ এটি ব্যবহার করে দেখুন এবং আপনি একটি সেগফল্ট পাবেন। আমি নিশ্চিত নই যে অন্য কোথাও কী ঘটে।

আমার প্রশ্নগুলি তাই:

  • কেন ELF বাইনারি ব্যাখ্যা করার আগে লিনাক্স লোডার (সরাসরি মৃত্যুদন্ড কার্যকর করা হয়) ফাইল সিস্টেমের বৈশিষ্ট্যগুলি পরীক্ষা করে না ?
  • যদি এমন কোনও প্রক্রিয়া কেন প্রয়োগ করা হয় যা ফাইলগুলির সম্পাদনাকে মঞ্জুরি দেয় না, যদি এটি এত তুচ্ছভাবে পক্ষপাতহীন হয়? আমি কিছু মিস করেছি?

1
কোনও যুক্তিসঙ্গত কারণ নেই, তবে আপনি যদি কখনও আপনার সিস্টেমের মুছতে সক্ষম হন libc(আমি একবার করেছিলাম, একটি আর্চ বাক্স আপগ্রেড করেছি), আপনি এই সামান্য বিচক্ষণতার জন্য কৃতজ্ঞ হবেন।
new123456

1
@ new123456 ওহ ,শ্বর, সেই আপগ্রেডের পরে আইআরসি চ্যানেলটি হওয়া বেদনাদায়ক ছিল
রব

এটি লোডার , লিঙ্কার নয়।
মনিকা মনিকার ক্ষতি বন্ধ করুন

উত্তর:


33

executeঅনুমতিটির লক্ষ্যটি সাধারণভাবে মৃত্যুদণ্ড কার্যকর করা প্রতিরোধ করা নয় । (1) প্রোগ্রামগুলি বলতে কোন ফাইলগুলি নির্বাহ করা উচিত এবং (2) যখন সেটুইড বিট (ইত্যাদি) নির্দিষ্ট করা হয় তখন কোনও সুবিধাভোগী ব্যবহারকারী হিসাবে মৃত্যুদন্ড কার্যকর করা রোধ করতে হয় tell

লিঙ্কার হ্যাক মনে হয় এর চেয়ে কম শোষণ কম। আপনি আরও সহজেই পড়ার অনুমতি পেয়েছেন এমন কোনও এক্সিকিউটেবল ফাইল কার্যকর করতে পারেন:

$ cp unexecutable_file ~/runme
$ chmod +x ~/runme
$ ~/runme

আর্ক লিনাক্স ফোরামে এই আলোচনাটি দেখুন ।

সংক্ষেপে:

কার্যকর করা উচিত ফাইলগুলি চিহ্নিত করে

আপনি যখন শেল স্ক্রিপ্ট লেখেন, আপনি এটিকে এক্সিকিউটেবল হিসাবে চিহ্নিত করতে পারেন chmod +x। এটি আপনার শেলটিকে ইঙ্গিত দেয় যে আপনি এটি নির্বাহযোগ্য হতে চান (অন্যথায় সমস্ত শেল জানেন, এটি কেবল অন্য একটি সরল পাঠ্য ফাইল)। শেলটি টাইপ করার পরে এটি ট্যাব-সমাপ্তিতে প্রদর্শন করতে পারে ./Tab

একইভাবে: something.dডিরেক্টরিতে (উদাহরণস্বরূপ init.d) স্টার্টআপ বা নিয়ন্ত্রণ শেল স্ক্রিপ্টগুলি থাকে যা সাধারণত ডিমন দ্বারা স্বয়ংক্রিয়ভাবে কার্যকর করা হয়। আপনি ডিরেক্টরিতে একটি মন্তব্য বা README ফাইলটি একটি সাধারণ পাঠ্য ফাইল হিসাবে রাখতে পারেন। অথবা আপনি স্ক্রিপ্টগুলির মধ্যে একটি অস্থায়ীভাবে অক্ষম করতে চাইতে পারেন। আপনি সেই নির্দিষ্ট ফাইলটির জন্য এক্সিকিউট বিট সাফ করে এটি করতে পারেন। এটি ডিমনকে এটি এড়িয়ে যেতে বলে।

সুবিধাপ্রাপ্ত মৃত্যুদণ্ড কার্যকর করা রোধ করা হচ্ছে

setuidবিট মানে যখন ফাইলটি চালানো যে, এটি একটি নির্দিষ্ট ব্যবহারকারীর (যেমন রুট) হিসেবে মৃত্যুদন্ড কার্যকর করা হয়।

ফোরাম পোস্টটি এটি ভালভাবে ব্যাখ্যা করেছে:

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


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

সম্পাদনের অনুমতি নিয়ে ফাইল পড়ার অনুমতি থাকলেও কী হবে?
মিথ্যা রায়ান

@ লাইরিয়ান তাদের সম্পর্কে কী?
মনিকা

@ ব্রেন্ডনলং: আপনি অবশ্যই এগুলি অনুলিপি করতে পারবেন না, সুতরাং আপনি তাদের অনুমতিগুলি পরিবর্তন করতে পারবেন না। (তবে আপনি কেন চান, আমি বলতে পারি না - যেভাবেই অনুলিপিটি দিয়ে আপনি করতে পারেন কেবলমাত্র মৃত্যুদন্ড কার্যকর করার অনুমতিটি বাদ দিচ্ছে)
এমসাল্টার্স

9

আপনার যদি কোনও ফাইলে পঠিত অ্যাক্সেস থাকে তবে আপনি সর্বদা এটির অনুলিপি তৈরি করতে পারেন।

আপনি যদি কোনও ব্যক্তিগত অনুলিপি তৈরি করতে পারেন তবে আপনি সর্বদা সেই অনুলিপিকে কার্যকরযোগ্য হিসাবে চিহ্নিত করতে পারেন।

এটি এলডি-লিনাক্সের বাহিওরকে ব্যাখ্যা করে না তবে এটি ইঙ্গিত দেয় যে এটি খুব কার্যকর সুরক্ষা ফাঁক নাও হতে পারে।

আপনি কঠিন নিরাপত্তা চান, বিবেচনা SELinux- র


এটা খুব সত্য।
এড ব্যারেট

এটি কেবল একটি ধারণামূলক প্রশ্ন ছিল। আমি মনে করি আপনি ফাইল সিস্টেমেও ননেক্সেক সেট করতে পারেন।
এড ব্যারেট

2

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

$ mount -o noexec /dev/sdd1 /test
$ cd /test
$ cp /usr/bin/id .
$ ./id
-bash: ./id: Permission denied

স্পষ্টতই প্রশ্নটিতে উল্লিখিত লোডার ট্রিকটি ব্যবহার করে নেক্সেক বিকল্পটি ছড়িয়ে দেওয়া সম্ভব হত, তবে এটি কয়েকটি সংস্করণে কার্নেলের মধ্যে স্থির হয়েছিল।

থেকে http://linux.die.net/man/8/ মাউন্ট :

noexec

মাউন্ট করা ফাইল সিস্টেমে কোনও বাইনারি সরাসরি প্রয়োগের অনুমতি দেবেন না। (সম্প্রতি অবধি /lib/ld*.so / mnt / binary এর মতো কমান্ড ব্যবহার করে বাইনারি চালানো সম্ভব ছিল। লিনাক্স ২.৪.২৫ / ২.6.০ থেকে এই কৌশলটি ব্যর্থ হয়েছে))

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