Monday 3 November 2014

Sử dụng linux hosting để tăng cường bảo mật cho website

Hosting là nơi lưu trữ nội dung trang tin điện tử, website, các thông tin tư liệu, hình ảnh... trên một máy chủ Internet.
Ngày nay, hosting đang được sử dụng rất rộng rãi cho các website vừa và nhỏ, ưu điểm của loại hình shared hosting này là chi phí thấp, thõa mãn nhu cầu cho sử dụng lưu trữ trang web. Tuy nhiên, với chi phí thấp nên thông thường nhiều shared hosting ở cùng một server do đó độ riêng tư không cao. Và với mức độ tấn công của các hacker  khá phổ biến hiện nay, bất kì một website nào cũng có khả năng bị tấn công bất cứ lúc nào, nên việc tăng cường bảo mật cho website trên shared hosting là rất cần thiết. Do vậy VDO xin đưa ra một vài kinh nghiệm mà khi sử dụng hosting bạn cần phải chú ý.
1.      Phân quyền (chmod) hợp lý
Chmod là sự phân quyền truy cập vào một file hay một folder đối với các lớp người dùng giống như các thuộc tính dùng lệnh attrib trong DOS. Mặc định, trạng thái chmod thư mục là 755 và đối với file là 644. Cách chmod tối ưu nhất :
-          chmod 404 (chỉ cho phép đọc) tất cả các file.
-          chmod 101 (chỉ cho thực thi) tất cả các folder.
-          chmod 501 thư mục /public_html/
-          Các file php.ini và .htaccess nên chmod 444
Tuy nhiên không phải server nào cũng cho phép bạn chmod như vậy, nếu bạn dùng FTP không thể chmod được như vậy, thì hãy chmod như sau:
-          chmod 704 (chỉ cho phép đọc) tất cả các file.
-          chmod 701 (chỉ cho thực thi) tất cả các folder.
Các cách chmod trên đều không cho write, do đó bố cục được bảo toàn, đồng thời không thể xem cấu trúc site, thư mục, file. Có thể nói đó là các chmod an toàn nhất mà ứng dụng web như diễn đàn, site nhạc, tin tức có thể hoạt động ổn định.
·      Hướng dẫn chmod trên Cpanel:
Truy cập vào trang quản trị hosting, vào phần file manager

Bảo mật hosting 1
 
Để chmod từng file hay folder, có thể click chọn vào cột Perms hoặc click chuột phải chọn Change Permissions để thay đổi các thông số. Rồi nhấn Save để lưu lại.

 

·           Hướng dẫn chmod qua phần mềm FTP:
Để tiến hành chmod từng file hay folder, click chuột phải tại folder và file đó và chọn File permissions

 
Sau đó, tiến hành điều chỉnh các thông số


Nhấn OK để lưu lại.
2.      Tạo mật khẩu khi truy cập vào thư mục.
Bảo vệ thư mục trên Hosting là một trong những việc cần làm để ngăn chặn sự truy cập không mong muốn, nhất là những thư mục chứa dữ liệu quan trọng cần hạn chế người truy cập.
Đăng nhập vào cPanel và chọn Password Protect Directories trong phần Security.

Bảo mật hosting 5
 
Nhấp chuột vào tên thư mục muốn bảo vệ

Bảo mật hosting 6
 
Tích vào ô Password protect this directory và nhập tên của thư mục cần bảo vệ vào ô Name the protected directory. Sau khi thực hiện xong nhấn Save.

Bảo mật hosting 7
 
