วันนี้ นำเสนอเทคนิคเล็กน้อย สำหรับการเรียกใช้คำสั่ง root ผ่านหน้าเว็บแอพลิเคชั่น อย่างเช่น php บน RPi
ตัวอย่างปัญหา คือ ผมต้องการตั้งค่า วันเวลา บน Rpi
เช่น ผมต้องการให้มีการแก้ไข เวลาของ RPi แล้ว ปกติ เราสามารถเรียกใช้คำสั่ง
sudo date --set="15 NOV 2014 12:43:10" โดยพิมพ์ไปที่ terminal ของ Rpi ได้ แต่ ถ้าเราต้องการทำ web application ให้สามารถแก้ไขเวลาของ RPi หล่ะ เราจะทำอย่างไร
โดยปกติแล้ว php จะสามารถรัน shell_exec แล้วตามด้วย linux command ได้ เช่น
<?php
$output = shell_exec(“ls –l”);
echo “<pre>$output</pre>
?>
หากเราเรียกเว็บเพจที่มี สคริปต์ตัวอย่างด้านบน เราก็จะเห็นรายละเอียดไฟล์ในโฟวเดอร์ใน linux นั้น แต่ ถ้าเราต้องการให้ shell_exec เรียกคำสั่งที่เป็นของ root ได้หล่ะ เช่น
shell_exec(‘sudo date --set="15 NOV 2014 12:43:10"’); แบบนี้ เราจะทำไม่ได้ เพราะ ตัวเว็บเพจนี้ ไม่มีสิทธิ์ทำเช่นนั้นได้ วิธีแก้ไข ก็คือ เราต้องไปกำหนดสิทธิ์ให้เว็บ application นี้ก่อน ทำตามนี้
หากเราต้องการให้เรียกใช้คำสั่ง shell_exec ของ PHP ใน RPi ให้สามารถเรียกใช้คำสั่ง root ได้ เราจำเป็นต้องแก้ไขสิทธิ ของ application ที่ต้องใช้งานสักหน่อย
พิมพ์ sudo visudo
ทำการเพิ่ม www-data ALL=(ALL) NOPASSWD:ALL ไปที่ท้ายไฟล์ แล้วทำการบันทึกไฟล์นี้
จากนั้นเขียนสคริปต์ไฟล์ php แล้วไปวางไว้ที่ /var/www
<?php
$output = shell_exec(‘sudo date --set="15 NOV 2014 12:43:10"’);
echo “<pre>$output</pre>”;
?>
บันทึกโค๊ดนี้ ตั้งชื่อไฟล์ตามใจชอบ เช่น time.php เสร็จแล้ว ลองเปิดหน้าเว็บบราวเซอร์ แล้ว เรียกไปที่ time.php โดยใส่ ip ของ RPi เช่น http://192.168.1.103/time.php เราก็จะสามารถตั้งค่าเวลาของ RPi ผ่านหน้าเว็บได้ ซึ่งโดยปกติ จะไม่สามารถเรียกใช้คำสั่ง sudo ผ่าน shell_exec ได้
ลองเอาไปประยุกต์กันดูนะครับ
ปล. บทความนี้ ไม่อาจเขียนละเอียดมากนัก ผู้ที่ไม่มีพื้นฐานเลย อาจจะงง สักเล็กน้อย ขออภัยไว้ ณ ทีนี้ด้วย
0 ความคิดเห็น:
Post a Comment