แพ็คเกจ Debian ควรสร้างบัญชีผู้ใช้อย่างไร


33

แพ็คเกจqqq.debจะติดตั้งโปรแกรมqqqที่ควรเรียกใช้จากuqqqบัญชีผู้ใช้ แพคเกจประกอบด้วยqqqโปรแกรมqqq.confไฟล์กำหนดค่าและ/etc/init.d/qqqinitscript

แพ็คเกจควรจัดการการสร้างผู้ใช้uqqqอย่างไร มีแนวทางปฏิบัติที่ดีที่สุดหรือแนวทางอย่างเป็นทางการเกี่ยวกับเรื่องนี้หรือไม่?

  1. เพียงแค่สร้างผู้ใช้โดยอัตโนมัติuqqqในการโพสต์;
  2. สร้างผู้ใช้โดยอัตโนมัติเมื่อเริ่มต้นครั้งแรกจาก/etc/init.d/qqqสคริปต์
  3. สร้างผู้ใช้โดยอัตโนมัติเมื่อเริ่มต้นqqqโปรแกรมครั้งแรก(โดยไม่มีข้อโต้แย้ง)
  4. อย่าสร้างบัญชีผู้ใช้ใด ๆ ปฏิเสธที่จะเริ่มเว้นแต่ผู้ใช้จะถูกสร้างโดยผู้ดูแลระบบอย่างชัดเจน (ตัวอย่างเช่นการใช้qqq --create-user);
  5. อย่าสร้างบัญชีผู้ใช้ใด ๆ เรียกใช้อย่างไม่ปลอดภัยจากรูทตามค่าเริ่มต้น
  6. ถามโต้ตอบแบบโพสต์ใน, สคริปต์ init.d หรือqqqตัวเองว่าจะสร้างผู้ใช้

แพ็คเกจควรลบบัญชีผู้ใช้เมื่อถอนการติดตั้งหรือไม่


7
วิธีที่ง่ายที่สุดคือการตอบคำถามนี้คือดูสคริปต์ก่อน / หลังการติดตั้งของแพ็คเกจ Debian อย่างเป็นทางการ เพียงแค่รันgrep adduser /var/lib/dpkg/info/*.postinstบนระบบที่ใช้ Debian เพื่อรับตัวอย่างมากมาย
jofel

เมื่อadduserมีการใช้งานก็ต้องขึ้นอยู่กับแพ็คเกจด้วย ดู: lintian.debian.org/tags/…
Lekensteyn

คำตอบ:


22

wiki Debian มีคำแนะนำที่ครอบคลุมและเฉพาะเจาะจงมากกว่าคู่มือนโยบาย Debian ที่กล่าวถึงแล้ว ดูAccountHandlingInMaintainerScripts :

โปรแกรม Adduser ทำสิ่งที่ถูกต้องหากถูกเรียกด้วยตัวเลือก --system ดังนั้นจึงมักจะจำเป็นต้องโทร

adduser - ระบบ $ USERNAME

ในการโพสต์ของคุณเพื่อสร้างบัญชีที่มีการเข้าสู่ระบบถูกปิดใช้งานกลุ่มหลักของกลุ่ม nogroup และไดเรกทอรีบ้านภายใต้ / home หากคุณต้องการตัวเลือกอื่น ๆ ให้เพิ่มพวกเขาตามที่คุณต้องการ

ตามปกติแล้วไม่จำเป็นต้องทำการ cross-check กับ getent ว่ามีบัญชีอยู่แล้วหรือไม่เนื่องจาก adduser - โดยทั่วไประบบจะทำในสิ่งที่ถูกต้อง ถ้าไม่โปรดรายงานข้อผิดพลาดกับผู้ใช้เพื่อให้สคริปต์ผู้ดูแลของคุณง่ายขึ้น

คำแนะนำที่ให้ไว้ในการลบบัญชีนั้นไม่สามารถสรุปได้ อย่างไรก็ตามฉันจะทราบว่าคำแนะนำที่สอดคล้องกันสำหรับ fedoraนั้นไม่ได้ทำให้เท่าเทียมกัน

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


12

ในฐานะผู้ดูแลระบบที่ติดตั้งแพคเกจฉันคาดว่าแพ็คเกจของฉันจะสร้างผู้ใช้ที่พวกเขาต้องการโดยอัตโนมัติทั้งก่อนและหลังเพื่อให้ไฟล์ใด ๆ ที่จำเป็นต้องเป็นเจ้าของโดยผู้ใช้อาจจะทำก่อนที่โปรแกรมจะทำงาน

โปรแกรมของคุณควรรันในฐานะรูทหากจำเป็นต้อง (เช่นผูกเข้ากับพอร์ตที่มีอภิสิทธิ์) และควรจะทิ้งสิทธิของมันเมื่อมันทำสิ่งที่รูทต้องการ

คุณสามารถดูว่ามีการจัดการกับแพคเกจอื่น ๆ (ติดตั้ง) นี้อย่างไร

grep -l adduser /var/lib/dpkg/info/*postinst /var/lib/dpkg/info/*preinst

และอ่านไฟล์ที่อยู่ในรายการ (ส่วนใหญ่ใช้ตัวเลือกมากกว่าหนึ่งบรรทัด)

ผิดปกติทั้งหมดหนึ่งในแพ็คเกจที่ติดตั้งของฉันที่สร้างผู้ใช้ใช้adduserเพื่อเพิ่มผู้ใช้ แต่แพ็คเกจ adduser ไม่ใช่แพ็คเกจที่จำเป็นดังนั้นแพ็คเกจของคุณจะต้องถูกสร้างขึ้นเพื่อพึ่งพา useraddโปรแกรมจะถูกใช้โดยแพคเกจ libuuid1 และเป็นส่วนหนึ่งของpasswdแพคเกจซึ่งเป็นแพคเกจที่จำเป็น


1
มันแย่มากตรวจสอบวิธีที่เหมาะสมในการสร้างสคริปต์ preinst แทนที่จะทำการแฮ็คด้วยตนเอง
LtWorf

--quietวิธีดูเหมือนเป็นที่นิยมมาก
vidstige

6

มาตรา10.9 สิทธิ์และเจ้าของในคู่มือนโยบายเดเบียนมีสิ่งที่คุณกำลังมองหา (จาก "เวอร์ชั่น 3.9.5.0, 2013-10-28"):

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

หากคุณต้องการ ID ที่จัดสรรแบบคงที่คุณต้องขอรหัสผู้ใช้หรือกลุ่มจากbase-passwd' maintainer, and must not release the package until you have been allocated one. Once you have been allocated one you must either make the package depend on a version of thebase-passwd 'แพ็คเกจที่มี id อยู่ใน/etc/passwd' or / etc / group' หรือจัดเรียงแพ็กเกจของคุณเพื่อสร้างผู้ใช้หรือกลุ่มด้วยตนเอง id (ใช้adduser') in itspreinst 'หรือ postinst'. (Doing it in thepostinst' เป็นสิ่งที่ต้องการถ้าเป็นไปได้มิฉะนั้นจะต้องมีการพึ่งพาล่วงหน้าในแพ็คเกจ `adduser ')

หมายเหตุ:รายการ debian-devel ค่อนข้างแอคทีฟและตอบคำถามเช่นนี้ด้วย (แม้ว่าตัวอย่างนั้นมาจากปี 2003)


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