SGLMS Blog


... una colección de artículos que hemos escrito en el tiempo; principalmente para nosotros, como una ayuda memoria. Quizás, algunos de ustedes pueden encontrarles utilidad. Si es así, por favor, let us know.

Cómo conectarse de un servidor (linux) a otro, sin contraseña

Published : 08/29/17 · Tags : linux, fedora · Author : J. Rubin-de-Celis

Escenario:

Quieres ocupar OpenSSH para que un 'usuario' en el equipo 'local' pueda acceder como 'visitante' en el equipo 'remoto', sin tener que ingresar la contraseña de 'visitante' cada vez.

Procedimiento:

Primero en 'local', generamos un par de llaves de autentificación. IMPORTANTE: Dejar la contraseña (passphrase) en blanco.

usuario@local:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usuario/.ssh/id_rsa): 
Created directory '/home/usuario/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/usuario/.ssh/id_rsa.
Your public key has been saved in /home/usuario/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

Ahora, nos conectamos como 'visitante' usando ssh al equipo 'remoto' y creamos (si es que no existe) el directorio ~/.ssh.

usuario@local:~> ssh-keygen -t rsa
usuario@local:~> ssh visitante@remoto mkdir -p .ssh
visitante@remoto's password: 

Finalmente, agregamos la llave púbilca creada al archivo visitante@remoto:.ssh/authorized_keys, e ingresamos la contraseña de 'visitante' una última vez:

usuario@local:~> cat .ssh/id_rsa.pub | ssh visitante@remoto 'cat >> .ssh/authorized_keys'
visitante@remoto's password: 

Con versiones más modernas de OpenSSH, es necesario ocupar el archivo .ssh/authorized_keys2 y asegurarse que la carpeta y el archivo tengan los permisos apropiados:

usuario@local:~> cat .ssh/id_rsa.pub | ssh visitante@remoto 'cat >> .ssh/authorized_keys2'
visitante@remoto's password:

Y, ahora cambiamos los permisos

usuario@local:~> ssh visitante@remoto
visitante@remoto:~> chmod 700 .ssh
visitante@remoto:~> chmod 640 .ssh/authorized_keys2

Eso es todo! En adelante el 'usuario' podra conectarse como 'visitante' al equipo remoto sin ocupar una contraseña en cada oportunidad.

Cómo crear un Certificado (autofirmado) para un servidor apache (con SAN y CN)

Published : 05/29/17 · Tags : linux, fedora, apache, ssl · Author : J. Rubin-de-Celis

Los SAN (Subject Alternative Names) ahora son obligatorios si ocupas Chrome 58+; que ha optado por dejar de ocupar el CN (Common Name). Y, esta es la forma más sencilla de crear un certificado autofirmado.

Antes de partir, necesitaremos tener openssl instalado en nuestro servidor.

Creamos una carpeta para guardar los certificados raiz:

mkdir ~/ssl/

Primero necesitamos un Autoridad de Certificación Raiz (CA Root Authority):

$ openssl genrsa -des3 -out ~/ssl/rootCA.key 2048
$ openssl req -x509 -new -nodes -key ~/ssl/rootCA.key -sha512 -days 1024 -out ~/ssl/rootCA.pem

Necesitaremos un archivo de configuración para firmar los certificados de nuestro servidor. Con tu editor favorito crea este archivo server.cnf.

[req]
default_bits = 2048
prompt = no
default_md = sha512
distinguished_name = dn

[dn]
C=CL
ST=RM
L=SANTIAGO
O=SGLMS
OU=SGLMS DOMAIN
emailAddress=nombre@dominio.com
CN = localhost

Por supuesto, cambia el correo electrónico y el CN (Common Name) por el nombre calificado de tu servidor (ej. ejemplo.com)

También necesitaremos un archivo para el para la extension x509 v3 (en lugar del v1 que se ocupa por defecto). Llamaremos v3.ext al archivo:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

Nuevamente, cambia localhost por el nombre de tu servidor.

Finalmente podemos crear la llave (key) y el certificado (crt) para el servidor en que se ocupará.

$ sudo openssl req -new -sha512 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config < server.cnf

$ sudo openssl x509 -req -in server.csr -CA ~/ssl/rootCA.pem -CAkey ~/ssl/rootCA.key -CAcreateserial -out server.crt -days 500 -sha512 -extfile v3.ext

Podemos verificar que el certificado está correcto:

$ openssl x509 -text -in server.crt -noout

Estos archivos creados (servey.key y server.crt) pueden ahora ser ocupados para tu servidor (apache).

Esto, al menos en *nix, puede hacerse editando /etc/httpd/conf.d/ssl.conf (esto supone que tienes activado el módulo mod_ssl) y modificando (o agregando) las líneas:

SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key

Y, por supuesto, no olvides reiniciar el servidor:

# systemctl restart httpd
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

¿Cómo usar los directorios de usuario en Apache? (MacOS)

Published : 03/01/17 · Tags : mac, apache · Author : J. Rubin-de-Celis

Para activar los directorios de usuario en apache (MacOS) el procedimiento es muy sencillo.

