Facebook Fanpage


sábado, 13 de julio de 2019

Cómo configurar un servidor FTP sobre CentOS 7

Instalación y puesta en marcha de vsftpd

Instalar vsftpd en CentOS 7 es sencillo, en esta versión todavía se sigue usando Yum, el gestor de paquetes del universo de Red Hat. Además vsftpd no tiene dependencias, así que no hay riesgos de alterar otras partes del sistema.
Para instalar vsftpd hay que ejecutar el siguiente comando, y luego aceptar la instalación sugerida:
yum install vsftpd
Instalado el servicio de FTP, tenemos una serie de comandos básicos para poder manejar el servicio. Hay que recordar que CentOS 7 utiliza systemd en vez de Upstart, así que los comandos para poder activar, reiniciar y accionar el servicio durante el arranque del sistema cambian.
Para iniciarlo:
systemctl start vsftpd.service
Para pararlo:
systemctl stop vsftpd.service
Para reiniciarlo:
systemctl restart vsftpd.service
Para que arranque junto con el sistema:
systemctl enable vsftpd.service
Para quitarlo del arranque del sistema:
systemctl disable vsftpd.service
El fichero de configuración de vsftpd es /etc/vsftpd/vsftpd.conf, Para los que anden perdidos, es un fichero llamado vsftpd.conf localizado en la subcarpeta /etc/vsftpd. En él solo vamos a tocar dos opciones.
anonymous_enable=YES
local_enable=YES

Abrir el puerto en el firewall

Abrir el puerto en el firewall es muy importante, ya que si no lo hacemos todos los intentos de conectarse al servidor de FTP serán rechazados. Para esto hay que abrir el puerto en el firewall y para que los efectos sean permanentes hay que ejecutar estos dos comandos.
Para abrir el puerto en el firewall:
firewall-cmd --permanent --add-service=ftp
Una vez abierto el puerto, hay que refrescar el firewall, para lo cual se necesita reiniciar su servicio:
systemctl restart firewalld.service

Configurar vsftpd para el acceso anónimo

Con figurar vsftpd para el acceso anónimo es bien sencillo, ya que esto lo hace por defecto, aunque se puede cambiar la opción de local_enable=YES a local_enable=NO en el fichero vsftpd.conf, para así asegurarnos de alguna manera que no se está ejecutando lo que no se debe, pero es un paso totalmente prescindible.
Para usar el acceso anónimo al FTP solo hay que iniciar el servicio como hemos indicado en el punto anterior, abrir un cliente de FTP, introducir la IP del servidor y conectarse.
Ahora surge la pregunta de cómo obtener la IP del servidor. En caso de el servidor esté en el mismo ordenador físico que el cliente la respuesta el clara, localhost o 127.0.0.1, siendo lo segundo más efectivo que lo primero. Sin embargo puede que el servidor haya sido instalado en una máquina virtual, o bien se disponga de máquinas extra y se haya montado una red con ordenadores conectados mediante cable o Wi-Fi. En esas situaciones solo queda usar este comando para obtener la IP en CentOS 7:
ip -d addr

Cambiar la carpeta del acceso anónimo

La carpeta por defecto del acceso anónimo al FTP es /var/ftp, sin embargo puede interesar cambiarla.
Para ello hay que dirigirse al fichero vsftpd.conf en /etc/vsftpd y añadir al final la siguiente opción, teniendo que poner de forma obligatoria la ruta absoluta:
anon_root=/rutaperonalizada
En /rutapersonalizada se pone la ruta que se crea conveniente, siempre y cuando no coincida con otra que resulta crítica para el sistema, siendo conveniente crear una a través de mkdir, dentro de la carpeta /home o /mnt, que no suelen contener nada crítico a nivel de sistema en su interior.
Cambiada ya la ruta del acceso anónimo, en teoría reiniciando el servicio ya se tendrían que aplicar los cambios, sin embargo al acceder al FTP vemos que no nos da permiso, y es que hemos topado con la segunda gran “barrera” de los sistemas basados en tecnologías Red Hat, SeLinux. En este tutorial vamos a ser un poco más sutiles y no se va a desactivar, teniendo que jugar con él un poco para que deje hacer aquello que pretendemos.
Para que SeLinux acepte la nueva carpeta del acceso anónimo hay que indicarle que es de acceso público, introduciendo el siguiente comando:
chcon -R -t public_content_t /rutapersonalizada
Introducido este comando ya debería de dejar acceder al nuevo directorio asignado para el acceso anónimo.

