martes, 13 de noviembre de 2018

Comparar dos archivos en Solaris, Linux o Unix

Necesitariamos usar el comando diff para poder mostrar la diferencia línea por línea entre dos archivos en Linux. La sintaxis general del comando diff es la que se observa a continuación:
diff ARCHIVO1 ARCHIVO2

Donde ARCHIVO1 ARCHIVO2: El comando Diff examinará ambos archives tanto archivo1 y archivo2 y dirá a usted cuales son las diferencias y los cambios necesario para que ambos archives sean iguales. Por favor tenga en cuenta que el comando diff necesita estás líneas estén:

  • Agregado (a)
  • Eliminado (d)
  • Cambiado (c)
  • Líneas adicionales en el archivo1 son identificadas con el símbolo menos que (|)  y líneas en el archivo2 con el símbolo de mayor (>).

Ejemplos:

diff archivo1.txt archivo2.txt

Salida:

URL: www.codigomaestro.com
> Algo: Información extra

El contenido de ambos archivos:

$ cat archivo1.txt

Salida:

Bienvenido a Código Maestro!
URL: www.codigomaestro.com

$ cat archivo2.txt

Salida:

Bienvenido a Código Maestro!
URL: www.codigomaestro.net
Saludos

Paso a paso para combinar las diferencias de los archives. Usted puede obtener la diferencia visual en la pantalla entre ambos archives de textos usando el comando sdiff:

$ sdiff archivo1.txt archivo2.txt

Salida:

Bienvenido a Código Maestro!
URL: www.codigomaestro.com

Bienvenido a Código Maestro!
| URL: www.codigomaestro.net
> Saludos

jueves, 14 de junio de 2018

Copia de seguridad completa de Android, sin root

    Hasta hace poco era imposible relizar una copia de seguridad completa en terminales Android a no ser que fueramos root. Vayamos por partes. ¿Qué es ser root? Ser root es la posibilidad de acceder a todos los archivos y configuraciones del sistema como si fuéramos un super usuario, un administrador que puede cambiar lo que haga falta. En Android el acceso está limitado por temas de seguridad. Por ejemplo, una aplicación con código malicioso podría aprovecharse de nuestros permisos de super usuario y borrar archivos necesarios para el arranque del mismo.

    A no ser que instalemos aplicaciones de lugares no seguros, externos a tiendas como Google Play o Amazon, no debería pasar en ningún caso. Habiéndonos quitado el miedo, continuamos. ¿Qué ventajas tiene ser root? Pues precisamente, modificar ciertos aspectos del sistema para dejarlo a nuestro gusto. Si habéis leido algo al respecto, sabréis que hay una comunidad de desarrolladores que ofrecen cientos de ROMs diferentes para cada terminal, versiones modificadas de Android que son posibles gracias a que el código fuente es abierto.

    Volviendo al tema principal del artículo, la imposibilidad de realizar copias de seguridad completas, hay que matizar algo. Siempre fue posible realizar copias de seguridad de aplicaciones, pero no de sus datos. Algo tan básico como guardar las aplicaciones que utilizamos y todos los datos de las mismas, tales como usuarios asociados o configuraciones, era imposible hasta ahora. Eso ha cambiado gracias a Simple ADB Backup, uno de los programas más sencillos para hacerlo, pero que necesita sistemas con Android 4.0 o superior.

    Fraguado, como no, en los foros de XDA-Developers y disponible para sistemas Windows y Linux, Simple ADB Backup nos permite realizar las siguientes acciones:
  • Copia de seguridad de aplicaciones de usuario
  • Copia de seguridad de aplicaciones de usuario y del sistema
  • Copia de seguridad de los datos de aplicaciones
  • Copia de seguridad de aplicaciones
  • Copia de seguridad de archivos del dispositivo y de la tarjeta SD
  • Copia de seguridad selectiva
  • Restauración
    Los archivos copiados se guardarán en un directorio de nuestra elección, uno que sólo debería estar a nuestro alcance debido a que seguramente estémos guardando datos de aplicaciones que además incluyen información de login en servicios web.

   Utilizar la aplicación no tiene mucho misterio, aunque hay que tener en cuenta que para hacerlo necesitamos activar previamente la opción de USB Debugging, dentro del menú de opciones de desarrollador en la configuración de Android.

    Entonces, será el propio Android el que nos preguntará por una contraseña, para proteger esos datos críticos de los que hablábamos, antes de empezar la copia. Basta con escribirla, y recordarla, por supuesto, para comenzar una operación que durará más o menos dependiendo de la opción seleccionada.

Para ealizar la copia:

    Conecta tu teléfono al PC y teclea “adb devices” en el cmd para verificar que reconoce tu dispositivo. Algo como esto. Si no aparece nada, significa que no están bien instalados los drivers así que vuelve a revisarlo.

adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|nosystem] [<packages…>]

La opción más sencilla es

adb backup -all -f C:\backup.ab

Parámetro Explicación
-f <file> Usa esto para personalizar el archivo de salida: por ejemplo -f c:\micopia.ab o -f c:\Archivos de Programa\porno\cosasverdes\copia.ab
-apk|-noapk Indica si quieres que las .apk se incluyan en el backup. Por defecto está en -noapk
-shared|-noshared Indica si quieres realizar una copia del contenido de la memoria compartida/tarjeta SD. Por defecto está en -noshared.
-all Hace una copia de todo.
-system|-nosystem Indica si quieres realizar una copia de las aplicaciones del sistema (Reloj, Calendario, etc..). Por defecto es -system.
<packages…> Especifica un paquete en concreto para hacer la copia de seguridad. ej: com.google.android.apps.plus

Continuemos con la copia, introducies finalmente el tipo de copia que quieres hacer. Por ejemplo: 

