রুট কিল init প্রক্রিয়া করতে পারে?


38

রুট কিল থম প্রক্রিয়া করতে পারে (পিড 1 সহ প্রক্রিয়া)? এর পরিণতি কী হবে?

উত্তর:


38

ডিফল্টরূপে, না, এটি অনুমোদিত নয়। লিনাক্সের অধীনে (থেকে man 2 kill):

একমাত্র সংকেত যা প্রক্রিয়াকরণ আইডি 1, আরম্ভ প্রক্রিয়াতে প্রেরণ করা যেতে পারে, সেগুলি হ'ল ডিআইডি স্পষ্টভাবে সংকেত হ্যান্ডলার ইনস্টল করেছে। সিস্টেমটি দুর্ঘটনাক্রমে নামা না দেওয়ার জন্য এটি করা হয়।

পিড 1 (init) নিজেকে হত্যা করার অনুমতি দেওয়ার সিদ্ধান্ত নিতে পারে, এই ক্ষেত্রে "কিল" মূলত এটি নিজেকে বন্ধ করার জন্য অনুরোধ। haltকমান্ডটি প্রয়োগের এটি একটি সম্ভাব্য উপায় , যদিও আমি initএটির কোনও বিষয়ে অবগত নই ।

একটি ম্যাকের উপর, launchdসিগন্যাল 15 (সিগিটারএম) দিয়ে হত্যা (তার আরম্ভিক অ্যানালগ) হ'ল তাত্ক্ষণিকভাবে সিস্টেমটি পুনরায় বুট করে দেবে, পরিষ্কারভাবে চলমান প্রোগ্রামগুলি বন্ধ করার বিরক্তি ছাড়াই। অপ্রকাশনীয় সিগন্যাল 9 (সিগ্কিল) দিয়ে এটিকে হত্যা করা কিছুই করে না, ম্যাকের kill()শব্দার্থকগুলি লিনাক্সের সাথে একইভাবে দেখায় ।

এই মুহুর্তে, আমার কাছে এমন একটি লিনাক্স বাক্স নেই যা আমি পরীক্ষা করতে ইচ্ছুক, সুতরাং লিনাক্স initএকটি সাইনটারমে কী করবে তা নিয়ে অপেক্ষা করতে হবে। এবং initআপস্টার্ট এবং সিস্টেমডের মতো প্রতিস্থাপন প্রকল্পগুলি আজকাল জনপ্রিয় হওয়ার সাথে সাথে উত্তরটি পরিবর্তনশীল হতে পারে।

আপডেট : লিনাক্সে, initস্পষ্টভাবে সিগনটারটিকে উপেক্ষা করে, তাই এটি কিছুই করে না। @jsbillings আপস্টার্ট এবং সিস্টেমড কি করে সে সম্পর্কে তথ্য রয়েছে।


1
দেখে মনে হচ্ছে আপনি এটি ইতিমধ্যে খুঁজে পেয়েছেন, তবে উত্তরসূরির
জান্ডার

1
আপনি initএকটি Segmentation fault( SIGSEGV) সিগন্যাল দিয়ে হত্যা করতে পারেন , যার ফলে কার্নেল আতঙ্ক দেখা দেবে:kill -SEGV 1
জনসন স্টুয়ার্ড

13

SysV init সিগিল বা সিগনটার সংকেত উপেক্ষা করে। একমাত্র সিগন্যাল যা রাজ্যে পরিবর্তনের কারণ হয়ে থাকে তা হ'ল এসআইপিপিডব্লিউআর যতদূর আমি বলতে পারি, কোন পাওয়ার-সম্পর্কিত শাটডাউনটি শিডিউল করে।

এটি প্রদর্শিত হয় যে আপস্টার্ট এবং সিস্টেমডও সিগকলের প্রতিক্রিয়া জানায় না এবং আমার পরীক্ষা থেকে এটি প্রদর্শিত হয় যে একটি সিগন্যার্টাম upstart এবং systemd পুনরায় সম্পাদন করে।

