Problema con archivo .htaccess en Debian 11

lunes, octubre 2nd, 2023

Problema:

Al usar el archivo .htaccess aparece ell siguiente error:

500 Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Diagnóstico

El error se puede deber a muchas razones, sin embargo, si estas usando un archivo .htaccess pasa por que el módulo rewrite debe ser explícitamente activado en el servidor Apache2 siempre que lo estes ejecutando dentro de un servidor Debian, ya que por default viene desactivado.

Solución

Para activar el módulo rewrite dentro de Debian simplemente debes ejecutar el siguiente comando:

sudo a2enmod rewrite


con esto debes reiniciar el servidor Apache2 con el comando que te dejo a continuación:

 sudo systemctl reload apache2


Si deseas desactivar el módulo rewrite debes ejecutar el siguiente comando 


sudo a2dismod rewrite

Otras Causas

Si el error no desaparece al hacer con la configuración anterior entonces es probable que el archivo .htaccess no este correctamente configurado, revisa que este correctamente configurado, te dejo un ejemplo:


Configurar acceso sin contraseña en servidores SSH

miércoles, octubre 26th, 2022

Para controlar nuestros servidores en la nube linus en la nube podemos hacerlo de dos formas, usando contraseña y usuario y por medio de una clave publica, con esta última no nos pedirá clave, ademas de ser práctico es mucho más seguro usar el método de la llave pública, por lo que te explicaré como como configurarlo.

El Archivo SSHD_CONFIG

En este archivo se puede configurar si el acceso se hace por medio de contraseña o con llave pública, con esta ultima creamos una llave en nuestro equipo local y luego debemos subirla a nuestro servidor lo que nos permite logearnos sin ingresar contraseña

Paso uno en nuestro equipo local generar una nueva clave, sustituimos la que existe en caso que lo pida y omitimos poner contraseña, si ponemos contraseña cada vez que usemos la llave pública nos pedirá esa contraseña

ssh-keygen

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

generará algo como lo siguiente

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:EX:AM:PL:E3:3e:a9:de:4e:77:11:58:b6:90:26 username@203.0.113.0
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

El archivo que contiene la llave publica está en la maquina local, debemos copiar esa llave y pegarla en el servidor de la nube al que nos deseamos conectar

cat ~/.ssh/id_rsa.pub

copiamos la llave y la vamos ir entramos al servidor

en el servidor buscamos este archivo

nano ~/.ssh/authorized_keys

si el archivo no existe podemos crearlo, este archivo será el que se consultará cada que ingrese al servidor, por medio del usuario actual

pegamos dentro del archivo la llave que copiamos al portapapeles y vamos a dar permisos a ese archivo

chmod 700 ~/.ssh 
chmor 600 ~/.ssh/authorized_keys

listo con esto ya podemos ingresar al servidor con el comando ssh con el usuario e IP correspondiente

ssh user@ippublic

Deshabilitar el acceso por contraseña

ahora que ya podemos ingresar sin contraseña hay que deshabilitar el acceso por contraseña esto mejora la seguridad

hay que ir al archivo

vi /etc/ssh/sshd_config

en ese archivo debemos buscar la palabra

PasswordAuthentication yes

y lo ponemos en no

PasswordAuthentication no

ahora reiniciamos el servidor para que los cambien operen

reboot 


Configurando un Equipo para programar con Linux

martes, octubre 11th, 2022

Agregar al listado de SUDOERS

Al instalar Linux lo primero que necesitaremos es poder dar permisos de instalación al usuario que estamos utilizando, lo que quiere decir agregarlo al listado de sudoers del sistema

/sbin/usermod -aG sudo yec

El archivo SUDOERS se encuentre normalmente en el directorio /etc y se auxilia del archivo /etc/sudoers.d/

Evitar que Debian busque repositorios en el media CDROM

Es probable que te salga este error cuando tengas que instalar.

please insert the disc labeled
 'Debian GNU/Linux 7.0.0 _Wheezy_ - Official amd64 CD Binary-1 20130504-14:44'
in the drive '/media/cdrom/' and press enter

Si ese es el caso debes comentar la búsqueda en el cd rom de repositorios, esto se hace desde el archivo.

 sudo nano /etc/apt/sources.list

Dentro del archivo comentar lo siguiente.

#deb cdrom:[Debian GNU/Linux 11.5.0 _Bullseye_ - Official amd64 DVD Binary-1 20>

Con esto el cdrom de Debian dejará de ser el primero en la lista de búsqueda de repositorios

Configurar Samba

sudo apt install samba smbclient cifs-utils