Configurar usuarios locales en el servidor

Para poder usar usuarios locales en el servidor, con su correspondiente contraseña, hay que tener los usuarios locales permitidos en vsftpd.conf, con la opción local_enable=YES. Si teníamos esta opción en NO anteriormente, hay que reiniciar el servicio para que los cambios surtan efecto.
Ahora queda crear el usuario, que no tiene ningún misterio para aquellos que acostumbran a crearlos desde la consola de comandos, ya que el proceso cambia poco:
useradd -g ftp -d /home/usuario usuario
Descomponemos la línea de comando:
  • useradd: Indica que queremos añadir un nuevo usuario.
  • -g: Indica el grupo al que va a pertenecer el usuario, en este caso ftp.
  • -d: Es el directorio del usuario, su home, en este caso /home/usuario.
  • usuario: Es el nombre del usuario.
El usuario ya está creado, sin embargo hay que asignarle una contraseña, para lo cual se utiliza el clásico passwd:
passwd usuario
Ahora queda indicarle a SeLinux que permita a los usuarios locales acceder su home a través del FTP:
setsebool -P ftp_home_dir on
Ahora solo queda abrir el cliente, poner la IP del servidor, el usuario y la contraseña y ya tendría que permitir el acceso, pudiendo subir contenidos, ya que se ha iniciado sesión con el usuario que es el propietario de la subcarpeta.

Hacer que un usuario local y el acceso anónimo compartan carpeta

El acceso anónimo, tal y como lo hemos mostrado, se muestra un poco corto, difícil de darle utilidad, al menos que se configure el acceso anónimo al FTP desde un ordenador de escritorio en producción, en el cual se puede copiar y pegar los contenidos al directorio a golpe de ratón. Sin embargo si quien tiene que suministrar los contenidos no usa su desktop como servidor de FTP, sino un ordenador aparte, empieza a ser complicado poder compartir contenidos, ya que el usuario local y el acceso anónimo no pueden compartir carpeta debido a que SeLinux lo impide.
Para poder compartir una carpeta de usuario con el acceso anónimo en primer lugar hay que ir al fichero vsftpd.conf y en la opción anon_root poner la ruta absoluta del directorio del usuario local, siguiendo  con este ejemplo:
anon_root=/home/usuario
Después hay que reiniciar el servicio y, además, indicar a SeLinux que permita acceso total en el servicio de FTP a través de la siguiente línea de comando:
setsebool allow_ftpd_full_access on
Después hay que dar permisos a los usuarios ajenos al propietario para que puedan ver los contenidos de su carpeta, ya que por defecto los sistemas de tecnología Red Hat utilizan una umask de 077 en la creación de las carpetas de usuario, así que solo el propietario tiene permisos sobre su carpeta personal. Para arreglar esto hay que otorgarle permisos de lectura y ejecución a los demás con chmod:
chmod -R 755 /home/usuario
Con esto ya el usuario local y el acceso anónimo ya comparten directorio, y lo que es subido por el usuario local puede ser descargado por las personas que acceden de forma anónima al FTP.




Fuente Original: www.muylinux.com

viernes, 7 de junio de 2019

Oracle Dumpdir – Import, Export y el uso de Directorios.

Oracle Dumpdir 

Import, Export y el uso de Directorios.


Cuando tenemos diferentes objetos de la base, ya sea una tabla, datos, etc y queremos transportalos a otra base, existe en oracle una utilidad llamada  expdp, con la cual nos llevaremos los datos y los objetos de nuestra base a otra donde tenga la misma estructura de datafiles y usuarios o no. El proceso generará un archivo con extención .dmp
Con impdp podremos importar datos facilmente generados mediante una exportación, que generalmente es un archivo .dmp
Cuando tenemos que exportar datos de la base o importarlos mediante impdp y expdp tenemos que tener en cuenta:
  1. Que exista un usuario con privilegios para realizar el export, en el caso de no ser sys o system.
  2. Que exista en la base de datos un DIRECTORY, con su relación en el SO.
  3. Que haya espacio suficiente en el filesystem.
Es que por ello que basados en los puntos anteriores daremos un breve ejemplo:
1. Creamos el Usuario y asignamos privilegios
SQL> create user DANADMIN
identified by XXXXXXX
default tablespace USERS;

