রুট বা সুডোর না হয়ে কোনও আলাদা ব্যবহারকারীর সাথে শুরু হওয়া প্রক্রিয়াটিকে কীভাবে হত্যা করা যায়?


20

লিনাক্স এনভায়রনমেন্টে আমার এমন একটি প্রক্রিয়া মারতে হবে যা ইউজার 2 দ্বারা শুরু করা হয়েছে যদি আমি ইউজার 1 না হয়ে sudoers বা রুট না ব্যবহার করি। প্রক্রিয়া চালু করার সময় সেটিংসের কোনও উপায় আছে কি না আপনি কি জানেন? যেমন ব্যবহারকারীর একটি তালিকা প্রক্রিয়া মেরে অনুমতি দেওয়া?

আসল বিষয়টি হ'ল একই ব্যবহারকারীর একই উপায়ে বিভিন্ন ব্যবহারকারীদের কাছ থেকে শুরু করা যেতে পারে, এজন্য গ্রুপ আইডি প্রক্রিয়াটিতে সেট করা আমার পক্ষে সুবিধাজনক নয়। গ্রুপে নেই এমন অন্যান্য ব্যবহারকারীরা দ্বিতীয় সমান্তরাল প্রক্রিয়া শুরু করতে সক্ষম হবেন না।

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

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

আপনি কি মনে করেন এটি সর্বোত্তম সমাধান হতে পারে?


তাই আপনাকে স্বাগতম। আমি এটি সম্ভব বলে মনে করি না ... যাইহোক, এটি এসও এর বোন সাইট সার্ভারফল্ট ডট কমের জন্য আরও উপযুক্ত। এটি শীঘ্রই সেখানে স্থানান্তরিত হতে পারে, কিছু করার দরকার নেই।
পেক্কা GoFundMonica

আমরা কোন ধরণের প্রোগ্রামের কথা বলছি? সাধারণ ক্ষেত্রে এটি কঠিন হবে তবে কিছু ক্ষেত্রে (যেমন অ্যাপাচি বা কোনও অ্যাপ্লিকেশন যা আপনি নিজেকে সংশোধন করতে পারেন) এটি আরও সহজ হবে।
কিম

উত্তর:


14

আমি দুঃখিত, তবে এটি কেবল সম্ভব নয় (এটি ডিজাইনের মাধ্যমে)। তবে, যদি কোনও সাধারণ গোষ্ঠীর সদস্যগণ, ব্যবহারকারী 1 কোনও ফাইল লিখতে পারে যা ব্যবহারকারী 2 এর প্রক্রিয়া পরীক্ষা করে, এটি প্রক্রিয়াটি ইঙ্গিত করে যে এটি শেষ হওয়া উচিত।

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

প্রচলিতভাবে, না, ব্যবহারকারী 1 ব্যবহারকারীর প্রক্রিয়াতে পসিক্স সিগন্যাল প্রেরণ করতে পারে না।


আপনার উত্তরের জন্য ধন্যবাদ. আমার ক্ষেত্রে, প্রকৃতপক্ষে, আমি ফাইলটি ব্যবহার করি না তবে আমরা একটি সিস্টেম ( dim.web.cern.ch/dim ) ব্যবহার করি যা উপযুক্ত সিগন্যাল প্রেরণ করতে পারে, তারপরে একটি প্রক্রিয়া বলা যেতে পারে যে ব্যবহারকারীকে এটির অনুমতি দেওয়া হয়েছে কিনা প্রক্রিয়া বন্ধ করুন এবং প্রক্রিয়া হত্যা।

@ অ্যাটেলসকা - সুবিধাবঞ্চিত ব্যবহারকারীদের পরিবর্তে বৃহত্তর ফার্মে জেন ভার্চুয়াল মেশিনগুলি নিয়ন্ত্রণ / শুরু / বন্ধ করার জন্য আমি খুব অনুরূপ কিছু ব্যবহার করি use মূলত, একই জিনিস।
টিম পোস্ট

9

যদি না এসিএল বা সেলইনাক্স বা অন্য কোনও কিছুর আরও ভাল উপায় না হয়, আমি এটি যেভাবে দেখেছি সেটি হ'ল একটি সেটাইড স্ক্রিপ্ট। আপনি যেমন কল্পনা করতে পারেন, তারা সুরক্ষা ঝুঁকির জন্য কুখ্যাত।

আপনার কেস সম্পর্কিত, বলুন যে প্রোকোউনারটি প্রক্রিয়া মালিকের ব্যবহারকারীর নাম এবং ইউজারএ (uid 1000), ইউজারবি (ইউআইডি 1201), এবং ইউজারসি (ইউআইডি 1450) এই প্রক্রিয়াটি মারার অনুমতিপ্রাপ্ত লোকেরা are

