Trang chủ EDA | Doman - Hosting | Siêu thị trực tuyến

Chế độ Safe Mode = On, bản chất và cách khắc phục

Thảo luận về vấn đề Domain - Hosting tại đây

Điều hành viên: nguyenducson

Chế độ Safe Mode = On, bản chất và cách khắc phục

Gửi bàigửi bởi admin » Thứ 7 02 Tháng 8, 2008 4:36 pm

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:

Mã: Chọn tất cả
    <?php
       phpinfo();
    ?>


Mở đường dẫn tới file info.php. VD:

Mã: Chọn tất cả
[b]    http://localhost/info.php
    http://yourdomain/info.php[/b]




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ị

Mã: Chọn tất cả
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 "php.ini" ở thư mục Web của bạn với chỉ thị:

Mã: Chọn tất cả
safe_mode = Off


- Cách 2 - Tạo một file ".htaccess" ở thư mục Web của bạn với chỉ thị:

Mã: Chọn tất cả
php_flag 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)

Mã: Chọn tất cả
ini_set('safe_mode','Off');


Đối với hosting quốc tế của EDA, bạn có thể áp dụng cả 3 cách (chúng tôi khuyến cáo bạn nên sử dụng cách 1)

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

Mã: Chọn tất cả
<?php
   // 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: http://vn2.php.net/manual/en/features.safe-mode.functions.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)

Hướng khắc phục:

Trước khi tiến hành các hành động tiếp theo, hãy chắc chắn tất cả các thư mục, file Joomla đều có chung 1 Owner duy nhất và phải biết Owner đó là tài khoản nào.

Bạn có thể download toàn bộ thư mục Joomla xuống rồi lại Upload lên bằng FTP hoặc cPanel. Sau đó CHMOD 777 cho toàn bộ các thư mục và file.

Nếu Upload bằng FTP thì Owner = user của tài khoản FTP mà bạn đã sử dụng.

Nếu Upload bằng File Manager của cPanel hay một công cụ chạy trên Web của Hosting thì Owner = user của Webserver (Apache/PHP...)

Hướng 1. Thử tạo riêng cho mình thư mục "upload_tmp_dir" nằm trong Joomla.

Mã: Chọn tất cả
/home/vinaora/joomla/tmp
C:\www\joomla\tmp


CHMOD = 755 / 777 cho thư mục này. Sau đó thực hiện giống như việc tắt chế độ Safe Mode đã nói ở trên bằng các chỉ thị:

- Nếu dùng .htaccess

Mã: Chọn tất cả
php_value upload_tmp_dir /home/vinaora/joomla/tmp


- Nếu dùng php.ini

Mã: Chọn tất cả
upload_tmp_dir = "/home/vinaora/joomla/tmp"


Lưu ý: Việc thực hiện có thể ko thành công nếu Hosting không cho phép bạn thiết lập lại 2 biến trên.

Hướng 2: Cài đặt bằng tay

Cài đặt module/component/plugin/template trên localhost rồi xác định các thư mục, file nào đã được tạo ra. Upload nguyên các thư mục, file đó (theo đúng cấu trúc) lên thư mục Joomla trên Server.

Ngoài ra cần kiểm tra xem có câu lệnh SQL nào đã được thực thi ko, nếu có bạn cũng phải làm tương tự với Server

Hướng 3: Cố gắng sử dụng Joomla! 1.5 thay vì Joomla 1.0.x

Vào trong phần Global Configuration >> Server >> FTP Settings >>> điền các thông số FTP (username, password...) để Joomla có thể sử dụng user này làm Owner.

P/S:
- REF1: http://vn2.php.net/features.safe-mode
- Nguồn tham khảo VINAORA.COM
Hình đại diện của thành viên
admin
Quản trị viên
 
Bài viết: 211
Ngày tham gia: Thứ 4 05 Tháng 3, 2008 12:00 am

Quay về Domain - Hosting

Ai đang trực tuyến?

Đang xem chuyên mục này: Không có thành viên nào đang trực tuyến44 khách

cron