SQL> grant connect, resource to DANADMIN;
SQL> SELECT * FROM DBA_DIRECTORIES;
SQL> alter user DANADMIN quota 100M on USERS;
Con esto podemos decir que tenemos el usuario creado, entonces ahora habria que darle los privilegios para que el usuario pueda exportar e importar los datos.
Como a mi me gusta tener todo en orden, en mi caso particular voy a crear un ROL y voy a Grantear ese ROL al Usuario.
Nos es preciso hacer esto, ya que podemos Grantear los permisos diractamente al Usuario, pero pienso que en el futuro podría existir otros usuarios con algunos con este tipo de privilegios.
1.1 Creamos el ROL.
SQL>create rol ROL_EXP_IMP;
1.2 Asignamos los permisos al ROL y luego al Usuario.
SQL> grant EXP_FULL_DATABASE to ROL_EXP_IMP;
SQL> grant IMP_FULL_DATABASE to ROL_EXP_IMP;
SQL> grant ROL_EXP_IMP to DANADMIN;
1.3 Consultamos si los cambios se aplicaron
SQL> SELECT grantee, granted_role, default_role
FROM dba_role_privs
WHERE grantee IN ('DANADMIN', 'PUBLIC') ORDER BY 1,2;
GRANTEE          GRANTED_ROLE          DEF
---------------- --------------------  ------
DANADMIN         CONNECT                YES
DANADMIN         RESOURCE               YES
DANADMIN         ROL_EXP_IMP            YES
2. Consultamos los directorios existentes.
SQL> col OWNWER format a20
SQL> col OWNWER format a10
SQL> col DIRECTORY_NAME format a20
SQL> col DIRECTORY_PATH format a65
SQL> select * from dba_directories;
OWNER          DIRECTORY_NAME         DIRECTORY_PATH
-------------- ---------------------- ----------------------------------------------------------------
SYS            DUMPDIR_MANU           /u03/rman_database_backup/manu
SYS            DATA_PUMP_DIR          /u01/app/oracle/product/10.2.0/db_asm/rdbms/log/
SYS            XMLDIR                 /u01/app/oracle/product/10.2.0/db_asm/demo/schema/order_entry/
SYS            DUMPDIR_T2             /u03/rman_database_backup
SYS            MEDIA_DIR              /u01/app/oracle/product/10.2.0/db_asm/demo/schema/product_media/
SYS            LOG_FILE_DIR           /u01/app/oracle/product/10.2.0/db_asm/demo/schema/log/
SYS            WORK_DIR               /ade/aime_10.2_lnx_push/oracle/work
SYS            DATA_FILE_DIR          /u01/app/oracle/product/10.2.0/db_asm/demo/schema/sales_history/
SYS            ADMIN_DIR              /ade/aime_10.2_lnx_push/oracle/md/admin
9 rows selected.
2.1 En el caso que el directorio que nos asignaron en el filesytem no esta en la lista, donde tenemos permisos de lectura escritura podriamos crearlo.
SQL> create directory DUMPDIR_DESA as '/u03/DUMPDIR/DESA';
Directory created.

SQL> grant read,write on directory DUMPDIR_DESA to DANADMIN;
Grant succeeded.
3. Podemos Realizar el export o el import.
expdp danadmin/passwd directory=DUMPDIR_DESA tables=JAM.COMPRAS_EXTERIOR dumpfile=COMPRAS_EXTERIOR_20090101
impdp danadmin/passwd directory=DUMPDIR_DESA dumpfile=COMPRAS_EXTERIOR_20090101 tab


Tomado de juanmercadoit

Solución a ORA-65096: invalid common user or role name en Oracle

Solución a ORA-65096: invalid common user or role name en Oracle


Hola a todos, hoy explicaré como solucionar un problema común en Oracle al crear un usuario.
Al crear un usuario en Oracle es normal encontrarnos con el error ORA-65096: invalid common user or role name.

Por ejemplo, si yo quiero crear el user1, lo haría así, pero me muestra el error.



Lo único que debemos hacer es colocar lo siguiente antes de crear el usuario:
alter session set "_ORACLE_SCRIPT"=true;
Aquí lo puedes ver:


Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Tomado de Discoduroderoer

jueves, 5 de abril de 2018

Asignar permisos correctos a carpetas 755 y ficheros 644 de forma masiva

Asignar permisos correctos a carpetas 755 y ficheros 644 de forma masiva