adb backup -apk -shared -all -f C:\backup.ab 

    Aparecerá la siguiente ventana en tu Android donde podrás escribir una contraseña para protegerla, el proceso tardará unos minutos y finalizará.

Restaurar la copia:

Para restaurar la copia de seguridad, el proceso es igual de sencillo, basta con escribir:

adb restore C:\backup.ab

Se os solicitará la contraseña, y listo.

viernes, 20 de abril de 2018

Reiniciar el password de administrador en Weblogic

Vamos a  tratar de reiniciar el password de administrador de Weblogic en un entorno Windows en donde había instalado la suite OBIEE 11g con Weblogic 10.3.3.0

Usaremos la siguiente nomenclatura
  • <DOMAIN_HOME> = %BIHOME%\user_projects\domains\<tu_dominio>
  • <SERVER_DOMAIN> = <DOMAIN_HOME>\servers\AdminServer

Abrimos un cmd

"Seteamos" el dominio: <DOMAIN_HOME>\bin\setDomainEnv.cmd


cd security

Renombramos el archivo DefaultAuthenticatorInit.ldift

rename DefaultAuthenticatorInit.ldift DefaultAuthenticatorInit.ldift_old

Ejecutamos la utilidad de cambio de password  

java -cp E:\BI11_HOME
\wlserver_10.3\server\lib\weblogic.jar weblogic.security.utils.AdminAccount <nuevo_user> <nuevo_password> .


El comando no dice nada tras ejecutarse, pero esto nos creará un nuevo DefaultAuthenticatorInit.ldift en la carpeta security

Renombramos la carpeta data a data.old para que se recreé toda la estructura ldap al arrancar el servidor

rename <SERVER_DOMAIN>\data <SERVER_DOMAIN>\data.old
Arrancar el weblogic e introducir el usuario y contraseña nuevos que se especificaron en el punto 4

<DOMAIN_HOME>\startWeblogic.cmd
 
Y con esos pasos deberíamos de tener reiniciado el password y el servidor debería estar arrancando.
Lo de tener que meter el usuario y password para arrancar el servidor es una medida de seguridad, pero en entornos de pruebas o desarrollo puede resultar tedioso. Para ello podemos seguir los pasos de la nota de myOracle Support 980292.1 :

“Starting AdminServer Without Username/Password Prompt in WebLogic Server 10.3“ que básicamente viene a decir que podemos poner un archivo boot.properties en el directorio <SERVER_DOMAIN>\security con la siguiente sintaxis:
  
username=<nuevo_user>
password=<nuevo_password>


Estos valores serán tenidos en cuenta en el siguiente reinicio del servidor, y si coinciden con los que se especificaron en el paso 4, se encriptarán y serán usados en veces subsiguientes, sin necesidad de que los proporcione el usuario.

martes, 16 de enero de 2018

Servidores de aplicaciones como servicios de sistema

Colocar script de arranque del servidor en el arranque del sistema 

Para que los servidores de aplicaciones se arranquen a la vez que se arranque la máquina, debemos incluir el script de arranque del Servidor de aplicaciones en el sector de arranque del Sistema Operativo. En el caso de máquinas Linux, debemos incluir enlaces simbólicos a dichos scripts en la ruta  /etc/init.d  e incluirlo en los niveles de arranque adecuados. 

Particularizamos a continuación los diferentes procedimientos a seguir para servidores de aplicaciones Tomcat y Jboss.

TOMCAT

 

Para levantar el servidor Tomcat con un usuario sin privilegios y dejarlo corriendo como servicio, se utiliza la aplicación jsvc que viene incluida dentro del propio servidor Tomcat (Tomcat 5.x), tal y como se indica en la web http://tomcat.apache.org/tomcat-5.5-doc/setup.html, siguiendo la siguiente secuencia de comandos.

cd $CATALINA_HOME/bin
tar xvfz jsvc.tar.gz
cd jsvc-src
autoconf
./configure
make
cp jsvc ..
cd ..

Se obtiene el binario jsvc y el script Tomcat5.sh en el directorio $CATALINA_HOME/bin. 

Este script, una vez modificado para indicar el usuario (ej: tomcat). Tendremos que modificar los siguientes parámetros en el script Tomcat5.sh:

JAVA_HOME = [Ruta donde hemos instalado el JDK]
CATALINA_HOME = [Ruta donde hemos instalado Tomcat]
DAEMON_HOME = [Ruta donde hemos instalado el Tomcat]
TOMCAT_USER = [Nombre del usuario que arrancará el Tomcat]

Si tenemos múltiples instancias de Tomcat, puede ser necesario modificar también los siguientes parámetros:

TMP_DIR
PID_FILE
CATALINA_BASE

El siguiente paso consistiría en crear un simbólico en la carpeta /etc/init.d con el siguiente comando y ejemplo:

ln -s /opt/pa_html/apache-tomcat-5.5.25/bin/jsvc /etc/init.d/tomcatservice

Si nos encontramos en un sistema Redhat, el siguiente paso sería colocar el script en los correspondientes niveles de arranque, mediante el comando:

chkconfig --add /etc/init.d/tomcatservice

Si estamos en un sistema Debian, el comando “chkconfig” no funcionaria correctamente, deberemos de colocar los scripts manualmente para inicio en los niveles 2 3 4 5, y de parada en los niveles 0 1 y 6. Lo haremos de la siguiente manera:

ln -s /etc/init.d/tomcatservice /etc/rc0.d/K88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc1.d/K88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc2.d/S88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc3.d/S88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc2.d/S88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc4.d/S88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc5.d/S88Tomcat
ln -s /etc/init.d/tomcatservice /etc/rc6.d/K88Tomcat

De todas formas podemos automatizar este proceso (sólo en Debian) mediante el comando “update-rc.d”, de la siguiente manera:

update-rc.d /etc/init.d/tomcatservice start 88 2 3 4 5 . stop 11 0 1 6

