क्या लिनक्स पर `ps` या` टॉप` की लिस्टिंग से एक प्रक्रिया को 'छिपाना' संभव है


10

सबसे पहले, मैं मानता हूं कि यदि यह संभव है तो इसे रूट के रूप में करने की आवश्यकता होगी (या रूट के यूआईडी शेयर करने वाले उपयोगकर्ता के रूप में)।

कैसे एक प्रक्रिया तो शुरू किया जा सकता है कि यह एक में दिखाई नहीं करता है ps auxया ps efया topअगर आदेश गैर-रूट द्वारा चलाया जाता है लिस्टिंग?

क्या यह भी संभव है?

आमतौर पर मेरे द्वारा चलाए जाने वाले वितरण RHEL / CentOS और Ubuntu हैं - इसलिए यदि कोई विशिष्ट-विशिष्ट उत्तर है, तो वह भी ठीक है।


वारेन: कभी इसका कोई हल निकालें?
क्रिस

@ क्रिस - नहीं ... @ fianchetto का जवाब ही एकमात्र रास्ता लगता है, और यह एक बहुत अधिक काम है कि मैं आराम से काम कर रहा हूँ: - |
वॉरेन

मैं इस परियोजना को शुरू करने जा रहा हूं और मेरे द्वारा निर्धारित किसी भी चीज के साथ वापस रिपोर्ट करेगा।
क्रिस

जवाबों:


5

खैर, आपके पास यहां कुछ विकल्प हैं। आसान तरीका अपनाते हुए संशोधित संस्करणों के साथ पीएस और शीर्ष कार्यक्रमों की अदला-बदली करना होगा जो आप इसे छिपाना चाहते हैं।

विकल्प यह होगा कि आप अपने कोड को किसी मौजूदा प्रक्रिया में एम्बेड करें, या अपने कोड के चारों ओर एक आवरण-पटकथा लिखें।

PS के कुछ संस्करणों में, आप argv [] बदलकर इसे संशोधित कर सकते हैं, लेकिन यह सुनिश्चित नहीं करें कि क्या यह शीर्ष के लिए काम करता है, और निश्चित नहीं है कि यह linux में काम करता है (यह मुख्य रूप से BSD सम्मेलन है)।

यह सब निर्भर करता है, वास्तव में आप ऐसा करके क्या हासिल करना चाहते हैं?


मेरा लक्ष्य यहां उन प्रक्रियाओं के लिए है जो सभी उपयोगकर्ताओं (शायद सुरक्षा से संबंधित डेमों या समान) को दिखाई न देने के लिए जड़ द्वारा जताई गई हैं
वॉरेन

@flanchetto तो, यदि आप कह रहे हैं कि मेरे पास एक प्रोग्राम है जो पहले से ही चल रहा है और यह बाद में इसमें एक पासवर्ड के साथ कमांड-लाइन कमांड चलाता है, तो क्या पासवर्ड सुरक्षित रूप से दिया जाएगा? उदा। रन python myScript.pyऔर सभी subprocess.Popenकमांड (जिसमें पासवर्ड हो सकते हैं या नहीं भी) नहीं दिखाए जा सकते हैं, जब तक कि यह एक ही प्रक्रिया नहीं है?
ब्रेत्सेफ़ोरुज़्थ्रैक्स

वैसे भी, यह काम नहीं करता है (मैं सिर्फ यह कोशिश की और पासवर्ड देखा)। इसलिए, मैं मान रहा हूं कि आप कुछ और चाहते हैं। स्पष्ट करने के लिए स्वतंत्र महसूस करें। :)
Br Febtsyorfuzthrāx

13

कर्नेल पैच के अनुसार http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8f8a8c8db806bea1201 , आप फ़ोकसिड सिस्टम विकल्प के लिए प्रोकपिड विकल्प का उपयोग कर सकते हैं।

Hidepid = 0 (डिफ़ॉल्ट) का अर्थ है पुराना व्यवहार - कोई भी सभी विश्व-पठनीय / खरीद / PID / * फ़ाइलें पढ़ सकता है।

Hidepid = 1 का अर्थ है कि उपयोगकर्ता किसी भी / proc // निर्देशिका का उपयोग नहीं कर सकते हैं, लेकिन अपने स्वयं के। Cmdline, शेड्यूल *, स्टेटस जैसी संवेदनशील फाइलें अब अन्य उपयोगकर्ताओं के खिलाफ सुरक्षित हैं। के रूप में proc_pid_permission () और फ़ाइलों की अनुमतियों में की गई जांच की अनुमति नहीं दी जाती है, विशिष्ट फ़ाइलों के मोड की उम्मीद करने वाले प्रोग्राम भ्रमित नहीं होते हैं।

