Khắc phục lỗi “Accsess denied” trên Web Server (LAMP hoặc LEMP stack) chạy CentOS

Lỗi này là do SELINUX nó có phần phân quyền cho httpd service được làm gì và không được làm gì.

  1.  SELinux là gì?

    Theo wiki thì:

    Security-Enhanced Linux (SELinux) is a Linux kernel security module that provides a mechanism for supporting access control security policies, including United States Department of Defense–style mandatory access controls (MAC).

    Nghĩa là nó sẽ được tăng cường thêm 1 module security nữa để hỗ trợ việc quản lý quyền truy cập, bao gồm cái MAC của tụi mẽo như ở trên.

    Thế nên mới nảy sinh thêm vấn đề là: File thuộc về owner là người dùng, permission 755, mà tôi vẫn chẳng thể thực thi vào file này được.

  2. Cách kiểm tra

    Để kiểm tra xem có phải do SELINUX hay không bạn có thể dùng lệnh:

    setenforce 0

    Nếu mọi thứ hoạt động bình thường thì chính là do hắn rồi :D. Để bật lại SELINUX bạn dùng lệnh:

    setenforce 1

    Cụ thể,lỗi này là do bạn (chính xác là những anh này php-fpm, nginx, apache) đang cố gắn đọc/ghi/thực thi dữ liệu trong thư mục /HOME của người dùng. bạn có thể check bằng lệnh sau:

    sestatus -b | grep httpd

    Kết quả:

    httpd_anon_write off
    httpd_builtin_scripting on
    httpd_can_check_spam off
    httpd_can_connect_ftp off
    httpd_can_connect_ldap off
    httpd_can_connect_mythtv off
    httpd_can_connect_zabbix off
    httpd_can_network_connect on
    httpd_can_network_connect_cobbler off
    httpd_can_network_connect_db off
    httpd_can_network_memcache off
    httpd_can_network_relay off
    httpd_can_sendmail off
    httpd_dbus_avahi off
    httpd_dbus_sssd off
    httpd_dontaudit_search_dirs off
    httpd_enable_cgi on
    httpd_enable_ftp_server off
    httpd_enable_homedirs off
    httpd_execmem off
    httpd_graceful_shutdown on
    httpd_manage_ipa off
    httpd_mod_auth_ntlm_winbind off
    httpd_mod_auth_pam off
    httpd_read_user_content off
    httpd_run_ipa off
    httpd_run_preupgrade off
    httpd_run_stickshift off
    httpd_serve_cobbler_files off
    httpd_setrlimit off
    httpd_ssi_exec off
    httpd_sys_script_anon_write off
    httpd_tmp_exec off
    httpd_tty_comm off
    httpd_unified off
    httpd_use_cifs off
    httpd_use_fusefs off
    httpd_use_gpg off
    httpd_use_nfs off
    httpd_use_openstack off
    httpd_use_sasl off
    httpd_verify_dns off

    Nhìn thấy mấy cái httpd_read_user_content và httpd_enable_homedirs mà đang là off thì đúng bệnh rồi.

  3. Khách khắc phục

    Bạn có thể dùng các lệnh thần thánh sau để khách phục vấn đề:

    setsebool -P httpd_read_user_content 1

    setsebool -P httpd_enable_homedirs 1

    cuối cùng là:

    restorecon -R -v /home/<thực mục của bạn>