2011-01-04 11 views
6

के लिए रूट पहुंच प्राप्त करना इसलिए मुझे अपने अनुप्रयोग में NSFileManager के साथ सिस्टम फ़ाइलों को स्थानांतरित करने की आवश्यकता है और मुझे रूट पहुंच नहीं लगती है। इस विशेषाधिकार को प्राप्त करने का सबसे आसान तरीका क्या होगा? मैंने ऐप्पल द्वारा प्रदान किए गए बेहतर प्राधिकरण नमूने कोड में देखा है, और मुझे लगता है कि उपयोगकर्ता द्वारा अनुमोदन मिलने के बाद मैं NSFileManager अपना कार्य कैसे चला सकता हूं। अगर कोई मेरी मदद कर सकता है तो यह बहुत अच्छा होगा!कोको - NSFileManager

धन्यवाद,

केविन

उत्तर

3

अद्यतन: लोगों को अभी भी संदर्भ के लिए इस सवाल का जवाब का उपयोग कर अद्यतन करने के BLAuthentication एक पुराने, और अत्यधिक unrecommended समारोह AuthorizationExecuteWithPriviledges कहा जाता है कि, काम करते हुए, के खिलाफ जाता है का उपयोग करता है आधुनिक सुरक्षा प्रतिमान, और बहिष्कृत है (और थोड़ी देर के लिए किया गया है)। आपको अभी भी इसका उपयोग करने की इजाजत है, तकनीकी रूप से, लेकिन यदि आप मैक ओएस एक्स शेर के लिए विकास कर रहे हैं, तो आप ServicesManagement फ्रेमवर्क का उपयोग करने के लिए स्वागत से अधिक हैं, जो आपको एक सहायक उपकरण के रूप में विशेषाधिकारों के साथ कोड चलाने की अनुमति देता है।

एक विशेषाधिकार प्राप्त सहायक उपकरण बनाने और लॉन्च करने के संदर्भ में, मेरे प्रश्नों में से एक को देखें, Writing a Privileged Helper Tool with SMJobBless()


वहाँ NSFileManager अधिकृत करने के लिए कोई वास्तविक आसान तरीका है, तो आप BLAuthentication वर्ग के साथ प्रशासक प्रमाणीकरण के अंतर्गत चलाने मानक mv और cp उपकरण का उपयोग कर इस पर गौर करना चाहिए। दुर्भाग्यवश, मूल लेखक की वेबसाइट नीचे है, लेकिन आप आसानी से Google पर तैरते वर्ग की प्रतियां पा सकते हैं (यदि आप चाहें तो मैं आपके लिए एक प्रति अपलोड भी कर सकता हूं)।

#define MOVE @"/bin/mv" 
if (![[BLAuthentication sharedInstance] isAuthenticated:MOVE]) { 
    [[BLAuthentication sharedInstance] authenticate:MOVE]; 
} 

NSArray *arguments = [NSArray arrayWithObjects:@"location1", @"location2", nil]; 
[[BLAuthentication sharedInstance] executeCommand:MOVE withArgs:arguments]; 

कोड ऊपर प्रशासक के पासवर्ड के लिए संकेत करें और पांच साल की डिफ़ॉल्ट समय सीमा के लिए कार्यक्रम को प्रमाणित होगा:


BLAuthentication के साथ, तुम क्या करने की कोशिश कर रहे हैं कुछ इस तरह चला जाता है मिनट।


चेतावनी
बेशक, हमेशा सिस्टम फ़ाइलों के साथ सावधान रहना! जब संभव हो तो उन्हें आगे बढ़ने या छेड़छाड़ करने से बचें, खासकर अगर आपका प्रोग्राम किसी और के कंप्यूटर पर चलने वाला है (यदि कुछ गलत हो जाता है, तो आपको दोषी ठहराया जा रहा है)!

+0

मैं वास्तव में पोस्ट की सराहना करता हूं! तो क्या मैं अभी भी NSFileManager क्लास का उपयोग करने में सक्षम हूं या क्या मुझे अब से "एमवी" कमांड का उपयोग करना होगा? वैसे, अगर आप इसे मेरे लिए अपलोड कर सकते हैं तो यह बहुत अच्छा होगा! धन्यवाद!!!! – lab12

+0

ठीक है इसलिए मैं ब्लूटूथिकेशन क्लास ढूंढने में सक्षम था और देखा कि यह 2001 से था। क्या यह अभी भी काम करेगा यदि यह एक दशक पुराना है? क्या आप एनएसटीस्क भाग को कैसे कार्यान्वित करेंगे इस बारे में कोई जानकारी भी प्रदान कर सकते हैं? – lab12

+0

केविन, कुछ चीजों को स्पष्ट करने के लिए: ए) नियमित फ़ाइलों के लिए, आप अभी भी 'NSFileManager' का उपयोग कर सकते हैं, लेकिन रूट पहुंच के लिए, ऊपर दिखाए गए अनुसार' BLAU प्रमाणीकरण 'का उपयोग करें। बी) क्षमा करें, मेरी गलती; आपको 'एनएसटीस्क' की भी आवश्यकता नहीं है (मैं कोड के साथ अपने उत्तर के उस हिस्से को अपडेट करना भूल गया था, लेकिन अब यह तय है)। चाल/कॉपी ऑपरेशन निष्पादित करने के लिए बस आदेश के पथ के साथ '-executeCommand: withArgs:' का उपयोग करें (@ "/ bin/cp" या @ "/ bin/mv")।सी) हां, हालांकि 'ब्लूटुथिकेशन' * पुराना * है, लेकिन यह अभी भी 10.6 के तहत भी संकलित और पूरी तरह से ठीक चलाता है (सुरक्षा ढांचे समय के साथ मुश्किल से बदल गए हैं)। –

3

यदि आपको एप्लिकेशन को रूट विशेषाधिकारों का उपयोग करने की आवश्यकता है, तो ऐप्पल की प्राधिकरण सेवा API का उपयोग करें।

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html#//apple_ref/doc/uid/TP30000995-CH204-TP1