สามารถใช้ symlink ใน /etc/cron.d/ ได้หรือไม่?


25

ฉันพยายามที่จะใช้กลไกการกำหนดค่าที่ช่วยให้ในโครงการบางอย่างเพื่อปรับใช้ผ่าน svn การกำหนดค่า cron

ฉันทันทีเจ้าว่าสิ่งที่ฉันควรทำคือ cerate symlinks จาก /etc/cron.d/ ไปยังไฟล์ cron ของโครงการของฉัน (ซึ่งจะถูกควบคุมโดย vcs) แต่ดูเหมือนว่าจะไม่ทำงาน

ฉันพบข้อความฟอรัมเก่าที่อ้างถึงว่า symlink ไม่ได้รับการสนับสนุนและอื่น ๆ บอกว่าเป็น มันคืออะไร

มีอะไรอีกหรือวิธีอื่นที่ดีในการบรรลุเป้าหมายนี้?

คำตอบ:


27

ตามที่ man crond

คำเตือน

ไฟล์ crontab ทั้งหมดจะต้องเป็นไฟล์ปกติหรือ symlink ไปยังไฟล์ปกติพวกเขาจะต้องไม่ถูกเรียกใช้งานหรือเขียนได้สำหรับบุคคลอื่นยกเว้นเจ้าของ ข้อกำหนดนี้สามารถเขียนทับได้โดยใช้ตัวเลือก -p บนบรรทัดคำสั่ง crond หากไม่สนับสนุนการใช้งานอย่างไม่ถูกต้องการเปลี่ยนแปลงใน crontabs แบบ symlinked จะไม่ถูกสังเกตเห็นโดยอัตโนมัติโดย cron daemon cron daemon ต้องรับสัญญาณ SIGHUP เพื่อโหลด crontabs อีกครั้ง นี่เป็นข้อ จำกัด ของ inotify API

เอาต์พุต syslog จะถูกใช้แทนเมลเมื่อไม่ได้ติดตั้ง sendmail

มันรบกวนอึชีวิตของฉันเช่นกันในระยะสั้นคุณสามารถใช้ symlink ได้ แต่ถ้าไม่ใช่regular files or symlinks to a regular fileมันต้องใช้-pสวิตช์


1
คุณจะพบว่าไฟล์นั้นจะต้องเป็นของผู้ใช้ cron กำลังทำงานอยู่; ตัวอย่างเช่นถ้า symlink /etc/cron.d/bobsjobจุดไปยังไฟล์ที่เป็นเจ้าของโดยผู้ใช้ "บ๊อบ" cron WRONG FILE OWNER (/etc/cron.d/bobsjob)จะล้มเหลวด้วยข้อความ
Craig Ringer

@CraigRinger ฉันมีผู้ใช้ชื่อ "www-data" ซึ่งเป็นเจ้าของไฟล์ cron ฉันกำลังได้รับข้อผิดพลาด WRONG FILE OWNER ใน syslog ฉันจะทำให้ Cron ดำเนินการโดยใช้ผู้ใช้ "www-data" ฉันไม่ต้องการให้รูตเป็นเจ้าของไฟล์
CMCDragonkai

@CMCDragonkai sudo -u www-data crontab -eและเพิ่มลงใน crontab ของผู้ใช้ข้อมูล www www-dataมันจะทำงานแล้วเป็นผู้ใช้ อย่าลืมลบคอลัมน์ผู้ใช้อย่างชัดเจนเนื่องจากไม่มีอยู่ในผู้ใช้ crontabs
Craig Ringer

จะวางไฟล์ไว้ข้างในetc/cron.หรือไม่? ฉันอยู่ภายใต้เครื่องมือ crontab การแสดงผลที่จะวางงานที่อื่น
CMCDragonkai

@CMCDragonkai คุณถูกต้องการโทรcrontab -eไม่ใช่สิ่งที่คุณต้องการในกรณีนี้ ฉันมองหา แต่ไม่พบวิธีเรียกใช้ crontab ผู้ใช้ในฐานะผู้ใช้ที่ไม่ใช่รูท
ACK_stoverflow

14

เรื่องนี้มีผลกระทบด้านความปลอดภัย สคริปต์ใน /etc/cron.d/ ถูกเรียกใช้โดยรูทพร้อมด้วยสิทธิ์รูต เป็นความคิดที่ดีที่จะเชื่อมโยงสคริปต์ที่นั่นซึ่งเป็นเจ้าของและเขียนได้สำหรับผู้ใช้ที่ไม่ใช่รูทเนื่องจากระบบของคุณอาจถูกบุกรุก


4

ฉันจะตรวจสอบ cron manpage สำหรับ Ubuntu ของคุณ (ฉันคิดว่าเรากำลังพูดถึง Ubuntu บนฟอรัมนี้!):

ไฟล์ในไดเรกทอรีนี้จะต้องเป็นเจ้าของโดย root ไม่จำเป็นต้องสามารถเรียกใช้งานได้ (เป็นไฟล์กำหนดค่าเช่น / etc / crontab) และจะต้องสอดคล้องกับหลักการตั้งชื่อเดียวกันกับที่ใช้โดย run-parts (8): ต้อง ประกอบด้วยเฉพาะตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กตัวเลขขีดล่างและยัติภังค์ ซึ่งหมายความว่าพวกเขาไม่สามารถมีจุดใด ๆ

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

ไดเร็กทอรีนี้สามารถมีไฟล์ใด ๆ ที่กำหนดภารกิจตามรูปแบบที่ใช้ใน / etc / crontab เช่นซึ่งแตกต่างจาก cron สปูลของผู้ใช้ไฟล์เหล่านี้จะต้องให้ชื่อผู้ใช้เพื่อเรียกใช้งานตามที่กำหนดไว้ในภารกิจ

เช่นปรากฏชื่อผู้ใช้ก่อนที่คำสั่งจะทำงาน


1
ซึ่งหมายความว่าพวกเขาไม่สามารถมีจุดใด ๆ ใส่ใจกับเรื่องนี้ ฉันมีจุดลงในชื่อลิงก์ มันเป็นผู้ร้ายสำหรับงานที่ไม่ได้ทำงานของฉันสำหรับฉัน บวก: ไฟล์จะต้องลงท้ายด้วย CRLF
ดร. Gianluigi Zane Zanettini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.