Por defecto, en el FTP de una web los permisos deben ser los siguientes: 755 a las carpetas y 644 a los ficheros.
Si esto no es así o has cometido el error de poner todo 777 en un momento desesperado y deseas volver a asignar los permisos iniciales, debes escribir este comando desde la ubicación de la carpeta www, public_html o bien httpocs (depende del panel de control de hosting que uses):

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Fuente: www.diagonalhosting.com

domingo, 16 de octubre de 2016

Publicar aplicación WAR/JSP/SERVLET/TOMCAT/MYSQL en servidor dedicado/vps cPanel

Publicar aplicación war con conexión a mysql.

1. Ingresar al cPanel
2. En la opción "Mysql Bases de datos", crear una base de datos, un usuario de base de datos y asignar el usuario a la base de datos.
2.1 (opcional) Si desea subir un backup a la nueva base de datos, ingresar desde cPanel a la opción "phpmyadmin", seleccionar al lado izquierdo la base de datos, y luego clic en la pestaña superior derecha importar y seleccionar el backup .sql deseado (La copia.sql no puede tener la instrucción create database, en dicho caso eliminar dicha línea).
3. En cPanel clic en la opción "administrador de archivos".
4. Seleccione  "Raíz web (public_html/www)", y en la parte inferior active la casilla "mostrar archivos ocultos" y clic en "Go".
5. En el administrador de archivos dentro de la carpeta public_html verificar si existe el archivo .htaccess (Si no existe, clic en la opción superior izquierda "Nuevo Archivo" y en nuevo nombre colocar: .htacccess )
6. Clic derecho sobre el archivo .htaccess , seleccionar la opción "editar/edit" y adicionar las siguientes líneas de código, clic en "Guardar Cambios" y luego en "Cerrar":

SetHandler jakarta-servlet
SetEnv JK_WORKER_NAME ajp13

7. Crear un directorio dentro de public_html para la aplicación, con la opción superior izquierda "+ Carpeta (Nueva Carpeta)", por ejemplo: prueba.

8. Editar su proyecto netbeans desde su PC, actualizando la cadena de conexión por los creados en el punto #2 de este articulo (base, usuario y clave), y generar el archivo .war desde Netbeans.

Nota: Ver cómo crear una aplicación JSP compatible con cPanel y generar el archivo .war: 

9. Ingresar dentro del nuevo directorio public_html/prueba/ , clic en la opción superior "Cargar" y clic en "Examinar" para subir el archivo WAR.
10. Una vez finalizada la subida, cerrar la ventana de carga o clic en "Volver a /home/usuario/public_html/prueba"
11. Clic en el botón superior "Actualizar", clic derecho sobre el archivo .war subido y clic en la opción "renombrar / rename", cambiarle solamente la extensión de .war a .zip en minúscula.
12. Clic derecho sobre el archivo renombrado (proyecto.zip) y seleccionar la opción "Extract / Extraer". Al terminar de descomprimir puede eliminar el archivo comprimido.
13. Listo, la aplicación fue publicada, puede ingresar en http://www.sudominioregistrado.com/prueba/prueba.jsp para visualizarla (Teniendo en cuenta cambiar el nombre de su dominio, subdirectorio y nombre del archivo a ejecutar).
Fuente e información adicional:
https://documentation.cpanel.net/display/EA/Introduction+to+Tomcat
https://documentation.cpanel.net/display/CKB/How+to+Deploy+Java+Applications
información tomada de https://soporte.colombiahosting.com.co/Knowledgebase/Article/View/101/0/publicar-aplicacion-warjspservlettomcatmysql-en-servidor-dedicadovps-cpanel

miércoles, 3 de diciembre de 2014

Generar jar con NetBeans incluyendo Bibliotecas Externas Java


Hola amigos, después de buscar un poco acerca de como incluir las librerías que utilizamos en nuestros proyectos Java en Netbeans, encontré que solo tenemos que insertar el siguiente fragmento de código en nuestro archivo build.xml.

Debemos insertar el Siguiente Código antes de la etiqueta </project> 

Añadimos y modificamos "NOMBRE_DE_ARCHIVO", por el nombre nuevo del .JAR resultante, ya que se crearán dos archivos .JAR, el normal que funciona sin las bibliotecas pero no se crea la carpeta lib con ninguna librería, y el nuevo .JAR con el nombre dado que funciona sin la carpeta lib porque ya tiene incluido las librerías.