Se aconseja que los números de secuencia (88 y 11) sumen 99. Ya que la secuencia de inicio debe de ser inversa a la de arranque.

JBOSS

 

En la carpeta bin del servidor de aplicaciones Jboss existen una serie de scripts preparados para ponerlos en el arranque y servir como demonios. El script está optimizado para sistemas operativos Red Hat, aunque en Debian no debe haber problemas para que funcione. 

Por tanto, cogemos el script jboss_init_redhat.sh y lo editamos para definirle los siguientes parámetros:

JAVAPTH = [Ruta donde hemos instalado el JDK]
JBOSS_HOME = [Ruta donde hemos instalado el Jboss]
JBOSSUS = [Nombre del usuario que arrancará el Jboss]

A continuación creamos en /etc/init.d/ un enlace simbólico, llamado jboss, que apunte al script que acabamos de modificar. Lo hacemos con el siguiente comando:

 ln –s  $JBOSS_HOME/bin/jboss_init_redhat.sh jboss

 Para terminar lo colocamos en los niveles de arranque. Este script está preparado para colocarlo en el nivel de arranque 3, para hacer esto, tras crear el enlace simbólico, basta con ejecutar el siguiente comando:

 chkconfig --add /etc/init.d/jboss
           
Si nos encontramos en un sistema Debian, el comando “chkconfig” no dará resultado, así que haremos lo descrito en el último punto anterior sobre Tomcat, es decir crearemos los enlaces simbólicos en los distintos niveles de arranque manualmente.

lunes, 4 de diciembre de 2017

Cron; el programador de tareas de Linux / UNIX

Muchos administradores aún desconocen la herramienta cron, es el programador de tareas del que disponemos en todas las distribuciones de Linux, incluidas las distribuciones propietarias.

Suele ubicarse en la ruta /etc/crontab y podemos editarlo con cualquier editor de textos, normalmente usaremos vi que es la herramienta por excelencia de todos los administradores de sistemas.

En el siguiente ejemplo, vamos a programar una tarea usando el comando crontab –e, que nos permitirá editar la tabla de tareas cron, y añadiremos una línea para el sistema se sincronice a diario con un servidor NPT, como por ejemplo hora.roa.es.

Bien, una vez dentro de la lista de entradas de tareas, añadimos la siguiente línea:

1 0 * * * root ntpdate hora.roa.es >> /var/log/ntp.log

Con esta tarea, el sistema sincroniza con el servidor horario NTP a las 00:01 horas, todos los días de la semana y del mes.

A continuación, esta tabla muestra el significada de cada parámetro en la línea:

.----- Minuto [0 - 59]
|.---- Hora [0 - 23]
||.--- Día del mes [1 - 31]
|||.-- Mes [1 - 12] (o jan, feb, mar, apr ...)
||||.- Día de la semana [0 - 7] (sun, mon, tue, wed, thu, fri, sat,sun)
|||||
***** [usuario] [comando] [parametros]

lunes, 20 de noviembre de 2017

Cerrar sesiones en Oracle

El primer paso es identificar la sesión que queremos matar:

SET LINESIZE 100
COLUMN spid FORMAT A10
COLUMN username FORMAT A10
COLUMN program FORMAT A45

SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

   INST_ID        SID
   SERIAL# SPID       USERNAME   PROGRAM
---------- ---------- ---------- ---------- ---------- ---------------------------------------------
         1         30         15 3859       TEST       sqlplus@oel5-11gr2.localdomain (TNS V1-V3)
         1         23        287 3834       SYS        sqlplus@oel5-11gr2.localdomain (TNS V1-V3)
         1         40        387 4663                  oracle@oel5-11gr2.localdomain (J000)
         1         38        125 4665                  oracle@oel5-11gr2.localdomain (J001)



Los valores SID y SERIAL# son los que se utilizaran en los comandos que explicamos más delante.

 ALTER SYSTEM KILL SESSION

La sintaxis básica para matar una sesión es la siguiente:

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#';
En un ambiente RAC, opcionalmente se puede añadir  el identificador de la instancia INST_ID, lo obtenemos de la vista GV$SESSION view. Este permite matar una sesión desde otro de los nodos de RAC.

SQL> ALTER SYSTEM KILL SESSION 'sid,serial,#@inst_id';

El comando KILL SESSION no mata la sesión, simplemente le indica a la sesión que debe matarse ella misma. En algunas situaciones como en la espera de una respuesta de una base de datos remota o cuando se esta haciendo un roll back a una transacción, la sesión no se mata a si misma inmediatamente, espera a que termine la operación que está realizando. En estos casos la sesión adquiere el status de “marked for kill”, y se mata lo antes posible

Además de la syntaxix  descrita anteriormente, se puede añadir la clausula IMMEDIATE.

SQL> ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

Esto no afecta al trabajo que hace el comando, pero devuelve el control a la sesión inmediatamente, en vez de esperar la confirmación de que se ha matado la sesión.

Si la sesión marcada persiste demasiado en el tiempo se puede intentar matar el proceso a nivel de sistema operativo, antes de hacer esto es conveniente comprobar que la sesión no está haciendo rollback. Podemos comprobar esto con el script (session_undo.sql), lo tenéis en la página de scripts. Si el valor de USED_UREC decrece para la sesión en cuestión es mejor dejar que termine el rollback antes de matar la sesión a nivel de sistema operativo.

ALTER SYSTEM DISCONNECT SESSION

Oracle 11g introduce la sintaxis ALTER SYSTEM DISCONNECT SESSION  un nuevo método de matar una sesion Oracle.  Lo que hace este comando es matar el proceso de servidor dedicado ( o circuito virtual cuando se utilizan los Shared Sever), lo que es equivalente a matar el proceso desde el sistema operativo. La sintaxis básica es similar a la del comando KILL SESSION más la clausula POST_TRANSACTION.

