मेरे पास task_struct *
है जो मुझे find_task_by_vpid(get_pid())
पर कॉल करके मिला है। मैं यह जानना चाहता हूं कि उस उपयोगकर्ता के पास कौन सी प्रक्रिया है, ताकि मैं लिखने वाले सिस्टम कॉल में कुछ अनुमति जांच कर सकूं, लेकिन task_struct
स्रोत कोड को देखकर बहुत मदद नहीं मिली है। उपयोगी दिखने वाली एकमात्र चीज loginuid
है, लेकिन किसी कारण से कर्नेल संकलित नहीं होगा अगर मैं इसे इस तरह एक्सेस करने का प्रयास करता हूं: my_task_struct->loginuid
। क्या task_struct
से प्रक्रिया को कॉल करने वाले उपयोगकर्ता को पाने का कोई और तरीका है?क्या यह पता लगाने का कोई तरीका है कि उपयोगकर्ता के पास प्रक्रिया के task_struct से कोई प्रक्रिया है?
क्या यह पता लगाने का कोई तरीका है कि उपयोगकर्ता के पास प्रक्रिया के task_struct से कोई प्रक्रिया है?
उत्तर
दुर्भाग्यवश, उपयोगकर्ता/समूह आईडी अब कार्य संरचना में संग्रहीत नहीं हैं, बल्कि इसके बजाय एक अलग विशेषाधिकार संरचना में जो गतिशील रूप से आवंटित और समान कार्यों वाले सभी कार्यों के बीच साझा की जाती है। यह बदले में वैसे भी एक स्थिति है जहाँ setuid
थकावट संसाधन की वजह से असफल हो सकता है, और setuid
की विफलता विशेषाधिकार सहारा को बनाता है कमजोरियों का एक कुख्यात स्रोत है ...
, यह task_struct
के इन सदस्यों में बताया गया है:
const struct cred __rcu *real_cred; /* objective and real subjective task
* credentials (COW) */
const struct cred __rcu *cred; /* effective (overridable) subjective task
* credentials (COW) */
धन्यवाद यह वास्तव में मदद करता है। क्या आप जानते हैं कि प्रारंभ करने के लिए कैसे उपयोगकर्ता_struct शुरू किया? – saman
@saman: ठीक नहीं है, लेकिन 'setuid()' आदि के लिए कोड पाएं और आपको कुछ उदाहरणों को देखना चाहिए कि यह कैसे किया जाता है। –
@ आर .. मैं केवल unistd.h में सेटयूड सिस्टम कॉल की घोषणा पा सकता हूं लेकिन मुझे इस सिस्टम कॉल के कार्यान्वयन को नहीं मिला [यहां] (http://stackoverflow.com/questions/27594865/add-another -फील्ड-टू-यूज़र-स्ट्रक्चर) क्या मेरा सवाल यह है कि आप इसका उत्तर दे सकते हैं? – saman
गिरी अंतरिक्ष के भीतर एक यूजर आईडी (यूआईडी) का उपयोग करने के लिए आप (लिनक्स 4.9.13) के रूप में निम्नलिखित लाइनों के साथ कुछ कर सकते हैं:
struct task_struct *task;
for_each_process(task) {
uid_t uid = __kuid_val(task_uid(task));
}
task_uid
एक संरचना रिटर्न kuid_t
कहा जाता है और वास्तविक मूल्य तक पहुंचने के लिए आपको या तो __kuid_val
पर कॉल करना है या इसे सीधे एक्सेस करना है (task_uid(task).val
)।
वैकल्पिक रूप से, आप from_kuid(&init_user_ns, task_uid(task))
का उपयोग कर सकते हैं।
- 1. यह पता लगाने के लिए कि कोई उपयोगकर्ता PHP
- 2. क्या यह पता लगाने का कोई तरीका है कि कोई ड्राइव एसएसडी है या नहीं?
- 3. यह पता लगाने का तेज़ तरीका है कि कोई उपयोगकर्ता सिस्टम पर मौजूद है या नहीं?
- 4. यह पता लगाने का कोई तरीका है कि कोई शाखा कहां से आई थी?
- 5. क्या यह बताने का कोई आसान तरीका है कि उपयोगकर्ता के पास Google 1+ एक यूआरएल
- 6. क्या बैच फ़ाइल के निष्पादन के माध्यम से पता लगाने का कोई तरीका है?
- 7. यह पता लगाने के लिए कि कोई फ़ाइल बैच फ़ाइल
- 8. यह पता लगाने के लिए कि कोई प्रोग्राम उपप्रोसेस से क्रैश हो गया है या नहीं?
- 9. फ्लैश ब्लॉकर्स का पता लगाने का कोई तरीका है?
- 10. यह पता लगाने का सबसे तेज़ तरीका है कि जावास्क्रिप्ट
- 11. क्या एंड्रॉइड के पास एडीबी में प्रक्रिया प्राथमिकता प्रदर्शित करने का कोई तरीका है?
- 12. क्या रेसपर में कोई लॉगिंग है यह पता लगाने के लिए कि परीक्षण अनिश्चित क्यों है?
- 13. क्या सोफेड इंडेक्सर प्रक्रिया को रोकने का कोई तरीका है?
- 14. क्या यह पता लगाने का कोई तरीका है कि वर्तमान में एनीमेशन के दौरान कितनी डिग्री एक घूर्णन घूमती है?
- 15. यह पता लगाने के लिए कि कौन सा पैकेज/प्रक्रिया तालिका को अद्यतन कर रही है?
- 16. जावास्क्रिप्ट यह पता लगाने के लिए कि क्या उपयोगकर्ता टैब
- 17. यह पता लगाने के लिए कि कोई वेबसाइट HSTS
- 18. यह पता लगाने के लिए कि क्या एक लिनक्स टीटीई एक प्रक्रिया समूह
- 19. यह पता लगाने के लिए कि कोई विज़िटर मानव है और मकड़ी नहीं है
- 20. क्या यह पता लगाने के लिए कोई प्रोग्रामेटिक तरीका है कि मेरा ऐप रेट किया गया है या नहीं?
- 21. यह पता लगाने के लिए कि क्या कोई अधिसूचना खारिज कर दी गई है?
- 22. क्या यह पता लगाने का कोई तरीका है कि एक जेटी पर एक बूंद होने वाली है या नहीं?
- 23. क्या यह पता लगाने का कोई तरीका है कि क्या ऐप बाजार के साथ स्थापित किया गया था या नहीं?
- 24. यह पता लगाने के लिए कि क्या जेएमएस कनेक्शन है?
- 25. क्या यह देखने का कोई तरीका है कि प्रति कोर कितनी सीपीयू उपयोग प्रक्रिया का उपयोग कर रहा है?
- 26. क्या कोई ऑब्जेक्ट लॉक होने का पता लगाने का कोई तरीका है?
- 27. यह पता लगाने के लिए कि क्या मेरे ऑब्जर्जेबल कोलेक्शन में कोई आइटम बदल गया है
- 28. क्या एंड्रॉइड में यह बताने का कोई तरीका है कि उपयोगकर्ता डिवाइस के पास वास्तविक कीबोर्ड है या नहीं?
- 29. क्या डेल्फी में केवल प्रोजेक्ट स्रोत के माध्यम से पता लगाने का कोई तरीका है?
- 30. क्या यह पता लगाने का कोई आसान तरीका है कि जेएस कोड एक डीओएम तत्व का उपयोग किया जाता है?
'geteuid' के कार्यान्वयन को देखें। अनुमति जांच के लिए, हालांकि, आप निश्चित रूप से अपने स्वयं के तर्क को बनाने के बजाए उस तरह की चीज़ के लिए मौजूदा सामान्य ढांचे का उपयोग करना चाहते हैं जो शेष सिस्टम के साथ असंगत है। – zwol
मैं उस उपयोगकर्ता के 'euid' को प्राप्त करने के लिए 'geteuid()' का उपयोग करता हूं, जिसे सिस्टम कॉल कहा जाता है, लेकिन मुझे यकीन नहीं है कि 'task_struct' के' uid' (या' euid') को प्राप्त करने के लिए इसका उपयोग कैसे किया जाए। प्रणाली में पारित 'पिड' के लिए खुद को कॉल करें। – Mason