<target name="-post-jar">
      <property name="store.jar.name" value="NOMBRE_DE_ARCHIVO"/>
    
      <property name="store.dir" value="dist"/>
      <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
    
      <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
    
      <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
         <zipgroupfileset dir="dist" includes="*.jar"/>
         <zipgroupfileset dir="dist/lib" includes="*.jar"/>
    
         <manifest>
            <attribute name="Main-Class" value="${main.class}"/>
         </manifest>
      </jar>
    
      <zip destfile="${store.jar}">
         <zipfileset src="${store.dir}/temp_final.jar"
         excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
      </zip>
    
      <delete file="${store.dir}/temp_final.jar"/>
      <delete dir="${store.dir}/lib"/>
      <delete file="${store.dir}/README.TXT"/>
   </target>


Si utilizamos este método todo lo necesario para nuestro programa ya estaria incluido en el archivo .JAR

Fuente: http://bazarinformatica.bazzarium.com/viewtopic.php?f=19&t=252


sábado, 21 de septiembre de 2013

Subir imagen al servidor con Yii Framework y eliminar imagenes del servidor

En esta ocacion les traigo la manera de como subir imagenes al servidor y una ves subidas las imagenes como eliminarlas del servidor, este ejemplo es la continuacion del ejemplo anterior pero mejorado, asi que sin mas aqui esta el codigo.


Vista:
archivo _form.php

Código PHP:
..//array de opciones del form...'htmlOptions' => array(
        
'enctype' => 'multipart/form-data',
    ),
...
..
//Otros Elementos..
..
<
div class="row">
        <?
php echo $form->labelEx($model,'imagen'); ?>        <?php echo CHtml::activeFileField($model'imagen'); ?>  //con esto levantamos la imagen
        <?php echo $form->error($model,'imagen'); ?></div>
<?php if($model->isNewRecord!='1'){ ?><div class="row">
     <?php echo CHtml::image(Yii::app()->request->baseUrl.'/banner/'.$model->imagen,"imagen",array("width"=>200)); ?>  // La Imagen se muestra aquí si la página es la página de actualización
</div>
 <?php } ?>
 
..
..
Otros elementos
..
.. 
Modelo:
solo es necesario agregar una linea en el metodo rules() en el Modelo, de la siguiente manera:

Código PHP:
array('imagen''file','types'=>'jpg, gif, png''allowEmpty'=>true'on'=>'update'), 
array('titulo, imagen''length''max'=>255'on'=>'insert,update'), 
Controladores
Código PHP:
    public function actionCreate()
    {
        
$model=new Banner;

        
// Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        
if(isset($_POST['Banner']))
        {
            
$rnd rand(0,9999);  // Generamos un numero aleatorio entre 0-9999
            
$model->attributes=$_POST['Banner'];

            
$subiendoImagen=CUploadedFile::getInstance($model,'imagen');
            
$imgNombre "{$rnd}-{$subiendoImagen}";  // numero aleatorio  + nombre de archivo
            
$model->imagen $imgNombre;


            if(
$model->save()){
                
$subiendoImagen->saveAs(Yii::app()->basePath.'/../images/banner/'.$imgNombre);
                
$this->redirect(array('view','id'=>$model->id));
            }
        }
        
$this->render('create',array(
            
'model'=>$model,
        ));
    } 
Código PHP:
    public function actionUpdate($id)
    {
        
$model=$this->loadModel($id);

        if(isset(
$_POST['Banner']))
        {
            
$rnd rand(0,9999);  // Generamos un numero aleatorio entre 0-9999
            
$_POST['Banner']['imagen'] = $model->imagen;
            
$model->attributes=$_POST['Banner'];

            
$subiendoImagen=CUploadedFile::getInstance($model,'imagen');
            
$imgNombre "{$rnd}-{$subiendoImagen}";  // numero aleatorio  + nombre de archivo
            
$model->imagen $imgNombre;

            if(
$model->save()){
                if(!empty(
$subiendoImagen)){
                    
$subiendoImagen->saveAs(Yii::app()->basePath.'/../images/banner/'.$imgNombre);
                }
                
$this->redirect(array('view','id'=>$model->id));
            }
        }
        
$this->render('update',array(
            
'model'=>$model,
        ));
    } 




De paso, para borrar los archivos del servidor lo conseguí haciendo lo siguiente, (seguro no es la mejor forma pero funciona)

Código PHP:
    public function actionDelete($id)
    {
        
$model $this->loadModel($id);
        
unlink(Yii::app()->basePath.'/../images/banner/'.$model->imagen);
        
$this->loadModel($id)->delete();

        
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
        
if(!isset($_GET['ajax']))
            
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
    } 





Fuente: Aqui