Menu

Monday, January 6, 2020

[Laravel - Scheduler] ระวัง!!! การไม่กำหนด username ใน Cron Entry สามารถทำให้เกิด "Permission Denied" ได้
[Laravel - Scheduler] Warning!!! Adding Cron Entry without Specify Username May Cause "Permission Denied"

จากตัวอย่างใน Starting The Scheduler จะกำหนดให้ใส่ cron entry ดังนี้
 
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
ถ้าหากเราตั้งค่าข้างต้นใน crontab ของ root จะมีผลทำให้ folder ที่ถูกสร้างโดย Laravel command ที่ถูกรัน เป็นสิทธิ์ root ทันที

ผลกระทบ คือ เมื่อ controller พยายามเขียนไฟล์หรือสร้าง folder ภายใน folder ดังกล่าว จะเกิด Permission Denied ขึ้น ซึ่งอาจจะทำให้หน้าเว็บไม่สามารถใช้งานได้เลย

วิธีการป้องกัน คือ ให้ใส่ cron entry โดยกำหนด username ที่รันเป็น user ที่ใช้รัน web server ดังนี้
 
* * * * * username cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
โดยปกติแล้ว username ที่รัน PHPFPM จะเป็น www-data ดังนั้น cron entry จะเป็นดังนี้
 
* * * * * www-data cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

หมายเหตุ กรณีที่สร้าง folder ด้วยสิทธิ์ root ไปแล้ว ให้แก้ไขโดยใช้คำสั่งดังนี้
 
chown username folder_name
เช่น
 
chown www-data storages

No comments:

Post a Comment