straceএক্সিকিউটেবলের সাথে ব্যবহার করার সময় আমি উবুন্টু ১৪.০৪-তে কিছু আশ্চর্যজনক আচরণ পেয়েছি , যার উপর আমার পড়ার অনুমতি নেই। আমি ভাবছি যদি এটি কোনও বাগ হয়, বা যদি কিছু মানক এই অস্পষ্ট আচরণ নির্দেশ করে।
প্রথমে দেখা যাক আমি যখন ব্যাকগ্রাউন্ডে একটি সাধারণ এক্সিকিউটেবল শুরু করি এবং এর সাথে সংযুক্ত করি তখন কী হয়। প্রত্যাশিত হিসাবে এটি কাজ করে:
$ /bin/sleep 100 &
[2] 8078
$ strace -p 8078
Process 8078 attached
restart_syscall(<... resuming interrupted call ...>
পরবর্তী আমি একটি এক্সিকিউটেবলের সাথে চেষ্টা করি, যার উপর আমার কোনও পড়ার অনুমতি নেই:
---x--x--x 1 root root 26280 Sep 3 09:37 sleep*
এই চলমান প্রক্রিয়া সংযুক্ত করার অনুমতি নেই:
$ ./sleep 100 &
[1] 8089
$ strace -p 8089
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
এটিও আমি প্রত্যাশা করতাম। পড়ার অনুমতি ব্যতীত মৃত্যুদন্ড কার্যকর করার অনুমতি প্রদান করা খুব ভাল কাজ করে না, যদি আমি কেবল প্রক্রিয়াটির সাথে কোনও ডিবাগার সংযুক্ত করতে পারি এবং কার্যকরভাবে কার্যকর করা যায় এমন পদ্ধতিতে অনুমতিগুলি পড়তে পারি।
তবে যদি আমি ইতিমধ্যে সনাক্ত করা প্রক্রিয়াটির অধীনে এক্সিকিউটেবল শুরু করি তবে আমাকে তা করার অনুমতি দেওয়া হবে:
$ strace ./sleep 100
execve("./sleep", ["./sleep", "100"], [/* 69 vars */]) = 0
brk(0) = 0x9b7a000
এটি আমার জন্য অপ্রত্যাশিত। এটি কি সুরক্ষা বাগ, বা এটি কোনও মানক দ্বারা বাধ্যতামূলক কোনও বৈশিষ্ট্য?
EPERMমনে হচ্ছে get_dumpable()(কোর ডাম্পিং অনুমোদিত কিনা তা পরীক্ষা করার জন্যও ব্যবহৃত হয়, এভাবে "ডাম্পেবল") কল __ptrace_may_access()থেকে কল করা ptrace_attach()হয়েছিল kernel/ptrace.c।
execveকলগুলি করার সময়, প্রক্রিয়াটি ইতিমধ্যে চিহ্নিত করা থাকলে এক্সিকিউট করা ফাইলের অনুমতিগুলি পুনরায় পরীক্ষা করা হয় না। তাঁর প্রশ্ন কিনা তা ব্যবহারকারীকে যে একটি নিরাপত্তা বাগ অথবা একটি বাধ্যতামূলক বৈশিষ্ট্য (যদি আধুনিক, আমি এখনও এটি একটি নিরাপত্তা বাগ, স্পেসিফিকেশন শুধু একটি নিরাপত্তা বাগ বিবেচনা চাই) হয়।