[PHP]Về việc cấp quyền cho WebServer chạy exec/shell_exec trên Linux

Chuyện là trong quá trình làm ứng dụng Web, mình có làm tool phía back-end (python) để xử lý dữ liệu do người dùng up lên (PHP). Do vậy mới cần dùng các hàm exce/shell_exec của PHP để gọi chạy các file python. Cơ mà…

Trên Window thì ok, không vấn đề gì nhưng trên Linux mặc định cơ chế bảo mật nó cao quá nên thằng WebServer không có quyền bắt python phải làm cái này, python phải làm cái kia

PHP: Ê Python, chạy cái này cho tao!

Python: Méooo….!!! :v

Thế thì làm sao?

Cấp quyền cho Webserver gọi shell

Do bảng chất khi WebServer thực hiện code php thì nó cũng đang chạy dưới danh nghĩa 1 user (nào đó) trong Linux, do vậy cần tìm nó và gán quyền “Ông trưởng bộ phận” cho nó để nó để nó có quyền “điều binh khiển tướng” =))

Xem user chạy Web là thằng nào

ps aux | grep httpd

ps aux | grep lampp

ps aux | grep nginx

ps aux | grep apache

Tùy cài cái nào mà kiểm tra cái đó, như mình cái XAMPP (LAMPP)

Nếu nhìn vô mớ hỗn độn kia không hiểu chi mô hết (giống mình =)) ) thì test thử bằng cách chạy lệnh sau trong php

echo exec(“sudo -S pip –version 2>&1”);

Nhớ chạy trong php nhá!

Lúc này màn hình sẽ bắt nhập password cho cái thằng user nào quản lý Webserver, chỉ việc nhớ tên nó thôi. Như trong trường hợp của mình nó là:

deamon

deamon có nghĩa là nobody, không ai cả @@! chạy nặc danh đấy!

Gán quyền cho Deamon (Giống Doraemon nhỉ :v )

Tìm đến file sau:

/etc/sudoers

File này lưu giữ các quyền sudo của các user trong hệ thống

Kéo xuống thêm dòng này

daemon ALL=(ALL) NOPASSWD:ALL

Đại loại là gán full quyền cho deamon, và không yêu cầu password nữa

Mẹo cho những ai quen Window

Chúng ta có thể chmod file lại thành 777 để sửa cho dễ, sau đó chmod lại 755 để trả về như cũ.

chmod 777 /etc/sudoers

chmod 755 /etc/sudoers

Nếu vẫn để chmod 777 thì sẽ không gọi được lệnh sudo đâu nhá

Kiểm tra xem php gọi được python chưa

Chạy lại đoạn sau

echo exec(“sudo -S pip –version 2>&1”);

Lúc này hiện version python là ok

Xong, vậy thôi đó mà làm mình mất cả buổi :’)

-soiqualang_chentreu-