Una vez instaladas las dependencias de samba hay que configurar en el archivo

sudo nano /etc/samba/smb.conf 

Cambiar el workgroup

   workgroup = NUEVOGRUPO

Ahora agregar la carpeta compartida de la siguiente forma

[public]
comment = PUBLIC
path = /home/usr/Public
writeble = yes
guest ok= yes
guest only = yes
force create mode =775
force directory mode=775

Herramientas de programación

Visual Studio Code

se baja y se instala de la pagina

Apache

sudo apt update

Instalación de apache

sudo apt install apache2

checkar que funcione

sudo systemctl status apache2

Crear un virtual Host Apache para pruebas

lo primero será crear una copia del archivo de configuración de apache, con el siguiente comando

cd /etc/apache2/sites-available/

sudo cp 000-default.conf desarrollo.com.conf

sudo nano desarrollo.com.conf 
                                                                                           
<VirtualHost *:80>
        # The SeverName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName desarrollo.com
        ServerAlias www.desarrollo.com
        ServerAdmin webmaster@localhost
        DocumentRoot /home/usr/Documents/desarrollo

        <Directory  "/home/usr/Documents/desarrollo">
                AllowOverride All
                Require all granted
        </Directory>
        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

luego debemos poner en uso el virtual host

sudo a2ensite desarrollo.com.conf

ahora debemos reiniciar el apache

sudo systemctl restart apache2

esto lo pasará a la siguiente direccion /etc/apache2/sites-enabled

Crear el directorio

Ahora debemos crear el directorio de pruebas en la carpeta documentos del usuario

mkdir /home/usr/Documents/desarrollo

hay que dar permisos correctos

sudo chown -R usr:www-data /home/usr/Documents/desarrollo/

ahora los permisos correctos

sudo chmod 770 /home/usr/Documents/desarrollo/

ahora debemos crear un index.html para que el directorio muestre algo

Configurar el archivo host

Para que todo funcione correctamente debemos configurar el archivo host

sudo nano /etc/hosts

luego debemos añadir lo siguiente para que redireccione correctamente

192.168.0.4 desarrollo.com

CURL

para descargar desde consola

sudo apt install curl

PHP

Instalar PHP

sudo apt update && sudo apt upgrade
sudo apt -y install php php-common

Probando si ya tenemos php

php -v

ahora que ya tenemos php sale asi

Para comprobar la configuración del php creamos un archivo con lo siguiente

<?php

// Muestra toda la información, por defecto INFO_ALL
phpinfo();

// Muestra solamente la información de los módulos.
// phpinfo(8) hace exactamente lo mismo.
phpinfo(INFO_MODULES);

?>

Todavía falta instalar los modulos y addons

sudo apt -y install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd  php-mbstring php-curl php-xml php-pear php-bcmath

y para el servidor apache instalar

sudo apt -y install libapache2-mod-php

php7.4-intl

Extension Internacional de PHP,

sudo apt install php7.4-intl

DROPBOX

sudo apt install python
sudo wget -O /usr/local/bin/dropbox "https://www.dropbox.com/download?dl=packages/dropbox.py"
sudo chmod +x /usr/local/bin/dropbox
dropbox

Tiene una variedad de comandos en linea, lo que se ha instalado con lo anterior es la CLI de dropbox para usar desde consola, al ejecutar dropbox nos desplegará la lista de comandos

ote: use dropbox help <command> to view usage for a specific command.

 autostart    automatically start Dropbox at login
 exclude      ignores/excludes a directory from syncing
 filestatus   get current sync status of one or more files
 help         provide help
 lansync      enables or disables LAN sync
 ls           list directory contents with current sync status
 proxy        set proxy settings for Dropbox
 puburl       get public url of a file in your Dropbox's public folder
 running      return whether Dropbox is running
 sharelink    get a shared link for a file in your Dropbox
 start        start dropboxd
 status       get current status of the dropboxd
 stop         stop dropboxd
 throttle     set bandwidth limits for Dropbox
 update       download latest version of Dropbox
 version      print version information for Dropbox

Es necesario instalar el daemon de dropbox y actualizarlo, para ello ejecutamos el siguiente comando

dropbox update 

ahora pedira instalar el servicio de dropbox

para listar los directorios de la cuenta de dropbox hacer lo siguiente

dropbox ls

una vez se instala el servicio empezará a sincronizar en la carpeta de dropbox /home/usr/Dropbox

para ver como va la sincronización podemos usar el siguiente comando

dropbox status

Rclone

Bajar de aquí https://rclone.org/