SQL> ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' POST_TRANSACTION;
SQL> ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;

La clausula POST_TRANSACTION espera a que la transacción se complete antes de desconectar la sesión.

Matar una sesión en windows

C:> orakill ORACLE_SID spid

Matar una sesión en Unix

% kill spid

Si después de unos minutos no ha muerto utilizar

% kill -9 spid

Para verificar que el spid coincide con el proceso del sistema operativo:

% ps -ef | grep ora

jueves, 10 de agosto de 2017

Instalación y configuración de un cliente NTP

Copiamos a la máquina los paquetes necesarios.

Instalamos gcc, g++ (junto con sus dependencias), make y las librerías necesarias para poder compilar e instalar el software:

Realizamos una instalación típica:

# tar -xvzf [paquete_ntp]
# cd [directorio_descomprimido]
# ./configure --prefix=[ruta_ntp_instalado]
# make
# make install

Una vez instalado realizamos estos dos pequeños pasos:

Tras instalarlo, creamos un pequeño script que ejecute el comando  ntpdate -u [servidorNTP], el cual se conecta con un servidor NTP saltándose las restricciones de cortafuegos.

Cogemos el script que hemos creado, y lo colocamos en el cron para que se ejecute periódicamente y así mantener el reloj actualizado cada cierto tiempo (el que hayamos definido en el cron).

** Más información en http://bulma.net/body.phtml?nIdNoticia=408 **

1) Hemos creado el siguiente script, al que lo hemos llamado ntpCron:

#!/bin/bash

/opt/ntp/bin/ntpdate -u 129.132.2.21

Esta ip que hemos puesto es la del servidor swisstime.ethz.ch, pero tenemos que poner la IP porque no tenemos los DNS bien configurados.

A continuación ponemos una lista de posibles servidores:

# ntp.metas.ch (193.5.216.14)
# swisstime.ethz.ch (129.132.2.21)
# ntp0.fau.de (131.188.3.220)
# ptbtime1.ptb.de (192.53.103.103)
# hora.roa.es (150.214.94.5, este último es el más aconsejable)


2) Hay dos posibilidades:

- Poner el script en la carpeta /etc/cron.hourly, con lo que se ejecutará cada hora.

- Incluir una llamada al script en el archivo /etc/crontab para que el script se ejecute cuando se lo hayamos especificado. Como ayuda, una linea del archivo crontab tiene el siguiente formato:

1 2 3 4 5 /ruta/script

Donde cada número se sustituirá por el valor que corresponda:

1) Minutos.
2) Horas.
3) Días del mes (de 1 a 31).
4) Meses.
5) Días de la semana (de 1 a 7 ó de 0 a 6, funciona igual).

miércoles, 2 de agosto de 2017

Instalar componentes de LAMP individualmente

Usaremos las siguientes versiones de los componentes, aunque podemos usar veriones superiores si lo deseamos:
 
Nucleo Linux 2.2.x 
MySql 5.x 
PHP 5.X

Vamos a instalarlo todo en la ruta /usr/local , ya que MySql se instala allí por defecto.

Ponemos los archivos comprimidos de los componentes en /usr/local, y nos situamos en dicha ruta.

Comenzamos:

Instalamos Apache

# tar -xvzf [paquete apache] 
# cd [paquete apache]
#./configure --prefix=/opt/apache2 --enable-mods-shared=all
# make
# make install

Instalamos MySQL

    Creamos el usuario y el grupo mysql:

        # groupadd mysql
        # useradd -g mysql mysql
   
    Para cambiar de usuario usamos el siguiente comando:

        # su - [nombre_usuario]

        Copiamos el tar.gz a /usr/local y lo descomprimimos.
   
        tar -xvzf [archivo_distribucion_mysql].tar.gz
   
    Creamos un enlace simbólico:
   
        ln -s /usr/local/[archivo_distribucion_mysql] mysql
   
    Ejecutamos el script mysql_install_db ubicado en la carpeta scripts.
   
    Iniciamos la base de datos con:

        #/usr/local/mysql/bin/safe_mysqld &

        *** Hay que hacerlo con el usuario mysql ***

Inicializamos la contraseña del root de base de datos. Hay dos maneras, o modificando los privilegios de la tabla "user" de la base de datos, o mediante el comando "mysqladmin".

    Mediante BBDD:

        # mysql -u root
        mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
        mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');


    Con mysqladmin:

        # mysqladmin -u root password "newpwd"
        # mysqladmin -u root -h host_name password "newpwd"


Añadir nuevo usuario: primero tenemos que crearlo en el sistema, y luego le concedemos los permisos de administrador de la siguiente manera:

Entramos en la instancia "mysql" (instancia por defecto) con el usuario root, y ejecutamos los siguientes comandos:

        mysql> GRANT ALL PRIVILEGES ON *.* TO 'nuevo_usuario'@'localhost'  IDENTIFIED BY
        'pass_del_nuevo_usuario' WITH GRANT OPTION;
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'nuevo_usuario'@'%'  IDENTIFIED BY 
        'pass_nuevo_usuario' WITH GRANT OPTION;
        mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
        mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

    Así ya nos podremos conectar a la base de datos en el nuevo_usuario.

    Poner mysql como servicio:

Copiamos el script "mysql.server" a /etc/init.d, y lo colocamos en los niveles de arranque que queramos.

Instalamos PHP, compilándolo con los parámetros especificados:

    # tar -xvzf [paquete php]
    # cd [paquete php]
    # ./configure --prefix=/opt/php5.5.26 --with-apxs2=/opt/apache2/bin/apxs --enable-magic-quotes 
    --with-zlib --enable-dba --with-gdbm --with-gd --enable-ftp --with-jpeg-dir --enable-gd-native-ttf 
    --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config 
    --enable-wddx
    # make
    # make install

