Habilitando SELinux para proteção de WordPress

Verifique se o SELinux está habilitado e em que estado (disable/permissive/enforcing) está.

# getenforce

Caso já esteja como PERMISSIVE, iginore os passos abaixo.

Caso esteja como DISABLE

Altere para PERMISSIVE como vemos abaixo.

# vim /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – SELinux is fully disabled.
SELINUX=permissive
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted – Only targeted network daemons are protected.
# strict – Full SELinux protection.
SELINUXTYPE=targeted

# SETLOCALDEFS= Check local definition changes
SETLOCALDEFS=0

Saia dando “:wq” ou “:x” (sem aspas)

Caso o mesmo dê algum problema para salvar, informando que o arquivo é somente leitura, utilize “:wq!” ou “:x!” (sem aspas)

Após essa alteração é necessário reiniciar o servidor. O mesmo reiniciará como PERMISSIVE

Agora verificaremos as permissões booleanas do SELinux.

# getsebool -a | grep http

allow_httpd_anon_write –> off
allow_httpd_bugzilla_script_anon_write –> off
allow_httpd_cvs_script_anon_write –> off
allow_httpd_mod_auth_pam –> off
allow_httpd_nagios_script_anon_write –> off
allow_httpd_prewikka_script_anon_write –> off
allow_httpd_squid_script_anon_write –> off
allow_httpd_sys_script_anon_write –> off
httpd_builtin_scripting –> on
httpd_can_network_connect –> on
httpd_can_network_connect_db –> on
httpd_can_network_relay –> off
httpd_can_sendmail –> on
httpd_disable_trans –> off
httpd_enable_cgi –> on
httpd_enable_ftp_server –> off
httpd_enable_homedirs –> on
httpd_execmem –> off
httpd_read_user_content –> off
httpd_rotatelogs_disable_trans –> off
httpd_setrlimit –> off
httpd_ssi_exec –> off
httpd_suexec_disable_trans –> off
httpd_tty_comm –> on
httpd_unified –> on
httpd_use_cifs –> off
httpd_use_nfs –> off

# getsebool -a | grep ftp

allow_ftpd_anon_write –> off
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
allow_tftp_anon_write –> off
ftp_home_dir –> on
ftpd_connect_db –> off
ftpd_disable_trans –> off
ftpd_is_daemon –> on
httpd_enable_ftp_server –> off
tftpd_disable_trans –> off

Caso as opções abaixo estejam como OFF, altere-as para ON.

httpd_can_network_connect –> on
httpd_can_network_connect_db –> on
httpd_can_sendmail –> on
httpd_enable_cgi –> on
httpd_enable_homedirs –> on
httpd_tty_comm –> on
httpd_unified –> on

ftp_home_dir –> on
ftpd_is_daemon –> on

Comando para alterar os booleanos.

# setsebool -P httpd_can_network_connect 1
# setsebool -P httpd_can_network_connect_db 1
# setsebool -P httpd_can_sendmail 1
# setsebool -P httpd_enable_cgi 1
# setsebool -P httpd_enable_homedirs 1
# setsebool -P httpd_tty_comm 1
# setsebool -P httpd_unified 1

# setsebool -P ftp_home_dir 1
# setsebool -P ftpd_is_daemon 1

Ou somente

# setsebool -P httpd_can_network_connect=1 httpd_can_network_connect_db=1 httpd_can_sendmail=1 httpd_enable_cgi=1 httpd_enable_homedirs=1 httpd_tty_comm=1 httpd_unified=1 ftp_home_dir=1 ftpd_is_daemon=1

###########################################################################
# 1 -> ON                                                                                                                                                           #
# 0 -> OFF                                                                                                                                                         #
#                                                                                                                                                                          #
# -P -> Registra no arquivo de políticas no disco para que não perca a regra no boot do server. #
###########################################################################

Após esse passo, vamos verificar os diretórios se estão como Content do serviço em questão.

# ls -Z /var/www

Caso esteja tudo OK, a saída será desta forma, podendo variar de acordo com os diretórios e estrutura cadastradas em seu servidor.

drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons

Caso contrário, setaremos desta maneira.

# chcon -R -t httpd_sys_content_t diretório

PS: Por padrão, o SELinux já vem setado com as permissões corretas em /var/www (diretório padrão do serviço HTTPD).

Ao fim destes passos, é só habilitarmos o para ENFORCING o SELinux

# setenfornce 1

Verificando.

# getenfornce
Enforncing

#### TROUBLESHOOTING ####

Após essas alterações, caso tenha algum problema pode verificar com o comando abaixo.

# sealert -a /var/log/audit/audit.log

PS1: Verifique que para poder utilizar esta ferramente, o audit tem que estar habilitado.

Ao fim da análise do sealert, o mesmo lhe dará o diagnóstico e o que tem que proceder para corrigir o problema.

PS2: Vale lembrar também que no momento em que for gerar o seu wp-config.php, altere o padrão de tabelas de wp_ para algo do tipo nome_wp_ afim de evitar outro problemas.

Por hoje é só pessoal!!!