เริ่มต้นที่ดีสำหรับ XDG_RUNTIME_DIR?


10

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

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

หากXDG_RUNTIME_DIRไม่ได้กำหนดไว้ฉันกำลังใช้ไดเรกทอรีย่อยต่อผู้ใช้ใน/tmp- แต่ไม่แน่ใจว่ามีเงื่อนไขที่ระบุทั้งหมด (กล่าวคือย่อหน้าที่ขึ้นต้นด้วย"อายุการใช้งานไดเรกทอรีจะต้องผูกพันกับผู้ใช้ที่เข้าสู่ระบบ ... " )

คือ/tmp/myserver-$USERพอดีหรือไม่?

แก้ไข

ฉันเห็นคำแนะนำเล็กน้อยจากที่อื่น:

  • . ค่อนข้างน่าพอใจ (อย่างน้อยก็เพราะไม่ใช่เส้นทางที่สมบูรณ์)
  • ฉันเห็นด้วย/var/run/user/$USER- ไม่เลว แต่ไดเรกทอรีนั้นไม่มีอยู่ (อย่างน้อยก็ในกล่องที่ใช้การทดสอบเดเบียน)

คำตอบ:


4

/tmpถูกใช้โดยโปรแกรมมากมายในลักษณะที่คล้ายกันอยู่แล้ว ในระบบของฉันฉันสามารถดูไดเรกทอรี/tmp/orbit-$USER(ใช้โดย ORBit2 ของ Gnome) และ/tmp/.X11-unix/(Xorg และ X11) ที่มีท่อมากมาย ehm ซ็อกเก็ตอยู่ในนั้น ฉันแน่ใจว่ามีคนอื่นด้วยดังนั้นฉันไม่เห็นอะไรผิดปกติกับสิ่งที่คุณกำลังทำ เพียงเตรียมพร้อมว่าเนื่องจากเป็นสถานที่ที่เขียนได้ทั่วโลกกระบวนการที่เป็นอันตรายจึงสามารถขโมยตำแหน่งได้ (ตรวจสอบสิทธิ์ก่อนที่จะเขียน)

ฉันยังสามารถแนะนำ$TMPDIRสำหรับผู้ที่ใช้pam_mktempเนื่องจากไดเรกทอรีนี้สามารถเข้าถึงได้โดยผู้ใช้เท่านั้น


PAM เป็นคำตอบที่ถูกต้องขอบคุณ! บนเดเบียนเรียกว่า libpam-tmpdir
cadrian

5

SystemD ทำให้/run/user/$USERเป็นข้อบังคับ

http://www.freedesktop.org/software/systemd/man/file-hierarchy.html

การเข้าถึงการเขียนที่ด้อยโอกาส

โดยทั่วไปกระบวนการที่ไม่ได้รับสิทธิขาดจะไม่มีสิทธิ์เข้าถึงการเขียนไปยังลำดับชั้นส่วนใหญ่

ข้อยกเว้นสำหรับผู้ใช้ปกติ/tmp, /var/tmp, /dev/shmเช่นเดียวกับไดเรกทอรีบ้าน$HOME(โดยปกติจะพบว่าด้านล่าง/home) และไดเรกทอรีรันไทม์$XDG_RUNTIME_DIR(ด้านล่าง/run/user)ของผู้ใช้ที่มีความสามารถเขียนได้ทั้งหมด

สำหรับระบบประมวลผลด้อยโอกาสเท่านั้น/tmp, /var/tmpและ/dev/shmมีความสามารถเขียนได้ หากกระบวนการระบบที่ไม่มีสิทธิพิเศษจำเป็นต้องมีไดเร็กทอรีส่วนบุคคลที่สามารถเขียนได้/varหรือ/runแนะนำให้สร้างมันก่อนที่จะปล่อยสิทธิพิเศษในรหัส daemon เพื่อสร้างมันผ่าน tmpfiles.d (5) แฟรกเมนต์ระหว่างการบู๊ตหรือผ่านRuntimeDirectory= คำสั่งของหน่วยบริการ (ดู systemd.unit (5) สำหรับรายละเอียด)


2

สร้างไดเรกทอรี /tmp/service-$USER.id ด้วยรหัสเฉพาะ สำหรับ exsmple ในเชลล์:

mktemp -d /tmp/service-"$USER".XXX

1
คุณจะมั่นใจได้อย่างไรว่าข้อกำหนดที่ใช้ในไดเรกทอรีเดียวกันตั้งแต่การเข้าสู่ระบบครั้งแรกไปจนถึงการออกจากระบบครั้งสุดท้ายของผู้ใช้
cadrian

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