sudo dpkg -i rclone-v1.59.2-linux-amd64.deb
rclone config

para configurar el rclone y usarlo con google debemos crear una credenciales de api de google, para ello debemos ir a la pa


https://console.cloud.google.com/apis/

debemos crear un nuevo proyecto o bien seleccionar uno existente, yo lo hice en uno ya existente

y ahora debemos ir a la parte izquierda donde dice credenciales, lo que hay que hacer es generar una nueva token para ingresarlo en el Rclone y asi que se pueda conectar a mi cuenta de google

una vez en credenciales podemos seleccionar lo siguiente

seleccionar crear credenciales

seleccionamos la opcion de ID de cliente de OAuth

Seleccionar App de escritorio

poner un nombre y crear

ahi generar la clave secreta y el id de cliente para Rclone

Volviendo a Rclone ahi seleccionar la opción de google

ahora ingresar el id cliente que generamos en cloud engine

a continuación Rclone nos pedirá si deseamos la autoconfiguración y decimos que si

ahí debemos autorizar nuestra propia y seleccionar la cuenta con la que queremos logearnos es decir el correo de gmail donde está los archivos que deseamos de Drive

recuerda que esta autenticación expira en una hora

ahora ya podemos enviar comando que nos devuelvan por ejemplo el listado de archivos de la cuenta que he seleccionado

rclone lsd nombredelremoto:

mas informacion sobre comandos de Rclone y ayuda aqui https://www.tecmint.com/rclone-sync-files-from-cloud-storage/

ahora quier crear un directorio en google drive para guardar la informacion de mi compu

primero crearmos una carpeta en el google drive

rclone mkdir nombredelremoto:bckremoto

ahora podemos subir todo lo que tenemos ahi

rclone sync /home/usr/Google/ nombredelremoto:bckremoto

si quisiera descargar lo haria al reves

rclone nombredelremoto:bckremoto sync /home/usr/Google/

ADVERTENCIA: La sincronización de Rclone no es perfecta no resuelve conflictos ni tiene cuidado de lo que baja o sube, simplemente actualiza todo, por lo que debes ser cuidadoso, para efectos prácticos es lo equivalente a copiar y sustituir en el remoto o en el local dependiendo de la operación que este haciendo

mas información https://rclone.org/docs/

Instalar Node JS y NPM

sudo apt install nodejs npm -y

Instalar NVM

Recomiendo instalar nvm ya que permite tener a nuestra disposición las versiones de node que necesitemos simplemente con un comando, puede ser útil si necesitamos una versión más reciente o una mas antigua por cuestiones de compatibilidad de paquetes

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash

Podríamos reiniciar el sistema operativo para que nvm quede funcional pero existe un comando que nos recarga la configuración del perfil de nuestro usuario

source ~/.profile

Comandos de NVM

Instalar la versión más reciente de node

nvm install node

Instalar una versión en específico

nvm install 14.7.0

listar las versiones disponibles remotamente

nvm ls-remote

poner en uso la versión default

nvm use node

Instalar Mysql

Descargar de aqui https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/#apt-repo-fresh-install las claves con los repositorios de instalación e instalarlos

https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/#apt-repo-fresh-install
sudo dpkg -i mysql-apt-config_0.8.23-1_all.deb 
sudo apt-get update
sudo apt-get install mysql-server
systemctl status mysql

Instalar DBEAVER

https://dbeaver.io/download/
sudo dpkg -i dbeaver-ce_22.2.2_amd64.deb

Ahora es probable que de un problema al momento de conectar a mysql, es necesario buscar estas dos propiedades en driver properties

Instalar PHPMyAdmin

Instalar todo los modulos de php necesarios

sudo apt -y install wget php php-cgi php-mysqli php-pear php-mbstring libapache2-mod-php php-common php-phpseclib php-mysql

Usuario para PHPMYADMIN

Crear un usuario de MYSQL para PHPMYADMIN, en las últimas versiones ya no es posible utilizar el usuario root, por lo que hay que crear un usuario exclusivo para el PHPMYADMIN:

sudo mysql -u root -p

Ingresamos con nuestra clave y creamos un nuevo usuario

CREATE USER 'user4phpmyadmin'@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user4phpmyadmin'@localhost ;
FLUSH PRIVILEGES ;

Exit;

Bajamos el instalador de PHPMYADMIN

Deacargar el paquete de PHPMYADMIN desde la siguiente ubicación, al momento de escribir este post esta es la ubicación:


wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

sudo tar xvf phpMyAdmin-latest-all-languages.tar.gz

sudo mv phpMyAdmin-*-all-languages/ /var/www/html/phpmyadmin

