RPM युक्ति में सेवा खातों का प्रबंधन करना


16

हमारे द्वारा लिखी गई सेवा के लिए मुझे आंशिक रूप से पूर्ण RPM युक्ति दी गई है। यह आवश्यक निर्देशिकाओं को बनाने, फ़ाइलों की प्रतिलिपि बनाने, अनुमतियाँ सेट करने आदि के रूप में मिलता है, लेकिन यह आवश्यक सिस्टम खाता नहीं बनाता है जो सेवा के तहत चलेगा। मुझे बताया गया था कि आरपीएम के लिए यह ध्यान रखना सबसे अच्छा है, इसलिए मैंने जोड़ा है

Requires(pre): /usr/sbin/useradd

%pre
useradd -r -d /path/to/program -s /bin/false myservice

यह उपयोगकर्ता खाता (और संबद्ध समूह) बनाने में सफल होता है, इसलिए बाद में जब वह सेवा की फ़ाइलों पर स्वामित्व / अनुमतियाँ सेट करने का प्रयास करता है, तो वह भी सफल होता है।

मेरी वर्तमान समस्या है, एक) यदि उपयोगकर्ता खाता पहले से मौजूद है, तो आरपीएम इंस्टॉल विफल रहता है क्योंकि useraddविफल रहता है (क्योंकि उपयोगकर्ता पहले से मौजूद है); और b) मुझे नहीं पता कि rpm -e myserviceसंबंधित उपयोगकर्ता और समूह को कैसे निकालना है।


//, क्या आप FPM का उपयोग करने पर विचार करेंगे?
नाथन बसानी 23

जवाबों:


18

मैं वास्तव में इसे स्वतंत्र रूप से हल करता था, अन्य आरपीएम चश्मा को देखकर जो इसी तरह की चीजें करते थे। यदि आप केवल एक उपयोगकर्ता (सशर्त रूप से) जोड़ना चाहते हैं, तो इग्नासियो के लिंक का उपयोग करें। इसे मैने किया है:

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin myservice

%postun
/usr/sbin/userdel myservice

यह सुनिश्चित करता है कि RPM "स्वयं के बाद सफाई करता है" लेकिन फिर भी खाता पहले से मौजूद होने पर भी स्थापित करने की क्षमता प्रदान करता है।


13
यद्यपि यह प्रश्न का उत्तर देता है, लेकिन उपयोगकर्ता / समूह को हटाना वांछनीय क्यों नहीं है, इस बारे में इग्नासियो द्वारा पोस्ट किए गए फेडोरा लिंक लिंक में यह नोट पढ़ने लायक है।
कवरोजीन

1
एक यूआईडी और जीआईडी ​​पुनः उपयोग मुद्दा है (जब हटाए गए उपयोगकर्ता के पास सबसे अधिक यूआईडी / जीआईडी ​​है), जो उपयोगकर्ता के किसी भी स्वचालित उपयोग को एक बुरा विचार बनाता है।
ब्रूनो 9779

1
अपने CentOS 6.7 पर मैंने / usr / sbin / groupadd कमांड को हटा दिया क्योंकि useradd कमांड ग्रुप को ही बनाएगा। साथ ही उपयोगकर्ता नाम एक त्रुटि के साथ बाहर निकल जाएगा जब उसी नाम का एक समूह पहले से मौजूद है।
रफेल

rpmlint रिपोर्ट "W: खतरनाक-कमांड-इन-% postun userdel" यदि आप इसका उपयोग करते हैं
Rfraile

5

पिछले दो उत्तरों में से कोई एक उत्पादन तैयार है क्योंकि पैकेज के अपग्रेड होने पर उपयोगकर्ता उन तरीकों को हटा देगा। यम नए पैकेज को स्थापित करता है फिर पुराने पैकेज को हटा देता है। यह आपको उपयोगकर्ता के बिना छोड़ देगा। अछा नहीं लगता!

इस विधि का उपयोग करें:

%postun
case "$1" in
   0) # This is a yum remove.
      /usr/sbin/userdel myservice
   ;;
   1) # This is a yum upgrade.
      # do nothing
   ;;
 esac

4

कोडर से प्रतिक्रिया अच्छी है लेकिन दूसरी पूर्व कमांड मुझे सेंटोस 7 पर एक त्रुटि देती है। समूह को निर्दिष्ट किया जाना चाहिए।

Requires(pre): /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%pre
/usr/bin/getent group myservice > /dev/null || /usr/sbin/groupadd -r myservice
/usr/bin/getent passwd myservice > /dev/null || /usr/sbin/useradd -r -d /path/to/program -s /sbin/nologin -g myservice myservice

%postun
/usr/sbin/userdel myservice

मैंने अवांछित इको को अनदेखा करने के लिए / dev / null को भी पुनर्निर्देशित किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.