การจัดการบัญชีบริการในข้อมูลจำเพาะ RPM


16

ฉันได้รับข้อมูลจำเพาะ RPM ที่สมบูรณ์บางส่วนสำหรับบริการที่เราเขียน มันจะได้รับการสร้างไดเรกทอรีที่ต้องการคัดลอกไฟล์ตั้งค่าสิทธิ์เป็นต้น แต่มันไม่ได้ทำให้บัญชีระบบที่ต้องการซึ่งบริการจะทำงานภายใต้ ฉันถูกบอกว่าดีที่สุดสำหรับ RPM ที่จะดูแลสิ่งนี้ดังนั้นฉันจึงเพิ่ม

Requires(pre): /usr/sbin/useradd

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

สิ่งนี้จะประสบความสำเร็จในการสร้างบัญชีผู้ใช้ (และกลุ่มที่เกี่ยวข้อง) ดังนั้นในภายหลังเมื่อพยายามตั้งค่าความเป็นเจ้าของ / การอนุญาตบนไฟล์ของบริการซึ่งจะประสบความสำเร็จเช่นกัน

ปัญหาปัจจุบันของฉันคือก) หากบัญชีผู้ใช้มีอยู่แล้วการติดตั้ง RPM ล้มเหลวเนื่องจากuseraddล้มเหลว (เนื่องจากผู้ใช้มีอยู่แล้ว); และ b) ฉันไม่รู้ว่าจะrpm -e myserviceลบผู้ใช้และกลุ่มที่เกี่ยวข้องได้อย่างไร


//, คุณจะพิจารณาใช้ FPM หรือไม่
Nathan Basanese

คำตอบ:


18

ฉันจริงแก้ปัญหานี้อย่างอิสระโดยการดูรายละเอียด RPM อื่น ๆ ที่ทำสิ่งที่คล้ายกัน หากคุณต้องการเพิ่มผู้ใช้ (แบบมีเงื่อนไข) ให้ใช้ลิงก์ของ Ignacio ฉันทำอย่างนี้:

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
แม้ว่านี่จะตอบคำถามนั้นมันเป็นมูลค่าการอ่านโน้ตในการเชื่อมโยง Fedora ลิงค์โพสต์โดยอิกนาซิโอเกี่ยวกับสาเหตุการลบผู้ใช้ / กลุ่มไม่พึงประสงค์
CoverosGene

1
มีปัญหาการใช้ซ้ำ UID และ GID (เมื่อผู้ใช้ที่ถูกลบมี UID สูงสุด / GID) ซึ่งทำให้การใช้งานอัตโนมัติของผู้ใช้เป็นความคิดที่ไม่ดี
Bruno9779

1
บน CentOS 6.7 ของฉันฉันลบคำสั่ง / usr / sbin / groupadd เนื่องจากคำสั่ง useradd จะสร้างกลุ่มเอง นอกจากนี้ useradd จะออกโดยมีข้อผิดพลาดเมื่อมีกลุ่มชื่อเดียวกันอยู่แล้ว
Raffael

รายงาน rpmlint "W: อันตราย-in-คำสั่ง userdel% postun" ถ้าคุณใช้มัน
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

การตอบสนองจาก Coderer นั้นดี แต่คำสั่ง pre ที่สองให้ข้อผิดพลาดกับ Centos 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 เพื่อละเว้น echos ที่ไม่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.