আমি নিশ্চিত নই যে অন্যান্য উত্তরদাতারা কী চালাচ্ছেন তবে আমি নিশ্চিত যে আপনি -9 (সিগিল) বা মারতে পারবেন না -১৫ (সিগনটার) থ্রি (পিড 1)। সম্ভবত আপনি যদি সক্ষম হন তবে আপনি কার্নেল প্যানিক পেয়ে যাবেন কারণ একটি অপ্রত্যাশিতভাবে শূন্য-বহির্গমন প্রস্থান কোডটি থেকে বেরিয়ে এসেছিলেন, যা আদর্শের চেয়ে কম হবে। এটি আপনার কম্পিউটারটি বন্ধ করে না, বা এটি পুনরায় বুট করার কারণ নয়।


6

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

আপনি, শিথিলভাবে, ইস্যু করার মাধ্যমে আর ডি মারতে পারেন kill -TERM 1যা একটি ইস্যু করার অনুরূপ হতে পারে haltবা shutdownসেই সূচনাতে সিগন্যালটি নিজেই সম্মানের আগে সমস্ত বাচ্চাদের, মূলত অন্য সমস্ত প্রক্রিয়াগুলিতে সিগন্যালটি পৌঁছে দেয়।

দয়া করে মনে রাখবেন: এই কমান্ড করণ ইচ্ছা শাটডাউন আপনার সিস্টেমে।

স্বাদ জন্য; এক ধরণের অন্যান্য প্রক্রিয়া যা সিগ্কিলকে "উপেক্ষা" করতে পারে তা নিরবচ্ছিন্ন ঘুমের মধ্যে একটি, যেমন i / o এর জন্য অপেক্ষা করা। ps axo stat,comm'ডি' স্ট্যাটাসের প্রসেসগুলি নিরবচ্ছিন্ন এমন একটি জারি করে এমন প্রক্রিয়া পাওয়া যায় ।


2
আসলে, আমার পরীক্ষাগুলি থেকে, kill -TERM 1বেশিরভাগ লিনাক্স সিস্টেমে নিজেকে আর এক্সিকিউট করার কারণ ছাড়া আর কিছুই করবে না এবং কোনও সিস্টেমকে আপনার সিস্টেম বন্ধ করার কারণ হতে পারে তা কেবল চালানোkill -PWR 1
jsbillings

এম্বেড করা লিনাক্স SBCs উপর @jsbillings আমি জারি সঙ্গে কাজ করছি kill -TERM 1স্পষ্টভাবে একটি পুনরায় বুট করার (প্রকৃতপক্ষে মধ্য দিয়ে যাচ্ছে ঘটায় ::shutdown:এন্ট্রি এবং inittab ফাইল অ্যাসোসিয়েটেড স্ক্রিপ্ট।)
সান ফ্রান্সিসকো।

প্রাথমিকভাবে দীর্ঘকাল ডি-ডি অবস্থায় থাকলে আপনার সিস্টেমটি সত্যই অসুস্থ।
জোশুয়া

6

আপনি initপ্রক্রিয়া পুনরায় আরম্ভ করতে পারেন । এটি inittabপুনরায় বুট না করে পরিবর্তন করার জন্য দরকারী ।

kill -HUP 1

সূত্র: http://www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/


1
initআমি জানি বাস্তবায়নে এই সংকেতটি প্রক্রিয়াটি পুনরায় আরম্ভ করতে দেয় না কেবল /etc/inittabফাইলটি পুনরায় লোড করার জন্য । --- বিপরীতটি systemctl daemon-reexecসত্যই পুনরায় সম্পাদন করতে systemd( initলিনাক্সের প্রতিস্থাপন) করে।
পাবউক

4

sudo kill -INT 1(বিঘ্নিত) সিস্টেম পুনরায় আরম্ভ করবে এবং sudo kill -SEGV 1, (বিভাজন লঙ্ঘন) বা sudo kill -ABRT 1(গর্ভপাত) কার্নেল আতঙ্ক তৈরি করবে।

নোট: sudo প্রয়োজনীয়।


2