Primero editamos la configuración de apache /etc/apache2/httpd.conf y nos aseguramos de que la siguiente línea no esté comentada:

Include /private/etc/apache2/extra/httpd-userdir.conf

También, debemos ver que esta otra línea no este comentada:

LoadModule userdir_module libexec/apache2/mod_userdir.so

Después, debemos editar el archivo /private/etc/apache2/extra/httpd-userdir.conf, y asegurarse de que la siguiente línea no esté comentada:

Include /private/etc/apache2/users/*.conf

Finalmente, crear un archivo con el nombre del usuario en el directorio de usuarios de apache (ej. /private/etc/apache2/users/james.conf), y ver que contenga las siguientes líneas:

<Directory "/Users/james/Sites/">
  Options Indexes MultiViews
  AllowOverride None
  Require all granted
</Directory>

Para terminar, reiniciamos apache:

$ sudo apachectl restart

Crear (si no existe) la carpeta Sites en el directorio de usuario:

$ mkdir ~/Sites
$ touch ~/Sites/index.html
$ echo "Hello World" >> ~/Sites/index.html
Con esto, podemos ahora dirigir nuestro navegador a localhost/~james/, y veremos la página recién creada.

Instalar MySQL en Mac OSX "Sierra"

Published : 09/12/16 · Tags : mac, sierra, php, mysql · Author : J. Rubin-de-Celis

Asegúrese de que tiene los siguientes directorios, de lo contrario, crearlos:

$ sudo mkdir /usr/local/include
$ sudo mkdir /usr/local/bin
$ sudo mkdir /usr/local/lib
$ sudo mkdir -p /usr/local/man/man1

Descargar el código fuente, el archivo DMG de 64-bits desde MySQL, e instalar el 'pkg'.

Agregar mysql al PATH. Para ello, editar el archivo .bash_profile.

$ vim ~/.bash_profile

Y, agregue las siguientes líneas:

export PATH=~/bin:/usr/local/bin:/usr/local/mysql/bin:$PATH
export EDITOR=vim

Asegúrese de que el servidor MySQL está activo. Puede ver el estado y activar el servidor en las 'Preferencias' (o Panel de control) del Equipo.

Configurar el acceso root al servidor MySQL.

$ mysqladmin -u root password {new-password}
$ mysqladmin -u root -p{new-password} -h localhost password {new-password}
$ mysqladmin -u root -p{new-password} reload

Por supuesto, debe reemplazar {new-password} por su contraseña preferida.

Borrar el historial de la consola para evitar que la contraseña elegida pueda verse como texto.

$ history -c

Finalmente, nos aseguramos de que mysql.sock pueda ser encontrado por PHP.

$ sudo mkdir /var/mysql
$ sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

¿Cómo instalar intl y gettext para PHP en Mac OSX?

Published : 10/12/16 · Tags : mac, php, gettext · Author : J. Rubin-de-Celis

Esta es una ayuda a mi memoria, no pretende ser una guía completa o detallada. Pero, ... puede ser de utilidad para alguien más.

Sí, lo sé, hay alternativas más sencillas como homebrew o macports, pero si estás más familiarizado con linux y la consola, este camino será seguramente tu preferido.

Requisitos

  • Mac OSX 10.7+
  • Xcode (puede obtenerse desde App Store)
  • Xcode Command Line Tools:
    $ xcode-select --install

Instalar autoconf, automake y libtool.

Para compilar algunos paquetes necesitarás autoconf y automake.

Primero obtenemos autoconf y lo descomprimimos:

$ curl -O -L http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
$ tar -xzf autoconf-2.69.tar.gz

Luego lo configuramos e instalamos:

$ cd autoconf-2.69    
$ ./configure
$ make
$ sudo make install

Esto es lo mismo que ocupar macports: $ sudo port install autoconf; si prefieres homebrew: $ sudo brew install autonf.

La diferencia está sólo el lugar de instalación. En general, prefiero una estructura de archivos en Mac que sea lo más similar posible a *nix (simplemente para no tener que recordar más cosas en mi memoria).

Luego hacemos lo mismo para automake y libtool:

$ curl -OL http://ftpmirror.gnu.org/automake/automake-1.15.tar.gz
$ tar -xzf automake-1.15.tar.gz
$ cd automake-1.15
$ ./configure && make && sudo make install
 
$ curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
$ tar -xzf libtool-2.4.2.tar.gz
$ cd libtool-2.4.2
$ ./configure && make && sudo make install

Bien, ahora que el sistema está listo para compilar módulos de PHP, procedemos a instalar intl y gettext.

PHP con intl y gettext

PHP (y Apache) vienen instalado por defecto en Mac OSX, aunque es posible que debas activar PHP en tu equipo.

Primero obtenemos ICU (necesitamos el códig fuente o src) y lo instalamos:

$ curl -OL http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz
$ tar -xzf icu4c-58_1-src.tgz
$ cd icu/source
$ ./runConfigureICU MacOSX
$ make && sudo make install

También necesitaremos installar gettext:

$ curl -OL http://ftp.gnu.org/pub/gnu/gettext/gettext-latest.tar.gz
$ tar -xzf gettext-0.19.8.1.tar.gz
$ cd gettext
$ ./configure && make && sudo make install

Luego obtenemos el código fuente de la versión de PHP que tenemos instalado (a la fecha es php-5.6.25):

$ tar -xzf php-5.6.25.tar.gz
$ cd php-5.6.25/ext/intl
$ phpize
$ ./configure --enable-intl
$ make
$ sudo cp modules/intl.so /usr/lib/php/extensions/

Hacemos lo mismo para gettext.

$ cd php-5.6.25/ext/gettext
$ phpize
$ ./configure --with-gettext
$ make
$ sudo cp modules/gettext.so /usr/lib/php/extensions/

Sólo resta activar estas nuevas extensiones en la configuración de PHP (php.ini).

Ocupando un editor de texto de tu preferencia (ej. vim):

$ sudo vim /etc/php.ini

Asegúrate de incorporar estas líneas:

extension_dir = "/usr/lib/php/extensions"
extension = intl.so
extension = gettext.so

Para que los cambios sean efectivos, debes reiniciar el servidor apache:

$ sudo apachectl restart

Eso es todo. Ahora en PHP podrás ocupar las librerías de internacionalización y (suponiendo que tienes archivos de traducción *.po y *.mo), el resultado del siguiente código (PHP):

<?php echo _("Home"); ?>
==>
Inicio

Nota: La configuración de internacionalización para PHP la dejaremos para un otro artículo.

Fedora 25 y Wayland

Published : 01/15/17 · Tags : linux, fedora, wayland, nvidia · Author : J. Rubin-de-Celis

Por defecto Fedora 25 viene ahora con Wayland. Aún cuando esto es algo muy esperado, no ha estado exento de problemas.

Por ejemplo, Wayland simplemente no funciona con aceleración gráfica 3D (en VirtualBox). Si tienes aceleración gráfica en tu máquina virtual, Fedora 25 simplemente ocupara el (aún vigente) servidor x11.

Wayland tampoco tiene soporte para controladores nativos (drivers), como los de Nvidia. Entonces, si tienes una tarjeta gráfica de esta naturaleza, puedes renunciar a controlador nativo y ocupar nouveau o simplemente forzar el uso de x11.

Así, aún cuando Wayland es mucho más estable y tiene menos bugs (con aquellas aplicaciones que funcionan), aún es temprano para una adopción general de esta tecnología. Al menos, no si no estás dispuesto renunciar a algunas cosas que están por defecto en x11.

Para forzar el uso (siempre, no sólo en la sesión de gnome o KDE), puedes editar /etc/gdm/custom.conf (suponiendo que ocupas GDM) y asegurarte de que la siguiente instrucción esté activa:

WaylandEnable=false

Sequel Pro, el mejor administrador para MySQL en Mac.

Published : 12/27/16 · Tags : mac, sql, mysql, sequel · Author : J. Rubin-de-Celis

Hace ya mucho tiempo hago uso de Sequel Pro para la administración de bases de datos en Mac.

Es un editor sencillo, eficiente, fácil de usar, liviano y muy estable. Después de haber pasado por muchos otros (phpMyAdmin, MySQL-Workbench, HeidiSQL -para Windows-), Sequel Pro es el administrador que recomiendo (para Mac).

Tiene una ventaja más, está basado en donaciones, es decir se puede descargar de manera gratuita, pero por favor, hagan su donación.

Aquí les dejo el enlace : www.sequelpro.com.

Errores al instalar intl.so en "El Capitan" o "Sierra"

Published : 11/12/16 · Tags : php, intl · Author : J. Rubin-de-Celis

Las últimas versiones de OSX (El Capitan y Sierra) vienen por defecto con Protección de Integridad del Sistema (System Integrity Protection) activado. Esta característica impide que se modifique las rutas de instalación de algunos paquetes, entre ellos las extensiones de PHP.

El error más común que encontrarás (al instalar o al ocupar esta librería PHP) es de la forma:

$ php --version
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/intl.so' - dlopen(/usr/lib/php/extensions/intl.so, 9): Library not loaded: libicui18n.57.dylib
  Referenced from: /usr/lib/php/extensions/intl.so
  Reason: unsafe use of relative rpath libicui18n.57.dylib in /usr/lib/php/extensions/intl.so with restricted binary in Unknown on line 0
PHP 5.6.25 (cli) (built: Sep  6 2016 16:37:16) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

                

Para evitar estos errores, por ahora, la solución más sencilla para instalar nuevas extensiones es deshabilitar esta protección (System Integrity Protection):

  1. Reiniciar el computador
  2. Cuando la pantalla se ponga negra, presionar Cmd + r hasta que el equipo ingrese en modo de recuperación (Recovery).
  3. Abrir una consola (Terminal), e ingresar:
    $ csrutil disable
  4. Reiniciar el computador normalmente.
  5. Instalar intl.so y/u otros.
  6. [Opcional] Reactivar esta característica ocupando el mismo procedimiento pero con $ csrutil enable.