मुझे किसी के लिए एक गंदे लिनक्स हैक करना था ताकि वे गैर-रूट उपयोगकर्ता होने पर cupsenable printername
शेल कमांड के साथ प्रिंटर प्रारंभ कर सकें। मैं नहीं चाहता था कि वे रूट के रूप में cupsenable
सिंटैक्स की पूरी तरह से उपयोग करने में सक्षम हों, इसलिए मैंने अभी एक सी रैपर लिखा है जो argv[1]
में इनपुट को स्वच्छ करता है और system("cupsenable sanitizedprintername")
पर कॉल करता है।मुझे एक setuid-root सी प्रोग्राम के भीतर setuid (0) की आवश्यकता क्यों है जो सिस्टम() के साथ एक व्यवस्थापकीय प्रोग्राम को कॉल करता है?
मैंने प्रोग्राम सेटूइड रूट बनाया है, लेकिन फिर भी, cupsenable
"अनुमति अस्वीकार" के साथ विफल रहा। फिर मैंने से पहले setuid(0)
कॉल डाला और, लो और देखो, यह काम किया।
उपयोगकर्ताओं को प्रिंटर पर नियंत्रण देने का एक बेहतर तरीका होने के मुद्दे को अनदेखा करें। शायद एक बेहतर तरीका है। क्या मैं में दिलचस्पी रखता हूँ chmod u+s
बनाम setuid(0)
बनाम system()
की पेचीदगियों को कर रहे हैं। यह इस तरह से व्यवहार क्यों किया?
वाह। खैर, मैंने कहा था कि यह गंदा था। ऐसा लगता है कि मैंने जो किया वह प्रणाली() द्वारा उत्पन्न की गई बैश प्रक्रिया को मनाने के लिए किया गया था, वास्तव में, वास्तव में, ईमानदारी से ईश्वर की कसम खाता था। ऐसा लगता है कि कुछ रिफैक्टरिंग क्रम में है। – JCCyC