Trong phần Create User, tạo lần lượt username, mật khẩu. Sau khi nhập xong nhấn Add/modify authorized user

 
Bảo mật hosting 8
Từ bây giờ mỗi khi muốn truy cập vào thư mục này sẽ xuất hiện một hộp thoại yêu cầu nhập thông tin đăng nhập, người sử dụng bắt buộc phải nhập đúng Tên và Mật khẩu đã tạo thì mới vào được.
3.      Không hiển thị lỗi nếu phát sinh
Khi có lỗi phát sinh, PHP sẽ hiện thông báo ra trình duyệt và chỉ rõ lỗi ở file nào, dòng nào và đường dẫn của file, vì thế điều này rất nguy hiểm.

 
Để không hiển thị lỗi cho người sử dụng, bạn tạo một file php.ini với nội dung như sau:
display_errors = Off
log_errors = On
Sau đó upload lên thư mục chứa website. Nên up file php.ini trên vào các thư mục mà người dùng sẽ truy cập bằng trình duyệt, thường là thư mục chứa website, thư mục quản trị, thư mục của user …
Lưu ý: File php.ini đề cập ở trên chỉ có tác dụng tại thư mục chứa nó, các thư mục không chứa nó sẽ không bị nó chi phối mà sẽ bị cấu hình trong php.ini của server chi phối.
4.      Bật safe-mode (chế độ an toàn)
Safe mode trong PHP là một kỹ thuật thường được Shared Hosting á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). Để bật chế độ này, thêm dòng sau vào file php.ini:
safe-mode = on
Lưu ý: 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.
5.      Vô hiệu các hàm nguy hiểm
Trong PHP có một số hàm nguy hiểm, hacker có thể lợi dụng 1 số hàm này thực thi script, remote từ xa, quản lý các tiến trình hệ thống, tấn công máy chủ vì vậy cần lưu ý đến một số hàm này:
-          system - It executes an external program and display the result.
-          exec - It executes an external command.
-          passthru – It is similar to the exec() function which execute commands.
-          popen – It opens process file pointer.
-          proc_close - It closes a process opened by proc_open and returns the exit code of that process
-          proc_open - It executes a command and opens file pointers for Input/Output
-          proc_get_status - It gets information about a process opened by proc_open()
-          proc_nice - Change the priority of the current process
-          show_source - show the source of a file
-          proc_terminate - Kills a process opened by proc_open
-          highlight_file - Syntax highlighting of a file
-          escapeshellcmd - Escape shell metacharacters
-          define_syslog_variables - Initializes all syslog related variables
-          posix_getpwuid - Return info about a user by user id
-          apache_child_terminate - Terminate apache process after this request
-          posix_kill - Send a signal to a process
-          posix_mkfifo - Create a fifo special file (a named pipe)
-          posix_setpgid - Set process group id for job control
-          posix_setsid - Make the current process a session leader
-          posix_setuid - Set the UID of the current process
-          escapeshellarg - Escape a string to be used as a shell argument
-          posix_uname - Get system name
-          ftp_exec - Requests execution of a command on the FTP server
-          ftp_connect - Opens an FTP connection
-          ftp_login - Logs in to an FTP connection
-          ftp_get - Downloads a file from the FTP server
-          ftp_put - Uploads a file to the FTP server
-          ftp_nb_fput - Stores a file from an open file to the FTP server (non-blocking)
-          ftp_raw - Sends an arbitrary command to an FTP server
-          ftp_rawlist - Returns a detailed list of files in the given directory
-          ini_alter - This function is an alias of: ini_set()
-          ini_restore - Restores the value of a configuration option
-          syslog - Generate a system log message
-          openlog - Open connection to system logger
-          define_syslog_variables - Initializes all syslog related variables
-          apache_setenv - Set an Apache subprocess_env variable
-          mysql_pconnect - Open a persistent connection to a MySQL server
-          eval - Evaluate a string as PHP code
-          fputs - Alias of fwrite()
-          shell_exec - execute command via shell and return the complete output as a string
-          curl_exec - perform a cURL session
-          curl_multi_exec - run the sub-connections of the current cURL handle
-          dl - loads a PHP extension at runtime
-          fsockopen - open internet or unix domain socket connection
-          parse_ini_file - parse a configuration file
-          symlink - creates a symbolic link
Để vô hiệu hóa hàm nào, chỉ cần thêm lệnh này trong file php.ini:
disable_functions = (các hàm cần vô hiệu hóa)
Lưu ý: Vô hiệu hóa một số hàm có thể ảnh hưởng đến chức năng của trang web, tuy nhiên sẽ tăng cường tính bảo mật cho website. Vì vậy nên cân nhắc khi sử dụng.
6.      Vô hiệu hoá biên dịch mã PHP trong thư mục chỉ định
Nếu website có một thư mục dành cho việc upload, bạn nên vô hiệu hoá việc biên dịch và thực thi mã PHP trong thư mục ấy vì hacker có thể lợi dụng việc upload để đưa script độc (webshell) lên host của bạn.
Tạo file .htaccess đặt vào thư mục đó với nội dung như sau:
php_admin_flag engine off
Sau đó chmod 444 cho file.
7.      Phân quyền account truy cập CSDL MySQL
Khi tạo user đăng nhập vào database MySQL của website, cần lưu ý:
-          Không dùng chung tài khoản user và password của host làm user của database
-          Không cấp quyền DROP cho user này.
8.      Thường xuyên cập nhật bản vá lỗi cho website
Nếu website sử dụng một số CMS thông dụng như: Joomla, drupal, moodle,... nên thường xuyên cập nhật các phiên bản mới nhất bao gồm cả theme, module hay plug-in cho trang web.