killmyproc.bash:

#!/bin/bash
case ${UID} in
1000|1201|1450) ;;
*) echo "You are not allowed to kill the process."
   exit 1;;
esac

kill ${PROCESS_ID}
# PROCESS_ID could also be stored somewhere in /var/run.

তারপরে এর সাথে মালিক এবং অনুমতিগুলি সেট করুন:

chown procOwner:procGroup killmyproc.bash
chmod 6750 killmyproc.bash

এবং গ্রুপে ইউজারএ, ইউজারবি এবং ইউজার সি রাখুন procGroup


আমি এটি চেষ্টা করেছিলাম, এবং এটি কার্যকর হয়নি। অ-মালিক ব্যবহারকারী হত্যার আদেশে অস্বীকৃতি পেয়েছে।
জাভিদ জামায়ে

1
আমি কেবল যুক্ত করব, কেন ক্রিপ্ট স্ক্রিপ্টে সিস্টেমটিকে নিয়ন্ত্রণের অনুমতি দেওয়া হবে না? ইউজারএ, ইউজারবি এবং ইউজার সি-এর বাইরে একটি গ্রুপ তৈরি করা, তারপরে সেই গোষ্ঠীতে কিলস্ক্রিপ্ট ছড়িয়ে দেওয়া এবং এটি g + x এ ছোডড করা আমার পক্ষে উপায় পরিস্কার মনে হয়।
লিওনিড শেভতসভ

1
শেল স্ক্রিপ্টগুলিতে সেটআপ বিট অনুমোদিত নয়, এটি চালানোর জন্য আপনাকে সাধারণ মোড়কের সংকলিত প্রোগ্রামম ক্রেট করতে হবে
এল '

2

প্রচলিত নয় - কোনও ব্যবহারকারীর উপস্থিতি এবং কারওর প্রক্রিয়া হত্যার বিষয়টি চূড়ান্ত অস্বীকৃতিতে-পরিষেবা দুর্বলতা।

লক্ষ্য প্রক্রিয়াটি যদি সহযোগিতা করে তবে এটি করা যেতে পারে। একটি উপায় হ'ল এটি কোনও বাহ্যিক ইভেন্টের জন্য নজরদারি করা (যেমন কোনও ফাইল / var / tmp এ তৈরি করা হচ্ছে, বা সকেটের কোনও বার্তা), নিজেকে হত্যা করার নির্দেশ দিয়ে। আপনি যদি এটি করতে এটি লিখতে না পারেন তবে আপনি এটির জন্য একটি মোড়ক লিখতে পারেন যা এটি শুরু হয় এবং তারপরে পর্যবেক্ষণ করে, ঘটনাটি ঘটলে শিশু প্রক্রিয়াটিকে হত্যা করে।


1

না, আপনি পারবেন না।

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


1

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


সিগন্যালের একটি "ব্যবহারকারী" ক্ষেত্র নেই। তারা কেবল সংকেত।
LtWorf

সে কারণেই আমি বলেছিলাম "একটি পূর্ব নির্ধারিত ইভেন্ট, কোনও পসিক্স সিগন্যাল নয়"।
drxzcl

1

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


0

suid বিট বাশ স্ক্রিপ্টগুলির সাথে কাজ করে না। imho, সবচেয়ে ভাল উপায় হ'ল কিছু র‌্যাপার স্ক্রিপ্ট "কিলসার্ভিসিস" লেখা। মনে করুন, আপনার পরিষেবাটি ব্যবহারকারী পরিষেবা হিসাবে চলমান

#!/bin/bash
sudo -u serviceuser /usr/bin/killserviceworker

তারপর

# addgroup servicekiller
# chown root:servicekiller /usr/bin/killservice
# chmod 750 /usr/bin/killservice
# adduser bob servicekiller

তারপরে, আপনাকে পাসওয়ার্ড জিজ্ঞাসা না করে কেবলমাত্র / etc / sudoers এ নিয়ম যুক্ত করতে হবে / ইউএসআর / বিন / কিলসার্ভিস ওয়ার্কারকে ব্যবহারকারী পরিষেবা হিসাবে চালানোর অনুমতি দেওয়ার জন্য:

servicekiller        ALL = (serviceuser:serviceuser) NOPASSWD: /usr/bin/killserviceworker

কিলসার্ভিস ওয়ার্কার দেখতে দেখতে এটি দেখতে পারেন:

#!/bin/bash
kill ${cat /run/service.pid}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.