पर रूट विशेषाधिकारों को स्थायी रूप से छोड़ दें प्रारंभ करने के बाद मैं अपने लिनक्स प्रोग्राम को रूट विशेषाधिकार छोड़ने और गैर-विशेषाधिकार प्राप्त खाते में स्विच करना चाहता हूं। मैं विभिन्न उदाहरणों ऑनलाइन लेकिन कुछ भी मेरे आवश्यकताओं के लिए विहित पाया है, विशेष रूप से:आधुनिक लिनक्स
- इस एक स्थायी ड्रॉप
- दोनों (ई) uid और (ई) gid
- केवल गैर-रूट करने के लिए स्विच करना चाहिए लिनक्स समर्थन (कर्नेल> 2.6.32)
- पूरक समूहों
सबसे अच्छा तरीका मैंने पाया के लिए कोई जरूरत नहीं है:
uid_t new_uid = ...;
gid_t new_gid = ...;
gid_t rgid, egid, sgid;
if (setresgid(new_gid, new_gid, new_gid) < 0)
{
perror("setresgid");
exit(EXIT_FAILURE);
}
if (getresgid(&rgid, &egid, &sgid) < 0)
{
perror("getresgid");
exit(EXIT_FAILURE);
}
if (rgid != new_gid || egid != new_gid || sgid != new_gid)
{
printf("unexpected gid");
exit(EXIT_FAILURE);
}
if (setgroups(0, 0) != 0)
{
perror("setgroups");
exit(EXIT_FAILURE);
}
uid_t ruid, euid, suid;
if (setresuid(new_uid, new_uid, new_uid) < 0)
{
perror("setresuid");
exit(EXIT_FAILURE);
}
if (getresuid(&ruid, &euid, &suid) < 0)
{
perror("getresuid");
exit(EXIT_FAILURE);
}
if (ruid != new_uid || euid != new_uid || suid != new_uid)
{
printf("unexpected uid");
exit(EXIT_FAILURE);
}
मैं एक exe में इस लपेट और प्रदर्शित uid है और gid का सही उपयोग करते हुए दिखाई देते हैं कि कर सकते हैं:
ps -eO user,uid,ruid,suid,group,gid,rgid,sgid
कार्यक्रम एक विशेषाधिकार प्राप्त बंदरगाह के लिए बाध्य नहीं कर सकते हैं या सबसे जड़ के स्वामित्व वाली फ़ाइलों में हेरफेर, तो बस इतना ही है अच्छा।
मुझे captest प्रोग्राम (libcap-ng-utils में शामिल) भी मिला है जो सत्यापित करता है कि प्रक्रिया में कोई अप्रत्याशित capabilities(7) नहीं है।
हालांकि, चूंकि सुरक्षा एक चिंता है, इसलिए मैं अधिक आत्मविश्वास होना चाहता हूं कि मैंने सभी गैर-आवश्यक विशेषाधिकारों को सही तरीके से हटा दिया है। मैं कैसे निश्चित हो सकता हूं?
धन्यवाद।
तुम बाहर [setuidgid] की जाँच की है (http://cr.yp.to/daemontools/setuidgid .html)? यह [डीजे का हिस्सा है। बर्नस्टीन] [http://cr.yp.to/djb.html) [डेमॉन उपकरण पैकेज] (http://cr.yp.to/daemontools.html)। इस कार्यक्रम के स्रोत की समीक्षा करना सहायक हो सकता है। –
यह देखने के लिए कि आप इसे कैसे पूरा किया जा सकता है, आप 'सूडो' या 'सु' स्रोत पर एक नज़र डाल सकते हैं। – Kevin