PHP exec với quyền root của Linux

Từ PHP có thể gọi chạy lệnh Linux, một số lệnh cần chạy với quyền root.

Các lệnh từ trang web được thực thi với quyền của user www-data, nên ít nhất user này có phải quyền thực thi lệnh Linux tương ứng. Tuy nhiên user www-data không thuộc nhóm root, vì vậy cần phải có thêm một số thủ thuật để có thể chạy lệnh Linux với quyền root.

Giả sử lệnh cần chạy là service minidlna start

1. Tạo file Bash gọi chạy lệnh trên, giả sử tên file Bash là php-exec

#!/bin/bash
[ "$(pidof minidlna)" ] || service minidlna start

2. Cho phép user www-data gọi chạy php-exec với quyền root bằng cách chạy lệnh visudo, thêm vào cuối file

www-data ALL=NOPASSWD: /path/to/php-exec

3. Khởi động lại RPI

4. Từ lúc này có thể gọi chạy lệnh Linux nói trên bằng lệnh PHP exec hay shell_exec

exec('sudo /path/to/php-exec');

 

Leave a Comment

Filed under Software

Leave a Reply