viernes, 21 de julio de 2017

Reiniciar ORACLE remotamente de forma correcta

Seguramente alguna vez nos hemos encontrado que a la hora de reiniciar el servicio de ORACLE (10G en adelante), este no "levanta" correctamente, o bien nos da algún error.

Este problema suele ser debido a que no estamos usando el usuario correcto de ORACLE, o bien a que no estamos haciendo los pasos en el orden correcto.

Os dejo unas notas orientativas que pueden ayudar:

Conectarse a la maquina por ssh (no se puede usar el usuario root): 

usuario:XXXXXX
passwd: XXXXXX 

Reiniciar el listener:

Las variables de entorno deberan de estar ya definidas:

lsnrctl start LISTENER (El nombre de listener y el puerto de escucha, lo puedes ver en listener.ora

Reiniciar sólo la base de datos (en caso extremos):

Escribimos sqlplus "/as sysdba" una vez iniciada la sesion en SSH.

startup 

Despues de salir de sqlplus (quit), levantar el entorno web de administracion de ORACLE.

emctl start dbconsole (Levanta entorno web de admin).

Para reiniciarlo, primero hay que parar la BD:

shutdown immediate

Luego para iniciar de nuevo la base de datos:

startup

miércoles, 28 de junio de 2017

Cómo generar un nuevo archivo sendmail.cf

  1. Conviértase en administrador.
    $ su root
    
  2. Detenga sendmail.
    # svcadm disable -t network/smtp:sendmail
    
  3. Realice una copia de los archivos de configuración que desea cambiar.
    # cd /etc/mail/cf/cf
    # cp sendmail.mc myhost.mc
    mi_host
    Seleccione un nuevo nombre para el archivo .mc.
  4. Edite los nuevos archivos de configuración (por ejemplo, myhost.mc), según sea necesario. Por ejemplo, agregue la siguiente línea de comandos para habilitar el enmascaramiento de dominios.
    # cat myhost.mc
    ..
    MASQUERADE_AS(`host.domain')
    host.domain
    Utilice el nombre de host y el nombre de dominio deseados.
    En este ejemplo, MASQUERADE_AS provoca que el correo enviado se etiquete como procedente de host.domain, en lugar de $j.
  5. Genere el archivo de configuración con m4.
    # make myhost.cf
    
  6. Pruebe el nuevo archivo de configuración y utilice la opción -C para especificar el nuevo archivo.
    # /usr/lib/sendmail -C myhost.cf -v testaddr </dev/null
    
    Cuando este comando muestra mensajes, envía un mensaje a testaddr. Sólo el correo saliente se puede probar sin reiniciar el servicio sendmail en el sistema.
  7. Instale el nuevo archivo de configuración después de realizar una copia del original.
    # cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save
    # cp myhost.cf /etc/mail/sendmail.cf
    
  8. Reinicie el servicio sendmail.
    # svcadm enable network/smtp:sendmail

miércoles, 14 de junio de 2017

Codificación UTF8 para Jboss

Seguramente, en nuestra trabajo más de una vez nos hemos encontrado con el problema de la codificación de caracteres. Bien en sesiones SSH, en archivos de configuración, en la presentación de las mismas aplicaciones.

A continuación expongo unas notas para corregir esto en el caso del servidor de aplicaciones Jboss.

    En el server.xml de jbossweb.sar/, añadir al conector "8080":
   
        URIEncoding="UTF-8"
       
    En las opciones de arranque de run.conf, añadir en el JAVA_OPTS:
   

        Dfile.encoding=UTF-8
       
    En el components.xml de la aplicación:
   
        <web:character-encoding-filter encoding="UTF-8" override-client="true" url-pattern="*.seam" />

jueves, 1 de junio de 2017

Entorno gráfico mínimo en Linux


Son necesarios los siguientes paquetes mínimos:

1) x-window-system
2) xorg

A partir de esto, debemos añadir diferentes paquetes para que el entorno gráfico pueda funcionar correctamente:

3) Gestor de ventanas  (Window Manager).
  • OpenBox -> Ligero pero difícil de configurar
  • IceWM
  • FluxBox
  • FVWM-Crystal
  • XFCE -> Más pesado, pero más simple de configurar. Tiene una variante para Ubuntu: Xubuntu, el cual instala un entorno gráfico prácticamente completo.

4) Gestor de login: Para poder loggearse en el entorno gráfico.
  • GDM -> Muy pesado
  • KDM -> También muy pesado.
  • XDM -> El más básico. Feo de estética, pero igual de útil que los anteriores.

5) Navegadores (Browsers).
  • Firefox
  • Dillo
6) Gestores de archivos.
  • Nautilus -> Propio de Gnome
  • Konqueror -> El de KDE.
  • Thunar -> El que trae por defecto Xubuntu. y los basados en XFCE
  • XFE -> Parecido al Explorador de Windows.

7) Gestor de Paquetes: Sustitutos gráficos de apt-get o aptitude para gestionar software.
  • Synaptic -> El más popular y potente.

martes, 14 de marzo de 2017

Seguridad en IP Tables (Linux) - Operaciones con una regla simple


Esta es la base del filtado de paquetes, la manipulación de reglas. Normalmente utilizarás los comandos de añadir (-A) y eliminar (-D), las otras (-I para insertar y -R para reemplazar) son extensiones de estos conceptos.

Cada regla especifica un conjunto de condiciones que un paquete debe cumplir, y lo que haremos si cumple dichas condiciones (efectuaremos una 'acción'). Por ejemplo, puede que quieras hacer DROP de los paquetes ICMP provinientes de la dirección 127.0.0.1. En este caso definiremos el protocolo como ICMP, la dirección de origen como 127.0.0.1 y la acción será DROP.

127.0.0.1 es el interface 'loopback' que tendrá en su máquina incluso si no dispone de una conexión real a la red. Puede hacer un 'ping' para generar paquetes dichos paquetes (un ping simplemente envia paquetes ICMP del tipo 8 (petición de eco) que todos los hosts operativos deberán responder con un paquete ICMP de tipo 0 (respuesta del eco). Esto hace ping muy útil para el testeo.

    # ping -c 1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1): 56 data bytes
    64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 0.2/0.2/0.2 ms

    # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

    # ping -c 1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1): 56 data bytes

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 0 packets received, 100% packet loss
    #


Puedes ver aquí como funciona el ping (el parámetro '-c 1' le indica a ping que envíe un único paquete).

Despues añadimos (-A) a la chain 'INPUT' (de entrada) una regla especificando que los paquetes que vengan de 127.0.0.1 (-s 127.0.0.1) con el protocolo ICMP (-p icmp) deberán tomar la acción DROP (-j DROP)

Una vez hecho esto, probamos la regla con un segundo ping. El programa esperará una respuesta que nunca llegará Podemos eliminar esta regla de dos formas. La primera, ya que sabemos que es la única regla en la chain de entrada (input), podemos utilizar su número para borrarla:

              # iptables -D INPUT 1

La segunda forma es igual a la del comando -A, pero sustituyendo -A por -D. Esto es útil cuando tiene varias reglas complejas y no quieres tener que contarlas hasta encontrar la que buscabas. Para estos casos usaremos:

              # ipchains -D INPUT -s 127.0.0.1 -p icmp -j DROP

La sintáxis de -D debe ser exáctamente igual a la de -A (o -I o -R). Si hay  múltiples reglas iguales en la misma chain, sólo la primera será eliminada

miércoles, 8 de febrero de 2017

Reiniciar un campo identity en SQL Server

Frecuentemente una de las cuestiones más frecuentes que como administrador de sistemas llega a mi es como reiniciar el valor de identidad de una tabla en Sql Server.

Los valores identity aumentan de forma secuencial, si eliminamos los registros de una tabla, el valor identity no se inicializa, sino que continua con su último valor.

Para modificar este comportamiento utilizaremos el siguiente comando:

DBCC CHECKIDENT (<nombre_tabla>, RESEED,0)

martes, 13 de diciembre de 2016

Configuración de Apache umask

Algunas veces nos encontramos con el problema de que los archivos generados por el usuario “apache” tienen fijados los permisos en "0600", que corresponde a "-rw ---". Pudiendo ocurrir que las aplicaciones Web sean incapaces de trabajar con los archivos. "0600" corresponde a un umask de "066". En su lugar podemos usar "022", que corresponde a "-rw-rw-r-" o "0664".

En Ubuntu, edite /etc/apache2/envvars y añada esta línea al final del archivo:

umask 022

En Red Hat / CentOS haga lo siguiente:

echo "umask 002" >> /etc/sysconfig/httpd

Ahora reinicie Apache y el umask nuevo será efectivo.

miércoles, 26 de octubre de 2016

Iniciar Veritas Cluster con un solo nodo

Para proteger el cluster de una partición de red (network partition), Veritas CLuster Server (VCS) utiliza el concepto de seed. Por defecto, cuando un sistema sube, este no está seeded. Los sistemas pueden ser seeded automáticamente o manualmente. Notar que sólo los sistemas que han sido seeded pueden correr VCS.

Los sistemas son seeded automáticamente en una de 2 maneras:

- Cuando un sistema "unseeded" se comunica con un sistema "seeded"
- Cuando todos los sistemas en el cluster están "unseeded" y habilitados para comunicarse con los otros.

El control del "seeding" está establecido en el archivo /etc/gabtab. GAB es iniciado con la línea de comando /sbin/gabconfig -c -n X, donde X es igual al número de nodos en el cluster. Por ejemplo, la línea de comando en el archivo /etc/gabtab para un cluster de 4-nodos es /sbin/gabconfig -c -n 4. VCS requiere que se declare el número de nodos en el Cluster.

Cuando el último sistema es "booteado", el cluster "seedeará" y comenzará VCS en todos los sistemas. Desde ahora los sistemas pueden ser bajados y reiniciados en cualquier combinación. "Seeding" es automático siempre que al menos una instancia de VCS está corriendo en algún lugar del Cluster.

Para iniciar el cluster con menos nodos que el total, verificar que los nodos a ser excluídos están actualmente abajo. Luego, iniciat GAB con el comando /sbin/gabconfig -c -x. Esto "seedeará" manualmente el cluster y habilitará VCS para subir en todos los sistemas conectados.

miércoles, 5 de octubre de 2016

Entorno gráfico mínimo en Linux


Son necesarios los siguientes paquetes:

     ix-window-system
     xorg

A partir de aqui, debemos añadir diferentes paquetes para que el entorno gráfico pueda funcionar correctamente:
  • Gestor de ventanas  (Window Manager):          
            OpenBox; Ligero pero difícil de configurar.
            IceWM
            FluxBox
            FVWM-Crystal
            XFCE; Más pesado, pero más simple de configurar. Tiene una variante para Ubuntu: Xubuntu, el cual instala un entorno gráfico prácticamente completo.
  • Gestor de login: Para poder logarse en el entorno gráfico:
            GDM; Muy pesado.
            KDM; También muy pesado.
            XDM; El más básico, la estética no es su punto fuerta, pero resulta igual de útil que los anteriores.

  • Navegadores (Browsers):
            Firefox
            Dillo
  • Gestores de archivo:
            Nautilus; Propio de Gnome.
            Konqueror; Propio de KDE.
            Thunar; El que trae por defecto Xubuntu y los basados en XFCE.
            XFE; Parecido al Explorador de Windows.
  • Gestor de Paquetes, sustitutos gráficos de apt-get o aptitude para gestionar software:
             Synaptic -> El más popular y potente.

jueves, 7 de julio de 2016

Medida contra el "hotlink"

Seguramente, más de una vez nos hemos encontrado en algún servidor web que hemos montado, que otros usuarios hacen uso de archivos que tenemos alojados en nuestra máquina, normalmente imágenes o archivos multimedia.

Si nuestra intención no es evitar dicha práctica discutible, no tendríamos problemas si no fuese porque no están usando indirectamente nuestra capacidad de almacenamiento de forma fraudulenta, y lo que es peor, nuestro ancho de banda que como sabemos, es vital en la red.

Para evitar el "hotlink", podemos usar el conocido .htaccess de Apache, con el siguiente código:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]

martes, 7 de junio de 2016

Importar una máquina virtual a VMware SX

Ejecutamos el "VMware Infrastructure Client", y seleccionamos el ítem de menú "File > Virtual Appliance > Import"

Aparecerá una ventana con el título "VMWare Infrastructure Client Wizard" donde seleccionamos la segunda opción "Import form file", pulsamos el botón "Browse" que tenemos justo a la derecha de la opción.

Aparecerá una ventana que nos permite navegar por nuestro equipo local, asi que nos dirigimos a la ubicación donde tenemos nuestra maquina virtual "Manual", por ejemplo:

             G:\Proyectos\Racks\GestorTIC\

Seleccionamos el archivo con la extensión .ovf , ósea:

             G:\Proyectos\Racks\GestorTIC\Manual.ovf

Pulsamos el botón "Abrir" de la ventana una vez seleccionado el archivo Manual.ovf. Ahora pulsamos el botón "Next" que tenemos en la parte inferior derecha de la ventana.

Nos mostrará información acerca de la maquina que vamos a importar, si la información es correcta volvemos a pulsar el botón "Next".

Nos indicara que introduzcamos un nombre para la maquina, se trata del nombre VMware, indicaremos preferiblemente el mismo nombre que la carpeta y la maquina virtual, ósea Manual.

Pulsamos de nuevo el botón siguiente, nos mostrará un resumen de las acciones de importación a realizar, si estamos conforme pulsamos el botón "Finish" que aparece en la parte inferior derecha de la ventana.

Aparecerá una ventana con una barra horizontal que nos indica el porcentaje completado del proceso de importación. Una vez haya finalizado, la maquina aparecerá en la lista de VMware.

La carpeta con los archivos de la maquina virtual la podemos localizar en la ruta:

            /vmfs/volumes/VMHost_12:storage1/

Normalmente VMware crea la carpeta de la maquina virtual con el mismo nombre que hemos introducido para la maquina virtual, por ejemplo si hemos indicado "Manual", la maquina entrará localizada en:

            /vmfs/volumes/VMHost_12:storage1/Manual

domingo, 24 de abril de 2016

Como instalar OpenOffice en modo servidor

  1. Introducción.

Vamos a describir la instalación en un entorno Linux, concrétamente para la distribución de Red Hat, aunque es extrapolable a cualquier distribución que utilice los paquetes RPM.


  1. Descarga del Software

OpenOffice es software libre.La instalación en modo servidor es básicamente la instalación estándar del OpenOffice, pero arrancándolo con unos parámetros especiales, en lugar de como lo haríamos para iniciarlo en modo mono-usuario.
La distribución que nos ocupa se presenta en un archivo comprimido, con la extensión .tar.gz.

  1. Instalación de OpenOffice

Copiamos el paquete en un directorio cualquiera. Conviene copiarlo en /opt, ya que será donde se instalará el producto por defecto.

            # cp [nombre_paquete] /opt

 Luego lo descomprimimos, desde la ruta donde lo hayamos copiado, con el siguiete comando:
           
            # cd /opt
            # tar -xvzf [nombre_paquete]

 Esto nos habrá creado una carpeta con un nombre extraño (OOH_....).
 Entramos en la ruta, y accedemos a una carpeta de nombre "RPMS":

            # cd [nombre_carpeta]/RPMS

Procedemos a instalar todos los paquetes '.rpm' contenidos en esta carpeta.

Debemos instalar todos a la vez (esto es, en la misma línea), debido a que tienen dependencias unos con otros. Podemos hacerlo de dos maneras:

A) Escribiendo en la misma línea los nombres de todos los paquetes:

                        # rpm -ivh [paquete_1] [paquete_2] ... [paquete_N]

B) O ejecutar los siguientes comandos, que nos facilitarán la tarea de copiar y pegar todos los nombres de paquetes:

                        # for I in `ls -l | grep rpm | awk '{print $9}'`; do PAQS="$PAQS $I"; done
                        # rpm -ivh $PAQS

Esto nos instalará todos los paquetes, y habrá instalado la aplicación en la siguiente carpeta:

            /opt/openoffice.org2.4

A partir de ahora, esta ruta la conoceremos como "OPENOFFICE_HOME".


  1. Configuración de OpenOffice para funcionar en modo Servidor

Debemos realizarle unos cuantos ajustes a la instalación, con el fin de que pueda funcionar en modo Servidor.

 A) Renombramos un archivo de nombre 'javaldx':

            - Vamos a la carpeta "program":

                        # cd $OPENOFFICE_HOME/program

            - Renombramos el archivo:
           
                        # mv javaldx javaldx.OLD

 B) Editamos el archivo "Setup.xcu", ubicado en

"$OPENOFFICE_HOME/share/registry/data/org/openoffice".

Hay que modificar bastantes etiquetas de este archivo. Para no listarlas y asegurarnos que la configuración es correcta, conviene pegar directamente el archivo "Setup.xcu" que adjuntamos con este manual:

     - Accedemos a la carpeta:

                        # cd $OPENOFFICE_HOME/share/registry/data/org/openoffice

      - Renombramos el archivo existente:

                        # mv Setup.xcu Setup.xcu.OLD

      - Copiamos el archivo Setup.xcu proporcionado (previamente lo debemos haber copiado en alguna ruta conocida, a la que llamaremos aquí INTERCAMBIO):

                        # cp $INTERCAMBIO/Setup.xcu $OPENOFFICE_HOME/share/registry/data/org/openoffice


  1. Revisión del sistema

Para que OpenOffice pueda arrancar en modo Servidor, hay algunas configuraciones del sistema que deben estar correctas.

A) Archivo /etc/hosts con 'localhost' bien definido:

            Editamos el archivo y comprobamos que, además del resto de definiciones, no falta esta:

                        127.0.0.1   localhost


  1. Arranque de OpenOffice en modo Servidor

Una vez que tenemos OpenOffice instalado y correctamente configurado, vamos a proceder a arrancarlo para comprobar que está bien instalado y que puede aceptar conexiones entrantes en modo Servidor.

   - Procedemos a arrancar el OpenOffice con los parámetros adecuados:

            # $OPENOFFICE_HOME/program/soffice -accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard &

   - Comprobamos que el proceso se ha ejecutado correctamente:
           
            # ps -ef | grep office | grep -v grep

Lo que nos debe dar como resultado que están corriendo dos procesos.

   - Comprobar que el puerto se ha levantado, y que OpenOffice está funcionando en modo Servidor.

            # netstat -anlp | grep 8100

Debe aparecer una línea, con un formato parecido al siguiente:

                tcp        0      0 127.0.0.1:2002              0.0.0.0:*                   LISTEN      18109/soffice.bin

Si no se muestra ninguna línea, significaría que el puerto no está levantado, por lo que OpenOffice no estaría funcionando de la manera requerida.


  1. Parada de OpenOffice

OpenOffice no dispone de ningún comando para parar su funcionamiento.
Por tanto, no nos queda más remedio que matar los procesos de OpenOffice que están corriendo:

            - Primero obtenemos el número de los procesos que están corriendo:

                        # ps -ef | grep office | grep -v grep
             
Esto nos dará como resultado los dos procesos de OpenOffice que ya comentamos en el arranque. A modo de ejemplo, mostramos una salida típica de este comando:

root     18099     1  0 Feb03 ?        00:00:00 /bin/sh /opt/openoffice.org2.4/program/soffice -accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager -nologo -headless -nofirststartwizard
root     18109 18099  0 Feb03 ?        00:00:22 /opt/openoffice.org2.4/program/soffice.bin -accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager -nologo -headless -nofirststartwizard

           
Debemos quedarnos con los números que aparecen en la segunda columna (a continuación de "root"). Esto números representan los PID de los procesos.
             
            - Una vez que tenemos estos dos números localizados (PID_1 y PID_2), procedemos a matar los procesos, con el siguiente comando:

                        # kill -9 [PID_1] [PID_2]

** OJO: Cuidado al obtener lod PID, pues si no son los correctos, se pueden matar otros procesos, lo que provocaría que algunos servicios no funcionasen, o que el sistema se volviese inestable. **



  1. Ejecutar OpenOffice como Servicio

Con el fin de que OpenOffice esté siempre disponible, para que cuando arranque la máquina OpenOffice se levante solo, y por comodidad para parar/arrancar el servicio de OpenOffice en modo Servidor, vamos a colocarlo como servicio.

Para ello, hemos creado un script llamado "OpenOfficeServidor", el cual se adjunta también junto con este manual.

            - Copiamos el archivo "OpenOfficeServidor" en '/etc/init.d'

                        # cp OpenOfficeServidor /etc/init.d

            - Lo editamos, para asegurarnos que la ruta donde hemos instalado es la correcta:

                        # vi OpenOfficeServidor

              Comprobamos la línea "BASEDIR", asegurándonos que la ruta que pone es donde realmente se encuentran instalados los archivos correspondiente al OpenOffice (por defecto     debe haberse instalado en /opt/openoffice.org2.4)

Nos aseguramos también que el puerto de escucha es el mismo con el que vamos a arrancarlo en modo servidor.
Por defecto en este manual y en el servicio, suponemos que vamos a levantar el puerto 2002. Si se va a utilizar otro puerto, debemos buscar este valor en el archivo 'OpenOfficeServidor' y modificarlo por el número adecuado.

Recordemos que hemos de asignar permiso de ejecución al script OpenOfficeServidor (chmod 755 OpenOfficeServidor).

Es necesario tener en cuenta que debe de existir la carpeta logs dentro de BASEDIR. En caso de no existir, debería de crearse:

# /etc/init.d # cd /opt/openoffice.org2.4/
# /opt/openoffice.org2.4 # mkdir logs

Asimismo, si a la hora de ejecutar el script da errors del tipo:

….^M

Nos está indicando que el script tiene retornos de DOS. Habríamos de convertirlo a formato UNIX. Para ello utilizaríamos el comando:

dos2unix <nombre fichero>

En el caso de Red Hat, sólo restaría ejecutar el chkconfig –list OpenOfficeServidor

[root@jaen59 openoffice.org2.4]# chkconfig --list OpenOfficeServidor
El servicio OpenOfficeServidor soporta chkconfig, pero no esta registrado (ejecute
'chkconfig -- añada OpenOfficeServidor')
[root@jaen59 openoffice.org2.4]# cd /etc/init.d/
[root@jaen59 init.d]# chkconfig --add OpenOfficeServidor
[root@jaen59 init.d]# chkconfig --list OpenOfficeServidor
OpenOfficeServidor      0:desactivado   1:desactivado   2:desactivado   3:activo        4:activo        5:activo        6:desactivado

En este momento ya lo tendríamos como servicio. Sólo debemos, para finalizar, arrancarlo.

Podemos ver la evolución del arranque en el directorio de logs, previamente definido.