ঠিক আছে, মূলটি লিনাক্সে init প্রক্রিয়াটিকে হত্যা করতে পারে:

strace -p 1 -o OUT &
kill -9 1

বিবরণ:

kill -9 1 কাজ করে না:

-bash-4.3# trace-cmd start -e signal_deliver -f 'common_pid == 1' -e signal_generate -f 'pid == 1'

-bash-4.3# echo "My first attempt" >/sys/kernel/debug/tracing/trace_marker
-bash-4.3# kill -9 1

-bash-4.3# trace-cmd show # there is no signal_deliver-event
...
        bash-164   [000] .N..    29.302996: tracing_mark_write: My first attempt
        bash-164   [000] d...    29.312586: signal_generate: sig=9 errno=0 code=0 comm=systemd pid=1 grp=1 res=1

সুতরাং, চলুন strace:

-bash-4.3# echo 1 >/proc/sys/kernel/ftrace_dump_on_oops
-bash-4.3# strace -p 1 -o OUT &
[1] 179
strace: Process 1 attached
-bash-4.3# echo "My second attempt" >/sys/kernel/debug/tracing/trace_marker
-bash-4.3# kill -9 1

bash-4.3# [  134.943439] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009
[  134.943439]
[  134.943439] CPU: 0 PID: 1 Comm: systemd Not tainted 4.7.2-201.fc24.x86_64 #1
[  134.943439] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.1-1.fc24 04/01/2014
[  134.943439]  0000000000000086 00000000610ec632 ffff88001ea43c10 ffffffff813d941f
[  134.943439]  ffffffff81a290c0 ffff88001ea43ca8 ffff88001ea43c98 ffffffff811b2cb6
[  134.943439]  ffffffff00000010 ffff88001ea43ca8 ffff88001ea43c40 00000000610ec632
[  134.943439] Call Trace:
[  134.943439]  [<ffffffff813d941f>] dump_stack+0x63/0x84
[  134.943439]  [<ffffffff811b2cb6>] panic+0xde/0x22a
[  134.943439]  [<ffffffff810a40ac>] do_exit+0xb6c/0xb70
[  134.943439]  [<ffffffff810a4137>] do_group_exit+0x47/0xb0
[  134.943439]  [<ffffffff810af3ed>] get_signal+0x28d/0x630
[  134.943439]  [<ffffffff81025f57>] do_signal+0x37/0x6c0
[  134.943439]  [<ffffffff8100325b>] ? do_audit_syscall_entry+0x4b/0x70
[  134.943439]  [<ffffffff810ca250>] ? wake_up_q+0x70/0x70
[  134.943439]  [<ffffffff8100330c>] exit_to_usermode_loop+0x8c/0xd0
[  134.943439]  [<ffffffff81003df3>] do_syscall_64+0x103/0x110
[  134.943439]  [<ffffffff817eb921>] entry_SYSCALL64_slow_path+0x25/0x25
[  134.943439] Dumping ftrace buffer:
[  134.943439] ---------------------------------
[  134.943439]     bash-154     0.... 10592888us : tracing_mark_write: My first attempt
[  134.943439]     bash-154     0d... 17328079us : signal_generate: sig=9 errno=0 code=0 comm=systemd pid=1 grp=1 res=1
[  134.943439]     bash-154     0.... 80772500us : tracing_mark_write: My second attempt
[  134.943439]     bash-154     0dN.. 85426791us : signal_generate: sig=9 errno=0 code=0 comm=systemd pid=1 grp=1 res=0
[  134.943439]  systemd-1       0d... 85437478us : signal_deliver: sig=9 errno=0 code=0 sa_handler=0 sa_flags=0
[  134.943439] ---------------------------------
[  134.943439] Kernel Offset: disabled
[  134.943439] ---[ end Kernel panic - not syncing: Attempted to kill     init! exitcode=0x00000009
[  134.943439]

মনে হচ্ছে যে কার্নেলের না প্রদান করা হয়েছে SIGKILLথেকে PID1যেহেতু github.com/torvalds/linux/commit/... একীভূত হয়ে যায়।
ইভজেনি Vereshchagin

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