Software Libre.
Gua de Buenas Prcticas.
Celvin Rivas.
Hollycows.com
ndice de contenido
Introduccin...............................................................................................................................................3
En que consiste el modelo de software propietario?................................................................................4
Software Libre............................................................................................................................................5
Buenas prcticas para la implementacin..................................................................................................7
Instalacin de servidor LAPP en CentOS 7.x (64bits)..........................................................................7
Instalacin de los repositorios especializados para los aplicativos de CentOS 7.x 64bits...............7
Instalacin de Apache, PHP y Mdulos de postgreSQL.......................................................................8
Configurar IPTables para httpd.........................................................................................................8
Instalando PostgreSQL 9.4....................................................................................................................9
Configurar IPTables PostgreSQL.....................................................................................................9
Configurar PostgreSQL....................................................................................................................9
Activar el log de Query...................................................................................................................10
Detalles finales:...................................................................................................................................11
PROCESADOR EFICIENTE PARA LA CREACIN MASIVA DE REPORTES PDF...................12
Creacin de virtualHost personalizado................................................................................................13
Configuraciones especiales para Apache2..........................................................................................14
Instalar nodeJS....................................................................................................................................15
Instalar Composer................................................................................................................................15
Esto aplica para aplicaciones construidas con PHP symfony2............................................................16
Permisos de escritura especficos para aplicaciones que necesitan escribir en carpetas pblicas
(SIASE, Symfony2, etc.).....................................................................................................................16
ANEXO1 (permisosweb.sh)...........................................................................................................18
Introduccin
El Software Libre es gratuito, seguro, aporta calidad, se basa en estndares abiertos,
tiene libertad para utilizarse en cualquier sitio, favorece la cultura de la colaboracin,
aumenta la capacidad tecnolgica, proporciona ahorro de gastos en informtica, reduce la
dependencia de proveedores y fomenta el desarrollo colaborativo.
Por el momento no se planea instalar de manera masiva software libre a nivel de
escritorio, sin embargo el rea de desarrollo de sistemas ha adoptado GNU/Linux para el
desarrollo de nuevas tecnologas sin incurrir en elevados costos de licenciamiento de
software.
Generalmente, las empresas de informtica estn acostumbradas a desarrollar
software a medida, sin suministrar las fuentes de cdigo a sus clientes manteniendo un
modelo de pago por licencias de uso, pero con el modelo de desarrollo en casa se corta ese
antiguo paradigma.
Nos encontramos en uno de esos momentos en los que toda la industria puede estar
cambiando de paradigma. En una industria cada vez mas competitiva las empresas deben
adaptarse y ajustarse a las variaciones para poder mantener su posicin de competitividad.
Durante aos, en el mundo del software, se ha vivido bajo un modelo de negocio muy
lucrativo para las empresas de desarrollo de software y muy poco ventajoso para el resto de
usuarios de software, el modelo de software propietario.
Otra desventaja de no tener acceso al cdigo fuente es que nos impide aprender de
l, al no saber como se realizan ciertas funciones.
Y una desventaja muy seria es la seguridad, puesto que al no conocer el cdigo fuente
ni tener acceso al mismo, se corre el riesgo de ser vulnerados por cdigo malicioso
insertado en el aplicativo por parte del proveedor, esto es un caso comn en muchas
empresas conocido como parte inseparable del espionaje corporativo.
Software Libre
Existe una alternativa, el software libre. El software libre es una cuestin de libertad,
no
de precio. Para comprender este concepto, se debe pensar en la acepcin de libre como
en libertad de expresin y no como en libre sin costo.
El movimiento del software libre empez en 1984, cuando Richard Stallman dio a
conocer
el proyecto GNU, para crear una versin del sistema operativo Unix que respetara las
libertades de aquellos que lo utilizaran. La consecuencia de este proyecto fue la creacin
en 1985 de la Fundacin del Software Libre.
Cuando hablamos de libertad, nos referimos especialmente a cuatro clases de libertad
para los usuarios de software:
Libertad 0: la libertad para ejecutar el programa sea cual sea nuestro propsito.
(privado, educativo, pblico, comercial, etc.)
Libertad 1: la libertad para estudiar el funcionamiento del programa y adaptarlo
a nuestras necesidades. El acceso al cdigo fuente es condicin indispensable para esto.
Libertad 2: La libertad para redistribuir copias.
Libertad 3: La libertad para mejorar el programa y luego publicarlo. Haber tenido
acceso al cdigo fuente de antemano es condicin indispensable para esto.
Basados estas libertades en el Ministerio de Relaciones Exteriores hemos hecho una
recopilacin de software con licenciamiento libre (GPL, MIT, BSD, Creative commons, etc)
que facilite el desarrollo de aplicaciones web y que los componentes que se incluyan se
puedan modificar sin que la licencia nos limite en el uso y modificacin de una librera
necesaria para que nuestros desarrollos cumplan con las necesidades de los requerimientos
solicitados.
Por lo tanto las buenas prcticas al iniciar un desarrollo utilizando herramientas de
software libre se listan las siguientes:
1. Antes de incluir un componente en nuestra plataforma de desarrollo se debe analizar
su licencia, como base se puede asegurar que cumplen con por lo menos la libertad 0,
1 y 2. Algunas licencias permitidas que incluyen las 4 libertades son:
GPL
LGPL
BSD
Apache licence
MIT
Software
Licencia
NetBeans
www.netbeans.org
CDDL y GPL v2
Eclipse
http://www.eclipse.org/
Software
PostgreSQL 9.4
Software
Base de datos
Enlace
http://www.postgresql.org
Framework
Enlace
Licencia
BSD
Licencia
PHP Symfony2
https://symfony.com/
AngularJS
https://angularjs.org
MIT License
Jquery
https://jquery.org
MIT License
PHP 5.5
https://www.php.net
GNU/Linux
Apache / httpd
PostgreSQL 9.4.1
PHP 5.5.12
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# rpm -ivh epel-release-7-5.noarch.rpm
# yum repolist
Remi Repository:
{NOTA: Siempre se debe buscar el repositorio remi para verificar que no ha cambiado la versin}
# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# rpm -Uvh remi-release-7.rpm
nano /etc/yum.repos.d/remi.repo
enabled =1
EL REPO
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
Configurar PostgreSQL
# vim /var/lib/pgsql/9.4/data/pg_hba.conf
# vim /var/lib/pgsql/9.4/data/postgresql.conf
$ su - postgres
$ createuser user1
$ createdb db1
$ psql
Set password and Grant access to the database db1 for user1:
postgres=# alter user user1 with encrypted password 'user1';
postgres=# grant all privileges on database db1 to user1;
postgres=# alter user postgres with password '***';
# service postgresql-9.4 restart
# vim /var/lib/pgsql/9.4/data/postgresql.conf
log_statement = all
log_min_error_statement = error
Configurar el Host
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=***********.rree.gob.sv
# vim /etc/hosts
# vim /etc/httpd/conf/httpd.conf
Detalles finales:
La seguridad en CentOS puede causar: PostgreSQL error: could not connect to server:
Permission denied
wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7amd64.rpm
rpm -Uvh wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
yum install urw-fonts libXext libXrender fontconfig libxml2
*** Buscar la versin disponible de libfontconfig es posible que sea superior a libfontconfig.so.1
{NOTA: Es posible que SELINUX bloquee la ejecucin del procesador de archivos PDF, en ese caso debe seguirse la
siguiente instruccin}
time and cat it with the original when making a new module (or else you'll be undoing first
fix!):
tail -F ... > wkhtml.audit2
if audit2 is empty, there is a non-selinux problem. otherwise:
cat wkhtml.audit wkhtml.audit2 | audit2allow ...
---------#!!!! This avc can be allowed using the boolean 'httpd_execmem'
allow httpd_sys_script_t self:process execmem;
setsebool -P httpd_execmem 1
Debe instalarse en la ruta del sistema operativo la versin mas reciente (12.1):
(http://wkhtmltopdf.org/)
/usr/bin/wkhtmltopdf
Crear backups
postgres $ pg_dump -Fc database > database.dump.backup
Restaurar backups
postgres $ psql -U postgres -d database -f database.dump.backup
Crear htpassword:
# htpasswd -c /etc/phppgadmin/.htpasswd usuario
# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
<IfModule mod_authn_file.c>
AuthType Basic
AuthName "phpMyAdmin Setup"
AuthUserFile /etc/phpPgAdmin/htpasswd
</IfModule>
Require valid-user
</Directory>
Java es esencial
Seguir la siguiente guia para instalar java 8 (elegir centOS7)
http://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/
memory_limit = 512M
Instalar nodeJS
yum install nodejs
yum install npm
Instalar Composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Esto aplica para aplicaciones construidas con PHP symfony2 adaptado a usar NodeJs
rm -rf /var/www/html/database/vendor/mopa/bootstrapbundle/Mopa/Bundle/BootstrapBundle/Resources/public/bootstrap
app/console mopa:bootstrap:symlink:less
/usr/local/bin/node
npm install -g less
Permisos de escritura especficos para aplicaciones que necesitan escribir en carpetas pblicas
(database, Symfony2, etc.)
httpd_sys_rw_content_t
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/database/app/cache(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/database/app/logs(/.*)?"
# restorecon -R /var/www/html/database/app/cache
# restorecon -R /var/www/html/database/app/logs
SELINUX (debug no utilizar esos comandos a menos que sepa lo que hace)
sestatus
setenforce 1
setenforce 0
netstat -nr
Referencias:
http://www.tecmint.com/linux-server-hardening-security-tips/
http://drivemeca.blogspot.com/2014/07/15-minutos-para-configurar-un-linux.html
http://blog.xenodesystems.com/2014/07/que-hacer-despues-de-instalar-centos7_15.html
ANEXO1 (permisosweb.sh)
{NOTA MUY IMPORTANTE: Es necesario proteger la aplicacin mediante la ejecucin de este
archivo en la raz del proyecto, sin embargo despus de ejecutarlo quedarn todos los archivos y
carpetas sobreprotegidos y ser necesario agregar permisos de escritura a carpetas especficas como por
ejemplo las carpetas de cache, logs, uploads.}
----------------------------------------------- permisosweb.sh -------------------------------------------------#!/bin/bash
# Guardar como permisosweb.sh y dar los permisos de ejecucin bsicos chmod +x permisosweb.sh
# Ejemplo de uso: ./script /var/www/html/
# Propsito: Establecer los permisos correctos para los archivos y directorios en un servidor WEB
# Autores: Celvin Rivas < josecelvin@gmail.com >, Vivek Gite < vivek@nixcraft.com >
# Este script es libre gracias a la licencia GPL version 2.0 o superior
# Establecera permisos root para el DocumentRoot de Apache / Lighttpd / Nginx
# + Dirs/Subdirs: read-only y ejecucin para otros
# + Files: read-only permission
# Se ha probado en Debian Linux v3/4/5/6, RHEL v2/3/4/5/6, Centos 5.5/6.5
# ------------------------------------------------------------------------------------------------_dir="${1:-.}"
_fperm="0444"
_dperm="0445"
_ugperm="root:root"
_chmod="/bin/chmod"
_chown="/bin/chown"
_find="/usr/bin/find"
_xargs="/usr/bin/xargs"
echo "Vamos a cambiar los permisos de los archivos y directorios en el webserver para establecer un
modo restrictivo read-only \"$_dir\""
read -p "La carpeta actual es ${PWD}. seguro de continuar (y / n) ?" ans
if [ "$ans" == "y" ]
then
echo "Cambiando el propietario a $_ugperm para $_dir..."
$_chown -R "${_ugperm}" "$_dir"
#Nota: No olvidar que es necesario dar permisos de escritura al usuario web en las carpetas destinadas
#para ello, como por ejemplo uploads, y cache.