Bạn là một admin trông coi các web-hosting. Bạn muốn các vhost chỉ được phép truy cập đến các file của vhost đó và cấm tất cả các vhost thực thi các lệnh gọi hệ thống qua PHP. File php.ini có sẵn 3 tùy chọn cấu hình để bạn hoàn thành việc này:
safe_mode=on // bật chế độ an toàn
open_basedir= // cô lập truy cập file trong thư mục
safe_mode_exec_dir= // cô lập lệnh gọi hệ thống trong thư mục
Đây là ví dụ mẫu dành cho bạn tham khảo:
# mkdir /usr/local/none
# vi /usr/local/apache/conf/php.ini
safe_mod=on
safe_mode_exec_dir=/usr/local/none
# vi /usr/local/apache/conf/httpd.conf
NameVirtualHost 10.0.0.1:80
ServerName *.domain1.com
DocumentRoot /home/vhost/domain1.com/htdocs
CustomLog /home/vhost/domain1.com/logs/access_log combined
ErrorLog /home/vhost/domain1.com/logs/error_log
php_admin_flag engine on
php_admin_value open_basedir "/home/vhost/domain1.com/htdocs:/tmp"
ServerName *.domain2.com
DocumentRoot /home/vhost/domain2.com/htdocs
CustomLog /home/vhost/domain2.com/logs/access_log combined
ErrorLog /home/vhost/domain2.com/logs/error_log
php_admin_flag engine on
php_admin_value open_basedir "/home/vhost/domain2.com/htdocs:/tmp"
# /usr/local/apache/bin/apachectl restart
Đầu tiên bạn tạo thư mục trống /usr/local/none bằng lệnh mkdir. Các vhost có thể gọi hàm gọi hàm system(), exec() hoặc passthru(), ... nhưng do bạn đã đặt safe_mode_exec_dir=/usr/local/none trong file php.ini nên họ không thể chạy ls, cat, ... ngoài thư mục /usr/local/none (root.root - dwrx-rx-rx). domain1.com chỉ có thể mở các file trong thư mục /home/vhost/domain1.com/htdocs và /tmp. domain1.com không được phép truy cập đến các file trong thư mục /home/vhost/domain2.com/htdocs của domain2.com do bạn đã set open_basedir cho domain1.com là "/home/vhost/domain1.com/htdocs:/tmp". domain2.com cũng tương tự như vậy.