Chế độ Safe Mode = On, bản chất và cách khắc phục
Safe Mode là gì?
Safe Mode
trong PHP (chế độ An toàn trong PHP): một kỹ thuật thường được Shared
Hosting (Hosting Chia sẻ) áp dụng để tăng cường bảo mật (chống lại các
tấn công nội bộ, thường được gọi là Hack Local). Kỹ thuật này không
thực sự hoàn hảo ở mức PHP và cho đến thời điểm hiện tại nó vẫn được áp
dụng ở nhiều nơi. Tuy nhiên, cũng thật may là kể từ phiên bản PHP 6.0
tính năng này sẽ bị loại bỏ và chúng ta sẽ không còn phải bận tâm đến
nó nữa.
Xác định Safe Mode đang là On hay Off?
Tạo một file info.php trong thư mục Web của bạn với nội dung như sau:
Code:
- Code:
<?php
phpinfo();
?>
Trích:
[You must be registered and logged in to see this link.] |
Tìm mục "Loaded Configuration File" để biết file cấu hình php.ini được đặt ở đâu.
Tìm mục "safe_mode"
để biết trạng thái hiện tại của Safe Mode (On là bật, Off là tắt)
Tắt chế độ Safe Mode?
Trường hợp 1: Bạn có thể quản lý Server
Xác định vị trí file cấu hình php.ini (xem ở bài trên), mở file và thiết lập giá trị
Trích:
safe_mode = Off |
Trường hợp 2: Bạn không phải là người quản lý Server
Bạn có thể thử tắt nó bằng 1 trong 3 cách (với điều kiện Server cho phép ghi đè lên thiết lập ban đầu)
- Cách 1 - Tạo một file ".htaccess" ở thư mục Web của bạn với chỉ thị:
Trích:
php_flag safe_mode off |
- Cách 2 - Tạo một file "php.ini" ở thư mục Web của bạn với chỉ thị:
Trích:
safe_mode = Off |
- Cách 3 - Dùng hàm ini_set của PHP: Đặt lệnh sau vào file cấu hình (chẳng hạn globals.php, configuration.php)
Trích:
ini_set('safe_mode','Off'); |
Bản chất của Safe Mode.
Giả sử bạn có một script: /home/vinaora/do_some_thing.php với nội dung
Trích:
// do job-1 // do job-2 // .... // do job-n ?> |
Với Safe Mode = On, khi bạn thực thi script do_some_thing.php ở trên, Server sẽ kiểm tra Owner (chủ sở hữu) của script do_some_thing.php là ai? VD: "vinaora" hay "apache" hay "user-xyz" nào đó.
Nếu trong công việc "job-x" có 1 phép xử lý liên quan tới file hay thư mục nào đó (thư mục /opt/lampp/tmp chẳng hạn), mà file hay thư mục này lại thuộc quyền sở hữu của 1 Owner khác), lỗi sẽ xảy ra.
Ngoài ra khi Safe Mode = On thì có thể rất nhiều hàm đã bị vô hiệu hóa.
VD: move_uploaded_file(), mkdir()... Do vậy, nếu trong script *.php của
bạn có sử dụng 1 trong các hàm trên, lỗi cũng xảy ra.
Danh sách các hàm bị vô hiệu hóa: [You must be registered and logged in to see this link.] ... ctions.php
VD: Safe Mode = On ảnh hưởng tới việc cài đặt Joomla
Khi bạn cài đặt một module/component/plugin/template trên Joomla, Joomla sẽ thực hiện các công việc sau:
(1) Upload gói cài đặt (*.zip) tới thư mục tạm của Webserver, chẳng
hạn: /opt/lampp/tmp (biết bằng tham số "upload_tmp_dir" thông qua file
info.php đã nói ở trên)
(2) Giải nén gói cài đặt: Tương ứng với việc tạo các thư mục, và file
(theo hướng dẫn mà file .xml trong gói cài đặt .zip đã chỉ ra)
(3) Chuyển các thư mục và file đã giải nén ở trên tới các vị trí thích hợp trong thư mục Web Joomla của bạn.
Lỗi có thể xảy ra vì Owner của các file trên Joomla và Owner của thư mục /opt/lampp/tmp khác nhau.Lưu ý: Safe Mode có thể thiết lập việc kiểm tra với Owner (UID) hoặc Group Owner (GID)