สิทธิ์ในการเขียนไฟล์ PID ใน / var / run


51

อูบุนตู

touch: ไม่สามารถสัมผัส `/var/run/test.pid ': ปฏิเสธการอนุญาต

ฉันเริ่ม start-stop-daemon และต้องการเขียนไฟล์ PID ใน / var / run start-stop-daemon ถูกเรียกใช้เป็น my-program-user

การตั้งค่า / var / run คือรูทราก drwxr-xr-x 9

ฉันชอบที่จะหลีกเลี่ยงการวางโปรแกรมผู้ใช้ของฉันลงในกลุ่มรูท

คำตอบ:


71

โดยค่าเริ่มต้นคุณสามารถเขียนได้เฉพาะ / var / run ในฐานะผู้ใช้ที่มี ID ผู้ใช้ที่มีประสิทธิภาพเป็น 0 (เช่นในฐานะรูท) นี่คือเหตุผลที่ดีดังนั้นไม่ว่าคุณจะทำอะไรอย่าไปและเปลี่ยนการอนุญาตของ / var / run ... ให้สร้างไดเรกทอรีภายใต้ / var / run แทน:

# mkdir /var/run/mydaemon

จากนั้นเปลี่ยนความเป็นเจ้าของให้กับผู้ใช้ / กลุ่มที่คุณต้องการเรียกใช้กระบวนการของคุณ:

# chown myuser:myuser /var/run/mydaemon

ตอนนี้ระบุให้ใช้ / var / run / mydaemon แทนที่จะเป็น / var / run

คุณสามารถทดสอบสิ่งนี้ได้เสมอโดยทำการทดสอบในฐานะผู้ใช้ที่มีปัญหา


5
นี้ทำงานได้ดีสำหรับฉัน แต่เมื่อฉันเริ่มต้นใหม่เซิร์ฟเวอร์ของฉันแล้ว/var/run/mydaemonไดเรกทอรีก็หายไป
myborobudur

17
นี่ไม่ใช่คำตอบที่สมบูรณ์ / var / run คือ tmpfs ตามค่าเริ่มต้นบน Ubuntu แต่ละครั้งที่เซิร์ฟเวอร์เริ่มทำงานคำสั่ง mkdir และ chown จำเป็นต้องถูกเรียกใช้ซ้ำ
ทิม

1
@Tim วิธีการเกี่ยวกับการแก้ไขคำตอบและทำมันได้หรือไม่
ไกเซอร์

หากคุณกำลังติดต่อกับภูตแล้ววิธีการแก้ปัญหาที่สะอาดจะเพิ่มเส้นทาง / var / ทำงาน / mydaemon ไปยังแฟ้มหน่วย systemd ตามที่อธิบายไว้ที่นี่ โซลูชันแฮ็กที่ง่ายขึ้นคือการเพิ่มคำสั่ง mkdir และ chown ให้กับสคริปต์ init.d (ถ้ามี)
odedfos

1
คำตอบที่กว้างขวางดีกว่าอยู่ที่นี่: superuser.com/a/1127720/71795คำตอบที่ผิดซึ่งดูเหมือนว่าสง่างามมากอยู่ที่นี่: stackoverflow.com/a/5174433 สรุป: ใช้อย่างใดอย่างหนึ่งหรือ/tmp ~
ทิม

13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

สิ่งนี้จะไม่ทำงานเนื่องจากจะหายไปในการรีบูตครั้งถัดไป ( /var/runเป็น tmpfs บน Ubuntu)

ทางออกที่เป็นไปได้เพียงอย่างเดียวคือการเรียกใช้ mkdir และ chmod ซึ่งเป็นส่วนหนึ่งของสคริปต์เริ่มต้น


3

คุณสามารถลองสิ่งนี้ สร้างไดเรกทอรี / var / run / test / แล้วเปลี่ยนสิทธิ์ของไดเรกทอรีนี้เป็นผู้ใช้เดียวกันกับที่โปรแกรมของคุณทำงาน "chown / var / run / test /" ตอนนี้ในแอปพลิเคชันของคุณเปลี่ยนตำแหน่งของไฟล์ PID เป็น /var/run/test/test.pid สิ่งนี้จะช่วยให้คุณทำงานได้ดีขึ้น


2

สิ่งที่เกี่ยวกับการใช้บิต "เหนียว" ใน / var / run?

chmod + t / var / run?

อาจทำให้แอปอื่น ๆ ยุ่ง แต่ดูเหมือนว่ามันจะเป็นวิธีแก้ปัญหาอื่น

อย่างไรก็ตามฉันจะยังคงสร้างโฟลเดอร์ / var / run แยกต่างหากในตอนนี้


1

รายการในรายการ/etc/permissionsนั้นถาวร ทำรายการที่นั่นเพื่อสร้างความเป็นเจ้าของและสิทธิ์สำหรับไดเรกทอรีอย่างถาวร


-6

เพื่อหลีกเลี่ยงการวางโปรแกรมผู้ใช้ของคุณในกลุ่มรูทอนุญาตให้ผู้อื่นเขียนเข้าถึง:

# chmod 757

3
อย่าทำ chmod 757 บน / var / run! สิ่งนี้จะทำให้เกิดปัญหาด้านความปลอดภัยที่รุนแรง
เชล

1
นี่เป็นความคิดที่แย่มาก มันจะทำให้เกิดปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นอย่างมาก
Tom O'Connor

แม้ว่าเราจะไม่สนใจปัญหาด้านความปลอดภัย แต่chmod 757ก็จะใช้งานได้จนกว่าการรีบูตครั้งถัดไปเท่านั้น ขออภัยที่เกี่ยวกับการสร้างคำตอบใหม่ แต่ดูเหมือนจะไม่มีทางตอบความคิดเห็นอื่น ๆ
Vladimir Nicolici

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