में सेटयूड प्रोग्राम चलाने के लिए सही तरीका है मेरे पास अनुमति 4750 के साथ एक प्रक्रिया है। मेरे उपयोगकर्ता सिस्टम में दो उपयोगकर्ता मौजूद हैं। रूट उपयोगकर्ता और ऐप उपयोगकर्ता। प्रक्रिया को एक प्रक्रिया प्रबंधक की अनुमतियां मिलती हैं जो "एपज़" उपयोगकर्ता के रूप में चलती है।सी
मैं दो बुनियादी दिनचर्या है:
int main() {
undo_root();
do some stuff;
do_root();
bind(port 80); //needs root perm
undo_root();
while(1) {
accept commads()
if (commands needs root user access)
{
do_root();
execute();
undo_root();
}
}
आप मैं रूट के रूप में कुछ आदेश पर अमल करना चाहते हैं देख सकते हैं:
void do_root (void)
{
int status;
status = seteuid (euid);
if (status < 0) {
exit (status);
}
}
/* undo root permissions */
void undo_root (void)
{
int status;
status = seteuid (ruid);
if (status < 0) {
exit (status);
}
status = setuid(ruid);
if (status < 0) {
exit (status);
}
}
मेरे प्रवाह निम्नलिखित है। मैं अनुमतियों को अस्थायी रूप से छोड़ने की कोशिश कर रहा हूं और यदि कार्यों को रूट पहुंच की आवश्यकता है, तो मैं do_root और undo_root कॉल के बीच कमांड को लपेटता हूं।
हालांकि ऐसा लगता है कि मेरा प्रोग्राम काम नहीं कर रहा है।
ऐसा करने का कैननिक तरीका क्या है?
सेट्यूयूड विफल होने पर बाहर निकलने के बजाय, कॉलर() पर कॉल करें और आपका कार्यक्रम आपको बताएगा कि यह क्यों विफल रहा है। –
एक बार जब आप रूट अनुमतियां छोड़ देते हैं, तो आप उन्हें वापस नहीं ले सकते !! – Petesh
तकनीकी रूप से, यह उस प्रोग्राम को धारण करने वाली फ़ाइल है जिसमें 4750 अनुमति है, प्रक्रिया नहीं। आप सीधे यह नहीं कहते कि अनुमतियां रूट हैं: समूह: 4750' - क्या यह एक सुरक्षित अनुमान है? –