Crear Clave Secreta para encriptación de datos de PHPMYADMIN

Ahora debemos crear la clave secreta y el archivo de configuración, esta clave de configuración sirve para que PHPMYADMIN la utilize para cifrar data sensible del servidor.

Este archivo no es para utilizarse en el ingreso a PHPMYADMIN sino para que si alguien tiene acceso al archivo de las contraseñas de PHPMYADMIN no podrá descifrar las claves ya que estarán cifradas.

Para crear esta clave debemos hacer lo siguiente:

Ir al directorio donde está la carpeta de PHPMYADMIN, yo lo tengo en la carpeta siguiente:

cd /var/www/html

Creamos una copia del archivo que viene de ejemplo para trabajarlo 
sudo cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php


Creamos un directorio tmp para que PHPMYADMIN lo utilice en sus procesos 

sudo mkdir /var/www/html/phpmyadmin/tmp


Se genera la clave usando para ello openssl, que nos genere una clave fuerte y aleatoria: 

openssl rand -base64 32


Vamos a modificar el archivo de configuración para agregar la clave en el directorio
 
sudo nano /var/www/html/phpmyadmin/config.inc.php
$cfg[‘blowfish_secret’] = ‘your-key‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Add cute fish bowl key in phpMyADmin Debian 11

Ir al final del archivo y ponerle lo siguiente

$cfg['TempDir'] = '/var/www/html/phpmyadmin/tmp';

Dar permisos al directorio para que se pueda ingresas

Dar permisos correctos, simplemente hacer propietario al usuario www-data

sudo chown -R www-data:www-data /var/www/html/phpmyadmin

Configurar servidor Virtual para entrar

sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Alias /phpmyadmin /var/www/html/phpmyadmin

<Directory /var/www/html/phpmyadmin/>
   AddDefaultCharset UTF-8
   <IfModule mod_authz_core.c>
          <RequireAny>
      Require all granted
     </RequireAny>
   </IfModule>
</Directory>

<Directory /var/www/html/phpmyadmin/setup/>
   <IfModule mod_authz_core.c>
     <RequireAny>
       Require all granted
     </RequireAny>
   </IfModule>
</Directory>
sudo a2enconf phpmyadmin.conf
sudo systemctl restart apache2
http://127.0.0.1/phpmyadmin/

Instalar COMPOSER

Para instalar composer necesitamos ya tener disponible php cli en nuestro sistema, bajar el instalador de composer de aquí y luego correo el siguiente comando, al bajar tendremos cualquiere de los dos archivos siguientes

  • installer
  • composer-setup.php

para instalar globalmente los dejaremos en el directorio bin

sudo php installer --install-dir=/usr/local/bin --filename=composer

Al terminar ese comando ya puede correr el siguiente

composer 

Mostrará lo siguiente


Uncaught Error: Class ‘ZipArchive’ not found in

martes, septiembre 14th, 2021

Mientras generaba un reporte en excel para uno de nuestros sistemas de licencias, me tope con el error siguiente:

 Uncaught Error: Class 'ZipArchive' not found in

El reporte que estoy creando consulta una tabla de la base de datos, realiza un query especifico y luego descarga el excel directamente desde el navegador, estoy usando la libreria de phpoffice: «phpspreadsheet» muy conocida en el mundo php. El código que ejecuto al final de la rutina es el siguiente:

$writer = IOFactory::createWriter($this->sp, 'Xlsx');
$writer->save('php://output');

Me puse a investigar un poco y al parecer el problema radicaba en que la ZipArchive ya no esta disponible en PHP 7.0 por lo que hay que instalar manualmente, puesto que la phpspreadsheet depende de esta ZipArchive debes asegurarte que la tengas habilitada.

Para resolver el problema solo tuve que instalar la mencionada librería ejecutando el siguiente comando en la consola de:

sudo apt-get install php7.0-zip

Algunos tutoriales que encontré me indicaban que modificará el archivo php.ini sin embargo yo solo tuve que reinicar el servidor apache

sudo /etc/init.d/apache2 restart

Con esto quedo solucionado, y pude generar el reporte en excel que estaba necesitando


pm-utils en Debian y eventos post Hibernación

sábado, febrero 20th, 2021

Desde hace tiempo tenia un problema en Debian que me volvía loco, cada vez que el equipo entraba en hibernación o en suspensión, al despertar la Laptop me hacía un ruido terrible siempre cuando el cursor del teclado llegaba al tope, o cuando escribía en consola un comando erróneo, o también cuando en el navegador de archivos llegaba al tope de listado de archivos, al parecer es un sonido de aviso o algo así.

