Category Archive Laravel

Byphunsanit

เช็ค file owner permission โดย php

อัพงานที่ทำแล้วมีอาการแปลกๆ login ไม่ได้ upload view ขึ้นไปใหม่ก็ไม่เปลี่ยน ลองเข้าไปลบ cache เอง ถึงจะหาย ใช้ไปไม่นานก้เป็นอีก คิดว่าเป็นปัญหาที่ไฟล์ permission และไฟล์ owner ลองสังเกตดูเจ้าของไฟล์ที่ ftp ขึ้นไปมีเจ้าของคนละเลขกัน ( ดูใน filezila ก็ได้มันก็โชว์ )

เป็นธรรมดาที่เฟรมเวิร์กเดี๋ยวนี้จะสร้างไฟล์ขึ้นมาเองเพื่อทำเป็น cache หรือ auto-loading ต่างๆ ขึ้นมาเอง อย่าง laravel หลักๆก็จะอยู่ที่ /storage/ ถ้าตัว php ไม่สามารถที่จะเขียนไฟล์ ลบไฟล์ออก หรือแค่ไฟล์ในนี้ไม่ได้จะออกอาการเอ๋อทันที
ใช้ filezilla เปลี่ยน chmod สังเกตว่าบางไฟล์มันเปลี่ยนสิทธิไม่ได้ มีปัญหา owner แล้วแน่นอน
ก็ขอข้อมูลการติดต่อทาง host จากเจ้าของเห็นชื่อก็สังหรณ์ใจทันที เป็นเจ้าของเดียวก็บโปรแกรม apple ที่มีปัญหาดราม่ากันกับกลุ่มคนทำเว็บเรื่องไม่ update โปรแกรมตัวเอง ติดต่อไปก็งานเข้าทันทีเค้าบอกว่า permission ต่างกันแล้วยังไง มันไม่มีผลอะไร แต่เค้าก็มีปุ่มให้ 2 ปุ่มวิเศษ (ทำไว้ทำไม่วะครับ) คือ

  • กดปุ๊บ จะเปลี่ยน owner ให้ทั้งโพลเดอร์ นานๆ อัพทีคงจะไม่เป็นไร เข้าไปกดมันก็ได้
  • อีกปุ่มคือ “ปล่อยผี” กดแล้วจะเปลี่ยนสิทธิทุกไฟล์เป็น 777 wtf กันเลย ไม่กลัวความปลอดภัยกันเลยใช่มั๋ย งานมันต้องเอาขึ้นแล้วก็ทนๆก่อน
    หลังจากทำทุกอย่างที่เค้าบอกมาแล้ว โปรแกรมเหมือนจะใช้ได้ ยกเว้น upload file ผ่านทาง php ไม่ได้ ดู error log
at HandleExceptions->handleError('2', 'is_executable():
open_basedir restriction in effect. File(/usr/local/php53/lib/php/) is not within the allowed path(s):
(.:/home/www/virtual/xxx/:
/usr/local/php53/lib/php/:/tmp/)',
'/home/www/virtual/xxx/cms_inside/htdocs/vendor/symfony/process/ExecutableFinder.php',
'63', array('name' => 'php', 'default' => false, 'extraDirs' => array('/usr/local/php70/bin'),
'searchPath' => array('.', '/home/www/virtual/xxx/', '/usr/local/php53/lib/php/', '/tmp/'),
'dirs' => array('.', '/home/www/virtual/xxx/'),
'path' => '/usr/local/php53/lib/php/'))

ไป search หาดูเค้าบอกกันว่า path มันไม่อยู่ใน config open_basedir ทดลองกับเครื่องตัวเองก็เป็นสาเหตุได้จริงๆ ก็ส่งอีเมล์ ไปขอให้แก้ config ให้ใหม่ใส่ /usr/local/php70/bin เพิ่มเข้าไป คุณท่านก็บอกกลับมาว่า มันไม่เกี่ยว เค้าก็เขียน php เหมือนกัน แต่ก็ยอมแก้ให้ หลังจากนั้นไฟล์ก็ี upload ได้ปกติ ชักจะเริ่มสงสัยแล้วว่า config server แล้วก็เขียนโปรแกรมเป็นจริงๆ รึเปล่า

ต่อมา เจออีกกว่าส่งอีเมล์ออกไม่ได้ เพราะว่าไป disable บางอย่างไว้ ครั้งนี้เปลี่ยน host ละไม่ไหวเจ้านี้ เลยเขียน script ไว้ตรวจเบื้องต้น รอเค้าเซ็ตไปก่อน ( เหมือน server ในไทยนี่ยังใช้อัตโนมือกันอยู่เลย ทำให้ต้องรอ 1 วันเต็ม ๆ )

<?php
echo '<br>Current script owner: ' . get_current_user();
echo '<hr>';
 
echo '<br>file upload by ftp owner = ' . fileowner('test.php');
echo '<br>file upload by ftp group = <pre>' . print_r(posix_getgrgid(filegroup('test.php')), true), '</pre>';
echo '<hr>';
 
echo '<br>file index.php owner = ' . fileowner('index.php');
echo '<br>file index.php group = <pre>' . print_r(posix_getgrgid(filegroup('index.php')), true), '</pre>';
echo '<hr>';
 
file_put_contents('testFile.php', '<?php phpinfo();');
echo '<br>create by php owner = ' . fileowner('testFile.php');
echo '<br>file upload by php group = <pre>' . print_r(posix_getgrgid(filegroup('testFile.php')), true), '</pre>';
unlink('testFile.php');

ถ้าทั้งหมดได้ user id เดียวกัน หรืออยู่ group เดียวกันก็เบาใจ แต่ไม่จำเป็นว่า group จะต้องเป็น www-data เคยเจอว่าบางที่เค้าจะสร้าง group ใหม่ให้ลูกค้าแต่ละเจ้าไปเลยเพื่อความปลอดภัย

เปลี่ยนโฮสต์เจ้าใหม่ โปรแกรมที่เขียนทำงานได้ตามปกติทุกอย่าง ลาก่อนน้องเอ๊ปเปิ๊ล อย่างลืมนะครับ เลิกใช้แอปเปิ้ลกันได้แล้ว