Hidepid = 2 का अर्थ है Hidepid = 1 प्लस सभी / proc / PID / अन्य उपयोगकर्ताओं के लिए अदृश्य होगा। इसका मतलब यह नहीं है कि यह छुपाता है कि क्या कोई प्रक्रिया मौजूद है (इसे अन्य तरीकों से सीखा जा सकता है, जैसे कि -0 $ पीआईडी ​​द्वारा मारना), लेकिन यह प्रक्रिया 'यूरोपिड और एगिड' को छुपाता है। यह चल रही प्रक्रियाओं के बारे में जानकारी इकट्ठा करने के घुसपैठिए के कार्य को संकलित करता है, चाहे कुछ डेमॉन उन्नत विशेषाधिकार के साथ चलता है, चाहे कोई अन्य उपयोगकर्ता कुछ संवेदनशील कार्यक्रम चलाता है, चाहे अन्य उपयोगकर्ता किसी भी कार्यक्रम को चलाते हैं, आदि।

gid = XXX एक समूह को परिभाषित करता है, जो सभी प्रक्रियाओं की जानकारी (जैसे कि Hidepid = 0 मोड में) इकट्ठा करने में सक्षम होगा। इस समूह का उपयोग सूडरो फ़ाइल या किसी चीज़ में नॉनरोट उपयोगकर्ता को रखने के बजाय किया जाना चाहिए। हालांकि, अविश्वसनीय उपयोगकर्ता (जैसे डेमॉन, आदि) जो पूरे सिस्टम में कार्यों की निगरानी करने वाले नहीं हैं, उन्हें समूह में नहीं जोड़ा जाना चाहिए।

आप प्रक्रिया स्तर पर दृश्यता को नियंत्रित करने में सक्षम नहीं हैं, हालांकि आप यह सुनिश्चित कर सकते हैं कि आपके उपयोगकर्ता केवल अपनी प्रक्रिया देख सकते हैं।

यदि आपके पास कर्नेल संस्करण 3.3 से अधिक है, तो आप निम्न आदेश के साथ प्रयास कर सकते हैं:

 
mount /proc -o remount,hidepid=2


क्या आप इस hidepid=2चीज़ को सीमित कर सकते हैं ताकि यह केवल विशिष्ट उपयोगकर्ताओं को प्रभावित करे (या इसलिए यह कुछ उपयोगकर्ताओं को श्वेत सूची प्रदान करता है)?
ब्रेत्सेफ़ोरुज़्थ्रैक्स

बहुत अच्छा काम करता है! मेरी समस्या यह थी कि मैं एक क्रोन स्क्रिप्ट का उपयोग कर सर्वर से जुड़ रहा हूं और कोई भी उपयोगकर्ता "htop" (उदाहरण के लिए) का उपयोग करके क्रेडेंशियल्स को देखने में सक्षम था। "Hidepid = 2" उपयोगकर्ताओं के लिए सेटिंग अन्य उपयोगकर्ताओं द्वारा लॉन्च की गई प्रक्रियाओं को नहीं देख सकता है जो कि मैं देख रहा था। डिफ़ॉल्ट रूप से सेट क्यों नहीं किया जाता है?
लेप

@ लेगेसी कारणों से शायद। यह और वह टूट जाएगा और इसलिए (अभी तक) हर जगह इस्तेमाल नहीं किया जा सकता है।
फ्लोरियन वेंडेलबोर्न

ओपी ने कुल मिलाकर अदृश्य होने के लिए कहा, न कि अन्य उपयोगकर्ताओं के लिए ...?
phil294

क्या कुछ उपयोगकर्ताओं द्वारा बनाई गई प्रक्रियाओं को छिपाने का एक तरीका है? जैसे। root?
एवरी

-2

शीर्ष कमांड और एन कमांड का उपयोग करें, उदाहरण के लिए कॉन्फ़िगर करने के लिए कि आप क्या देखना चाहते हैं। W कमांड का उपयोग ~ ~ .toprc - उपयोग करने के लिए आपके द्वारा कॉन्फ़िगर किए गए कॉन्फ़िगरेशन को लिखने के लिए करें? शीर्ष आदेशों को देखने के लिए। इससे आपकी समस्या जल्दी हल हो सकती है - यह मेरे लिए था। F के साथ मैं उन फ़ील्ड्स को जोड़ / हटा सकता हूं जिन्हें मैं देखना चाहता हूं, जबकि f में s को सेट करने के लिए s का उपयोग कर सकते हैं, फिर q को वापस प्रदर्शित करने के लिए जा सकते हैं। फिर n को .toprc में सहेजने के लिए मुझे कितनी प्रक्रियाएँ देखनी हैं और डब्ल्यू को सेट करना है


यह केवल मेरे विचार में कुछ छिपाता है
वॉरेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.