HƯỚNG DẪN Chroot Apache 2 Web Server trên Red Hat/CentOS:

Thảo luận trong 'KIẾN THỨC VPS/SERVER' bắt đầu bởi quyet1990, 17/12/16.

  1. quyet1990

    quyet1990 New Member

    Tham gia ngày:
    22/10/16
    Bài viết:
    220
    Đã được thích:
    0
    Sandbox có thể là một công cụ hữu dụng cho việc trợ giúp bảo vệ hệ thống chống lại sự thỏa hiệp, miễn là bạn sử dụng nó sáng suốt. Trong bài này sẽ giới thiệu cho các bạn một Sandbox cụ thể, chroot, đây là một Sandbox đơn giản, dễ sử dụng, cũng như khả năng có sẵn cao.

    Trong thuật ngữ bảo mật ứng dụng, sandbox là một cơ chế kỹ thuật mà với cơ chế đó, một số hoạt động của các ứng dụng có thể được cô lập với phần còn lại của hệ thống theo một cách nào đó, hy vọng nó sẽ bảo vệ hệ thống của bạn chống lại được bất cứ ác tâm hay những điều không may có thể rơi vào các ứng dụng đó.

    Tiện ích chroot thường là một cách đơn giản nhất, nhanh nhất và có thể nói là dễ dàng nhất cho việc sandbox một ứng dụng nào đó – đặc biệt một máy chủ - nơi vấn đề bảo mật là quan trọng hàng đầu.

    Khi sử dụng chroot, một mẩu phần mềm sẽ được khởi chạy bên trong một kiểu cấu trúc thư mục root lỗi, theo lý thuyết là làm cho phần mềm bị “đánh lừa” và nghĩ rằng không có gì bên ngoài cấu trúc thư mục đó, vì vậy sẽ cách ly phần còn lại của hệ thống với bất cứ vấn đề có tiềm ẩn sự ảnh hưởng gây hại trong việc chạy phần mềm này.

    Bất cứ quá trình nào được chroot root đều tránh được sự truy nhập trực tiếp vào cấu trúc thư mục root lỗi của nó, tuy nhiên vẫn tiềm ẩn một số ứng dụng có thể chạy phần mềm khác và được lợi dụng để tạo các quá trình có thể phá hủy môi trường chroot. Phương pháp kinh điển để phá hủy sandbox đó là bảo tạo khả năng có thể gắn lại (remount) thư mục hiện hành.

    Trong bài này, bạn sẽ tìm hiểu thêm về:
    • Đảm bảo một máy chủ web Apache 2 trên Red Hat Enterprise Linux/CentOS Linux dùng mod_chroot
    • Cấu hình virtual host trong chroot jail.
    • Xử lý sự cố chroot jail Apache.
    Yêu cầu
    • Server: Apache 2 web server.
    • Thư mục tù: /httpdjail.
    • User/Group: apache/apache (không bao giờ chạy chroot sử dụng user root).
    • Thư mục tên miền ảo cho tất cả các miền trong jail: /home/httpd.
    • PHP được cấu hình thông qua mod_php mặc định.
    • Hướng dẫn được thử nghiệm trên CentOS/RHEL 5.x.
    Thêm thông tin về thư mục Jail: / httpdjail
    Tạo một thư mục jail như sau:
    Mã:
    # J=/httpdjail
    # mkdir $J
    
    • Không tạo thư mục /dev bên trong jail của bạn.
    • Không tạo tập tin thiết bị đặc biệt bên trong jail.
    • Đừng sao chép shell hoặc bất kỳ tập tin thực thi duy nhất khác vào bên trong jail của bạn.
    • Không chạy httpd hoặc php/perl/python với user root.
    • Nếu có thể gắn /httpdjail sử dụng một phân vùng riêng biệt với các tùy chọn nosuid, nodev và noexec. Điều này sẽ cải thiện an ninh do người dùng sẽ không thể chạy kích hoạt chương trình SUID và tập tin thiết bị bên trong một jail.
    Cài đặt Apache, PHP và MySQL
    Cài đặt gói cần sử dụng lệnh yum, hãy nhập:
    Mã:
    yum install mysql mysql-server httpd php-mysql php-pear php-xml php-mysql php-cli php-imap php-gd php-pdo php-devel php-mbstring php-common php-ldap php httpd-devel
    
    Bây giờ, tạo ra các thư mục cần thiết bên trong jail của bạn:
    Mã:
    mkdir -p $J/var/run
    chown -R root.root $J/var/run
    mkdir -p $J/home/httpd
    mkdir -p $J/var/www/html
    mkdir -p $J/tmp
    chmod 1777 $J/tmp
    mkdir -p $J/var/lib/php/session
    chown root.apache $J/var/lib/php/session 
    • $J/var/run sẽ lưu trữ PID và các tập tin khác.
    • $J/var/lib/php/session đường dẫn tập tin session trong PHP (cấu hình trong php.ini).
    • $J/tmp - Được sử dụng bởi nhiều script và phần mềm cms để tải lên tập tin.
    Cài đặt mod_chroot
    mod_chroot làm cho Apache chạy trong một môi trường chroot an toàn dễ dàng. Bạn không cần phải tạo ra một hệ thống phân cấp đặc biệt có chứa thư mục /dev, /lib, /etc.

    mod_chroot cho phép bạn chạy Apache trong một nhà tù chroot không có tập tin bổ sung. chroot() system call được thực hiện vào cuối thủ tục khởi động - khi tất cả các thư viện được nạp và các tập tin log mở. Tải mod_chroot sử dụng lệnh wget, quá trình cài đặt như sau:
    Mã:
    cd / opt / à -->Điều hướng đến thư mục lưu cài đặt
    wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz  -> Tải về mã nguồn
    tar -zxvf mod_chroot-0.5.tar.gz à -->Giải nén tập tin tải về
    cd mod_chroot-0.5 --> Điều hướng đến thư mục giải nén
    apxs -cia mod_chroot.c -->Chạy lệnh cài đặt
    
    Cấu hình Apache mod_chroot
    Mởi tập tin /etc/httpd/conf/httpd.conf. Gõ lệnh:
    Mã:
    C=/etc/httpd/conf/httpd.conf
    vi $C
    
    Thiết lập đường dẫn PidFile trong đó các máy chủ nên ghi lại mã số quá trình của nó khi nó bắt đầu. Tìm dòng mà đọc như sau:
    Mã:
     PidFile run/httpd.pid 
    Thay bằng:
    Mã:
     PidFile /var/run/httpd.pid 
    Tiếp theo, thêm chỉ thị ChrootDir, hãy nhập:
    Mã:
     ChrootDir /httpdjail 
    Tìm dòng như sau:
    Mã:
     ServerRoot "/etc/httpd" 
    Thêm các dòng sau:
    Mã:
    LockFile /var/run/httpd.lock
    CoreDumpDirectory /var/run
    ScoreBoardFile /var/run/httpd.scoreboard 
    Hãy chắc chắn rằng dòng mod_chroot.so tồn tại. Ví dụ, Linux 64 bit nên có dòng như sau:
    Mã:
     LoadModule chroot_module  /usr/lib64/httpd/modules/mod_chroot.so 
    Dòng cấu hình Linux 32 bit:
    Mã:
     LoadModule chroot_module  /usr/lib/httpd/modules/mod_chroot.so 
    Lưu lại và đóng tập tin.

    Vô hiệu hóa SELinux cho Apache
    Bạn cần phải vô hiệu hóa SELinux cho apache, hãy nhập:
    Mã:
     setsebool httpd_disable_trans 1 
    Patch /etc/init.d/httpd
    Mở tập tin /etc/init.d/httpd, hãy nhập:
    Mã:
     vi /etc/init.d/httpd 
    Tìm dòng như sau:
    Mã:
    # Start httpd in the C locale by default.
    HTTPD_LANG=${HTTPD_LANG-"C"}
    
    Thêm dòng sau đây (thiết lập ROOT đến $J):
    Mã:
     ROOT=/httpdjail 
    Tìm dòng stop() như sau:
    Mã:
    stop() {
      echo -n $"Stopping $prog: "
      killproc -d 10 $httpd
      RETVAL=$?
      echo
      [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
    }
    
    Thay thế nó như sau (bạn cần phải liên kết /var/run/httpd.pid đến $j/var/run/httpd.pid, vì thế hoạt động stop sẽ làm việc):
    Mã:
    stop() {
      /bin/ln -s $ROOT/var/run/httpd.pid /var/run/httpd.pid
      echo -n $"Stopping $prog: "
      killproc -d 10 $httpd
      RETVAL=$?
      echo
      [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
    } 
    Lưu lại và đóng tập tin. Thiết lập quyền không thay đổi vào tập tin /etc/init.d/httpd để tập tin không thể được sửa đổi, cập nhật bởi yum, xóa hay đổi tên, không có liên kết có thể được tạo ra đến tập tin này và không có dữ liệu có thể được ghi vào tập tin. Chỉ có superuser hoặc một quá trình sở hữu những khả năng CAP_LINUX_IMMUTABLE mới có thể thiết lập hoặc xóa thuộc tính này:
    Mã:
     chattr +i /etc/init.d/httpd 
    Làm thế nào để bắt đầu httpd chroot?
    Gõ lệnh sau đây:
    Mã:
     /etc/init.d/httpd start 
    Bạn không thấy bất kỳ lỗi gì trong tập tin /var/ log/httpd/error_log:
    Ví dụ kết quả đầu ra:
    Mã:
    [Sun Dec 21 18:43:09 2008] [notice] core dump file size limit raised to 18446744073709551615 bytes
    [Sun Dec 21 18:43:09 2008] [notice] SELinux policy enabled; httpd running as context root:system_r:initrc_t
    [Sun Dec 21 18:43:09 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
    [Sun Dec 21 18:43:09 2008] [notice] Digest: generating secret for digest authentication ...
    [Sun Dec 21 18:43:09 2008] [notice] Digest: done
    [Sun Dec 21 18:43:10 2008] [notice] mod_chroot: changed root to /httpdjail.
    [Sun Dec 21 18:43:10 2008] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
    
    Làm thế nào để ngăn chặn httpd chroot?
    Mã:
     /etc/init.d/httpd stop 
    Làm thế nào để khởi động lại httpd chroot?
    Mã:
     /etc/init.d/httpd restart
     

Chia sẻ trang này

Đang tải...