Friday, November 21

how to use php commnad “shell_exec” as root in RPi

วันนี้ นำเสนอเทคนิคเล็กน้อย สำหรับการเรียกใช้คำสั่ง 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  ไปที่ท้ายไฟล์ แล้วทำการบันทึกไฟล์นี้

sudo visudo

จากนั้นเขียนสคริปต์ไฟล์ 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 ได้ 

ลองเอาไปประยุกต์กันดูนะครับ

ปล. บทความนี้ ไม่อาจเขียนละเอียดมากนัก ผู้ที่ไม่มีพื้นฐานเลย อาจจะงง สักเล็กน้อย ขออภัยไว้ ณ ทีนี้ด้วย

อ่านเพิ่มเติม...
 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

About Me

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

Blog อื่นๆของฉัน

Microcontroller Electronics update

สถิติเยี่ยมชมบล๊อก