मैंने देखा है कि उपयोगकर्ताओं को जोड़ने और बदलने में सबसे बड़ी उपयोगिताएं अक्सर अलग-अलग तरीकों से होती हैं। passwd और छाया फ़ाइलों को संशोधित करने के लिए आप जिन फ़ंक्शंस का उपयोग कर सकते हैं उन्हें <pwd.h>
और <sys/types.h>
और they're part of glibc में उजागर किया गया है।
fgetpwent, getpwnam, getpw, getpwent_r, putpwent, setpwent
हम कैसे बिजीबॉक्स (TinyLogin के माध्यम से) यह होता है, एक उदाहरण के रूप में देख सकते हैं। busybox/loginutils/adduser.c
में, उन्होंने passwd संरचना बनाकर एक उपयोगकर्ता को passwd फ़ाइल में रखा और फिर putpwent
पर कॉल करें। छाया फ़ाइल में उपयोगकर्ता का पासवर्ड जोड़ने के लिए, वे बस fprintf
पर कॉल करें और सीधे स्ट्रिंग लिखें।
उपयोगकर्ताओं को आधुनिक तरीके से प्रमाणीकृत करने के लिए, Linux-PAM है। लेकिन जहां तक उपयोगकर्ता जोड़ते हैं, आप pam_unix_passwd.c में देख सकते हैं कि वे unix_update_db() पर कॉल करते हैं, जो libpwdb में विभिन्न कार्यों को कॉल करते हैं, जिन्हें आप इसका उपयोग करते समय अपनी परियोजना पर निर्भरता के रूप में जोड़ना चाहते हैं।
कहा जा रहा है कि, मैं पासवाड और छाया डेटाबेस को पार्स करने और उन्हें संशोधित करने के लिए कुछ उपयोगिताएं लिखने के दोषी हूं। यह ठीक काम करता था, लेकिन यह एक एम्बेडेड सिस्टम पर था जहां मैं सब कुछ कसकर नियंत्रित कर सकता था। मुझे passwd डीबी संशोधित अन्य कार्यक्रमों के साथ दौड़ की स्थिति जैसी चीजों के बारे में चिंता करने की ज़रूरत नहीं थी।
यदि आपको कोई समूह जोड़ने की आवश्यकता है, तो group database के लिए भी जाना जाता है।
कुछ चीजें: * सिस्टम() का उपयोग न करें जब तक कि आप सुनिश्चित न हों कि आपके द्वारा पास की जाने वाली चीज़ों को शैल द्वारा विशेष वर्णों के रूप में व्याख्या नहीं किया जाएगा। * उपयोगकर्ता बैंड विशेष रूप से पोर्टेबल नहीं है (और कुछ सिस्टमों पर आप "सामान्य" उपयोगकर्ता बनाने में सक्षम नहीं हो सकते हैं, उदाहरण के लिए जहां उपयोगकर्ता एलडीएपी/एनआईएस/एडी/आदि में हैं सामान्यतः, एक-ऑफ उपयोगकर्ता के लिए निर्माण मैं एक खोल स्क्रिप्ट का उपयोग करेंगे। –