ผมเขียนกระบวนการภูตสำหรับระบบ Debian ในC
ที่ใช้โดเมนซ็อกเก็ตยูนิกซ์
หากไดเร็กทอรีการทำงานของกระบวนการ daemon เป็นไดเร็กทอรีรูทจะมีไดเร็กทอรีที่เป็นเอกลักษณ์เพื่อวางซ็อกเก็ตบนระบบไฟล์หรือไม่?
ผมเขียนกระบวนการภูตสำหรับระบบ Debian ในC
ที่ใช้โดเมนซ็อกเก็ตยูนิกซ์
หากไดเร็กทอรีการทำงานของกระบวนการ daemon เป็นไดเร็กทอรีรูทจะมีไดเร็กทอรีที่เป็นเอกลักษณ์เพื่อวางซ็อกเก็ตบนระบบไฟล์หรือไม่?
คำตอบ:
พวกเขามักจะพบใน/tmp
หรือไดเรกทอรีย่อยของมัน โปรดทราบว่าทุกสิ่งที่/tmp
อยู่ภายใต้การลบเมื่อปิดเครื่อง - ไม่ใช่ว่าจำเป็นจะถูกลบเพียงแค่ระวังว่ามันอาจเป็นไปได้ดังนั้นหากคุณใช้ให้ตรวจสอบว่าคุณต้องสร้างไดเรกทอรีย่อยของคุณทุกครั้งหรือไม่ คุณจะต้องการใช้ไดเรกทอรีย่อยหากคุณต้องการ จำกัด การเข้าถึงผ่านการอนุญาตเนื่องจาก/tmp
โลกสามารถอ่านได้
/run
และ/var/run
(ซึ่งอาจเชื่อมโยงกัน) ถูกนำมาใช้ในลักษณะเดียวกัน แต่โดยทั่วไปแล้วจะถูกติดตั้งเป็นระบบไฟล์ tmpfs - หมายถึงพวกมันถูกสร้างขึ้นตอนบู๊ตและอยู่ในหน่วยความจำไม่ใช่ในดิสก์ (ดังนั้นอย่าใช้มันเป็นสถานที่ถ่ายโอนข้อมูล ข้อมูลปริมาณมหาศาล) สำหรับซ็อกเก็ตรันไทม์อาจเป็นตัวเลือกที่ดี
โปรดทราบว่า/run
และไดเรกทอรีอื่น ๆ ทั้งหมดที่กล่าวถึงที่นี่ยกเว้น /tmp
จะเขียนได้โดย root เท่านั้น สำหรับกระบวนการของระบบนี่เป็นสิ่งที่ดี แต่ถ้าแอปพลิเคชันอาจถูกเรียกใช้โดยผู้ใช้ที่ไม่มีสิทธิพิเศษคุณต้องการใช้/tmp
หรือสร้างไดเรกทอรีถาวรที่ไหนสักแห่งและตั้งค่าการอนุญาตบนนั้นหรือใช้ตำแหน่งใน $ HOME ของผู้ใช้
เป็นไปได้ที่จะสร้างไดเรกทอรีใน/usr/share
(หรือ/usr/local/share
) ระหว่างการติดตั้ง ไดเรกทอรีและเนื้อหามีไม่อาจเก็บเกี่ยวทั่วรองเท้าที่พวกเขาจะอยู่ในหรือ/tmp
/run
แต่เป็นjordanmคะแนนจากในความคิดเห็นที่/usr
อาจจะมีการติดตั้งอ่านอย่างเดียวและลินุกซ์ระบบแฟ้มลำดับชั้นแนวทางสะท้อนถึงนี้ แน่นอนว่ามันไม่สามารถอ่านได้อย่างเดียวเมื่อติดตั้งแอปพลิเคชันของคุณดังนั้นหากคุณสะดวกสบายในการสร้างซ็อกเก็ตที่นั่นคุณสามารถทิ้งไว้และใช้งานได้ในภายหลัง (คุณจะยังคงสามารถเขียนลงในซ็อกเก็ตได้ ไฟล์เป็นแบบอ่านอย่างเดียว)
หากคุณต้องการอยู่ที่ไหนสักแห่งในรองเท้าบู๊ตที่ไม่ได้ติดตั้งแบบอ่านอย่างเดียว/etc
เป็นเดิมพันที่ค่อนข้างปลอดภัยเนื่องจากมักใช้สำหรับการกำหนดค่าทั้งระบบและการกำหนดค่าใหม่ OTOH เป็นไปได้ที่จะมีระบบที่อุปกรณ์ที่รองรับระบบไฟล์รูททั้งหมดเป็นแบบอ่านอย่างเดียว (เช่นระบบฝังตัว) ด้วย / tmp และ / ทำงานบนอุปกรณ์อื่น (อาจเป็น: tmpfs ในหน่วยความจำ) ดังนั้นทั้งสองกลยุทธ์ที่แข็งแกร่งที่สุดน่าจะเป็น:
ติดตั้งซ็อกเก็ตไปยังตำแหน่งถาวรเมื่อติดตั้งแอปพลิเคชัน
สร้างไดเรกทอรีใน/run
หรือ/var/run
ที่รันไทม์และวางซ็อกเก็ตที่นั่น
ทำสิ่งเดียวกันเพียง /tmp
แต่ใน
ข้อดีของอันแรกก็คือไม่ว่าจะเกิดอะไรขึ้นเมื่อติดตั้งแอพแล้วคุณจะมีซ็อกเก็ตให้ใช้งาน ข้อดีของข้อที่สองคือมันอาจเอื้อต่อการเขียนโปรแกรมมีสติมากขึ้น ข้อดีของข้อที่สามคือไม่ต้องใช้สิทธิ์ superuser การสลับจากการใช้งานไปเป็นการใช้งานอื่นเป็นเรื่องง่ายถ้าคุณเปลี่ยนใจในภายหลัง
ในที่สุดเมื่อBatchyX ปรากฏตัวขึ้นอย่างน้อยคุณควรเสนอตัวเลือกการกำหนดค่าสำหรับสิ่งนี้และเลือกตัวเลือกการตั้งค่าเริ่มต้น
/run
หรือ/var/run
มักจะใช้สำหรับกระบวนการรูท
/tmp
มากยิ่งขึ้นกว่า ฉันจะแก้ไขสิ่งต่อไปนี้
/usr
สามารถติดตั้งแบบอ่านได้อย่างเดียว ไม่ควรสร้างไฟล์ที่นั่นขณะใช้งานจริง ข้อเสนอแนะอื่น ๆ เป็นสิ่งที่ดี
/tmp/.APPNAME/.APPSOCK
เพราะ daemon ไม่ต้องการข้อมูลถาวร
/tmp
และเป็นที่รากเท่านั้นที่มีสิทธิ์ในการเขียนใน/run
/run