Al parecer es un aviso del sistema, el problema es que en mi computadora por alguna razón este ruido es demasiado fuerte, y bastante molesto cuando te encuentras en el silencio absoluto de la media noche programando o simplemente procrastinando.

Bastaba con un simple comando para desactivarlo:

sudo rmmod pcspkr 

Con el comando anterior el problema se solucionaba fácil, lo que sucedes es que cada vez que volvía a hibernar la maquina o ponerla en suspensión, cerrar la tapa o apagar el equipo; ahí estaba de nuevo, el molesto ruido una y otra vez; para resolver: ejecutar el comando rmmod pcspkr y el ruido desaparece, pero al cerrar el equipo nuevamente se activaba.

Hice una extensa búsqueda en san Google como resolver este problema y no encontré nada, hasta que por casualidad di con la solucionar por efecto mismo de la serendipia.

Librería PM-UTILS Herramientas y scripts para la gestión de energía

La libreria PM Utils sirve para manejo y gestión de la energía del equipo, entre otras cosas te permite hibernar o suspender el equipo desde consola

pm-suspend
pm-hibernate 

Si necesitas mas información sobre este paquete te recomiendo visites los siguientes enlaces:

Todo lo anterior esta magnifico, ¿pero que tiene que ver con el comando rmmod pcspkr que desactiva el molesto ruido en Linux Debian y escritorio Cinnamon?

Eventos Sleep /Resume

Los eventos Sleep/Resume te permiten ejecutar un script cada vez el equipo se levanta de una suspensión o hibernación, para hacerlo debes copiar tu código en las carpetas de configuracion de la librerías PM-UTILS

Lo que debes hacer crear un script en el directorio /etc/pm/sleep.d/

#!/bin/sh
case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend actio$
    ;;
  post/*)
    echo "Waking up from $2..."
    sudo rmmod pcspkr   
    # Place your post suspend (resume) commands here, or `exit 0` if no post su$
    ;;
esac

y ahi meter el comando que quieres que se ejecute cada que el equipo se levanta de una suspensión o de una hibernación.

Asunto resuelto, nunca mas tuve que escuchar ese horrible ruido cuando despertaba mi equipo.

Referencias:


Problema con Debian y node js

sábado, julio 11th, 2020

Una de las ventajas de usar Debian como SO para la programación y el desarrollo de aplicaciones, es sin duda, su gran estabilidad, esto se logra sobre la base de repositorios probados y depurados por una larga comunidad de usuarios. Pero esta misma fortaleza puede llegar a convertirse en su mayor debilidad, cuando de usar lo últimos releases en paquetería de terceros se trate.

Esto es lo que me paso, cuando usaba Debian 9 Stretch y quise instalar node js para trabajar con angular, resulta que cuando lo instalaba siempre me lo dejaba en la versión 4.8.1 pero para trabajar con angular necesitaba la versión 10 y no había forma de instalarlos desde los repositorios de Debian.

La solución llegó con una herramienta llamada NVM (Node Version Manager ) , esta herramienta te permitirá seleccionar la versión de Node Js que desees con un simple comando, puedes cambiar de la versión 4 a la versión 10 en un momento , y luego volver a la versión 4 si así lo necesitas.

¿Cómo instalar NVM en Debian ?

curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh -o install_nvm.sh

Puedes verificar el contenido de instalador con

nano install_nvm.sh

Correr el script con bash para que se instale

bash install_nvm.sh

Podríamos reiniciar el equipo o simplemente cerrar sesión, pero mejor aplicas el siguiente comando para que emule el reinicio

source ~/.profile

Otro comandos de utilidad NVM

Ver las versiones disponibles con el comando NVM

nvm ls-remote

El comando anterior te mostrará todas las versiones disponibles desde la mas antiguas hasta la mas reciente, pero seleccionaremos una version estable

Seleccionamos la versión 10.16.3 con el comando siguiente

nvm install v10.16.3

Ahora la pongo en uso con el siguiente comando

nvm use  v10.16.3

Si desea saber cual es la versión de node que tienes en uso, debes correr el siguiente comando

nvm ls

Con esto ya podemos actualizar el NPM a la última versión

npm install -g npm@latest

confirmamos el NPM -V

npm -v 

Si necesita limpiar el cache

npm cache clean --force

si deseas borrar el cache del npm puedes usar este comando

npm cache clean --force

Espero que este pequeño tutorial te ayude a resolver los problemas de node js y debian, dejame un comentario si tienes algún problema



Redes sociales