elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 75
71  Programación / Desarrollo Web / configuración correcta de apache virtual hosts (name based) en: 14 Agosto 2016, 06:40 am
Estoy tratando de configurar manualmente los vhosts para varias páginas, aunque de momento estoy trabajando con un solo dominio, la idea es ir poniendo más. De momento estoy intentando configurar un solo dominio y varios subdominios.

La configuración vhosts la he repartido en varios archivos especificos para cada dominio/subdominio, así puedo activarlos o desactivarlos facilmente (tal y como recomiendan en la guia de arch linux):

httpd.conf
Código
  1. # Virtual hosts
  2. Include conf/extra/httpd-vhosts.conf
  3. # Available Vhosts
  4. Include conf/vhosts/example.dom
  5. Include conf/vhosts/sub1.example.dom
  6. Include conf/vhosts/sub2.example.dom

El archivo de configuración principal lo dejo para el bloque vhosts por defecto, el que se use cuando se accede al servidor mediante la ip pública o los nameservers (ns1.example.com), etc... Aquí estoy teniendo problemas y necesito saber como configurar correctamente el bloque vhosts default.

Código
  1. <VirtualHost xxx.xxx.xxx.xxx:*>
  2.    DocumentRoot "/srv/http/default"
  3.    ServerName localhost
  4. </VirtualHost>

o

Código
  1. <VirtualHost *>
  2.    DocumentRoot "/srv/http/default"
  3.    ServerName localhost
  4. </VirtualHost>

Si uso el primero se muestra siempre (da igual que pongas dominio/subdominio) el main document root de apche, que en arch linux es /srv/http y claro... puedes navegar por todas las carpetas que tengas (incluso desactivando -Indexes puedes usar la barra de navegación para averiguar nombres...).

Si uso el segundo se muestra siempre la carpeta default.

He probado quitando el bloque virtualhost default (comentando el archivo en httpd.conf) y lo mismo, se ignoran los bloques virtualhost de cada archivo, y siempre se muestra el main document root.

Código
  1. # conf/vhosts/domain.dom
  2. <VirtualHost domain:80>
  3.    ### Igual que abajo pero sin la configuración SSL
  4. </VirtualHost>
  5.  
  6. <VirtualHost domain.com:443>
  7.    ServerAdmin webmaster@domain.com
  8.    DocumentRoot "/srv/http/domain.com/www"
  9.    ServerName domain.com:443
  10.    ServerAlias www.domain.com:443
  11.    Protocols h2 h2c
  12.  
  13.    <Directory "/srv/http/domain.com/www">
  14.        Require all granted
  15.  
  16.        <IfModule mod_rewrite.c>
  17.            RewriteEngine On
  18.            RewriteBase /
  19.            RewriteCond %{REQUEST_FILENAME} !-d
  20.            RewriteCond %{REQUEST_FILENAME} !-f
  21.            RewriteRule ^index\.php$ - [L]
  22.            RewriteRule . index.php [L]
  23.        </IfModule>
  24.    </Directory>
  25.  
  26.    <IfModule dir_module>
  27.        DirectoryIndex index.php
  28.    </IfModule>
  29.  
  30.    #SSLEngine on
  31.    #SSLCertificateFile "/etc/httpd/conf/apache.crt"
  32.    #SSLCertificateKeyFile "/etc/httpd/conf/apache.key"
  33.    ErrorLog "/var/log/httpd/domain.com-error_log"
  34.    CustomLog "/var/log/httpd/domain.com-access_log" common
  35. </VirtualHost>

Esta configuración funciona en mi ordenador personal, usando el sistema operativo Manjaro (que es Arch Linux) y recuerdo que funcionaba bien. Ahora estoy configurando un servidor ARM de scaleway y estoy usando arch linux.

¿Como puedo configurar correctamente los virtual hosts para que haya un bloque que muestre una página por defecto cuando ningún nombre de dominio/subdominio coincida con los que tengo?

Gracias.
72  Sistemas Operativos / GNU/Linux / Re: apache virtualhosts no funcionan (Failed to start Network Name Resolution) en: 10 Agosto 2016, 05:19 am
Solucionado con la ultima versión de systemd (231) https://github.com/systemd/systemd/issues/3484#issuecomment-239595447
73  Sistemas Operativos / GNU/Linux / Re: configuración apache y virtualhosts no funciona en: 3 Agosto 2016, 16:53 pm
Vale, es posible que sea un problema con un servicio del sistema (systemd-resolved) que no se incia correctamente:

Citar
# systemctl status systemd-resolved.service
● systemd-resolved.service - Network Name Resolution
Loaded: loaded (/etc/systemd/system/systemd-resolved.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit-hit) since Tue 2016-08-02 23:39:01 UTC; 1h 5min ago
Docs: man:systemd-resolved.service(8)
Process: 3455 ExecStart=/usr/lib/systemd/systemd-resolved (code=exited, status=1/FAILURE)
Main PID: 3455 (code=exited, status=1/FAILURE)
Status: "Shutting down..."

Aug 02 23:39:01 scw-28a908 systemd[1]: Failed to start Network Name Resolution.
Aug 02 23:39:01 scw-28a908 systemd[1]: systemd-resolved.service: Unit entered failed state.
Aug 02 23:39:01 scw-28a908 systemd[1]: systemd-resolved.service: Failed with result 'exit-code'.
Aug 02 23:39:01 scw-28a908 systemd[1]: systemd-resolved.service: Service has no hold-off time, scheduling restart.
Aug 02 23:39:01 scw-28a908 systemd[1]: Stopped Network Name Resolution.
Aug 02 23:39:01 scw-28a908 systemd[1]: systemd-resolved.service: Start request repeated too quickly.
Aug 02 23:39:01 scw-28a908 systemd[1]: Failed to start Network Name Resolution.
Aug 02 23:39:01 scw-28a908 systemd[1]: systemd-resolved.service: Unit entered failed state.
Aug 02 23:39:01 scw-28a908 systemd[1]: systemd-resolved.service: Failed with result 'start-limit-hit'.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-- Subject: Unit systemd-resolved.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/li ... temd-devel
--
-- Unit systemd-resolved.service has begun starting up.
Aug 03 00:50:21 scw-28a908 systemd-resolved[3752]: Failed to increase capabilities: Operation not permitted
Aug 03 00:50:21 scw-28a908 systemd[1]: systemd-resolved.service: Main process exited, code=exited, status=1/FAILURE
Aug 03 00:50:21 scw-28a908 systemd[1]: Failed to start Network Name Resolution.
-- Subject: Unit systemd-resolved.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/li ... temd-devel
--
-- Unit systemd-resolved.service has failed.
--
-- The result is failed.
Aug 03 00:50:21 scw-28a908 systemd[1]: systemd-resolved.service: Unit entered failed state.
Aug 03 00:50:21 scw-28a908 systemd[1]: systemd-resolved.service: Failed with result 'exit-code'.
Aug 03 00:50:21 scw-28a908 systemd[1]: systemd-resolved.service: Service has no hold-off time, scheduling restart.
Aug 03 00:50:21 scw-28a908 systemd[1]: Stopped Network Name Resolution.
-- Subject: Unit systemd-resolved.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/li ... temd-devel
--
-- Unit systemd-resolved.service has finished shutting down.
Aug 03 00:50:21 scw-28a908 systemd[1]: Starting Network Name Resolution...
-- Subject: Unit systemd-resolved.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/li ... temd-devel
--
-- Unit systemd-resolved.service has begun starting up.
Aug 03 00:50:21 scw-28a908 systemd-resolved[3756]: Failed to increase capabilities: Operation not permitted
Aug 03 00:50:21 scw-28a908 systemd[1]: systemd-resolved.service: Main process exited, code=exited, status=1/FAILURE
Aug 03 00:50:21 scw-28a908 systemd[1]: Failed to start Network Name Resolution.

El problema empezó justo despues actualizar el sistema por primera vez, la imagen (iso) tiene unos 2 meses creo, y claro habian varias actualizaciones. Fue reiniciar y empezar los problemas.

¿Alguna idea por qué ocurre esto?

Gracias.
74  Programación / PHP / Re: Cómo crear en php un verificador de varios emails básico? en: 3 Agosto 2016, 04:56 am
Por supuesto, para esto usaremos un if que compruebe si el email es correcto, y si no lo es lo agregaremos a otro array:

Código
  1. $emails     = trim($_POST['emails']);
  2. $array      = explode(PHP_EOL, $emails);
  3. $validated  = $invalid = [];
  4.  
  5. foreach ($array as $email) {
  6.  
  7.    // si el email es válido se añade al array validated
  8.    if ( filter_var($email, FILTER_VALIDATE_EMAIL) ) {
  9.  
  10.        $validated[] = $email;
  11.  
  12.    }
  13.  
  14.    // si no, se añade al array invalid
  15.    else {
  16.  
  17.        $invalid[] = $email;
  18.  
  19.    }
  20. }
  21.  
  22. // se eliminan los duplicados
  23. $emails = array_unique($validated);

Ahora para mostrar los resultados, lo que se hace hoy en dia es usar ajax para automaticamente, sin recargar la página, mostrar los válidos y los no válidos. Esto es realmente sencillo usando jQuery, busca aquí en el foro que tienes muchos ejemplos, o en la documentación: https://api.jquery.com/jquery.post/ Simplemente usando la función $.post (para enviar los emails) y uno de sus callbacks .done() (para actualizar el DOM con el resultado).
75  Sistemas Operativos / GNU/Linux / apache virtualhosts no funcionan (Failed to start Network Name Resolution) en: 2 Agosto 2016, 00:53 am
Hola, estoy intentando configurar un servidor web apache con virtualhosts pero la configuración que tengo no funciona correctamente.

Estoy en arch linux por lo que el document root es /srv/http. He creado varios archivos para cada dominio/subdominios (vhost) para tener la configuración bien organizada y poder activar/desactivar facilmente cada uno desde el httpd.conf. El archivo conf/extra/httpd-vhosts.conf solo tiene un bloque * con un documentroot a /srv/http/default (por si accedes usando los name servers que se muestre la página default).

El problema es que todos los dominios/subdominios llevan al document root de apache, que es /srv/http, en lugar del document root del dominio, especificado en cada bloque <VirtualHosts> correspondiente. Por lo que cuando accedo con el dominio o subdominio, se muestra /srv/http y puedo navegar por todas las carpetas de cada dominio/subdominio e incluso las carpetas que deberían ser privadas, como framework o files (desde la barra escribiendo los nombres).

La configuración de apache importante es la siguiente:

Código
  1. DocumentRoot "/srv/http"
  2. <Directory "/srv/http">
  3.    Options -Indexes +FollowSymLinks
  4.  
  5.    AllowOverride None
  6.  
  7.    Require all granted
  8. </Directory>
  9.  
  10. ...
  11.  
  12. # Virtual hosts
  13. Include conf/extra/httpd-vhosts.conf
  14. # Enabled Vhosts
  15. Include conf/vhosts/domain.dom
  16. Include conf/vhosts/sub1.domain.dom
  17. Include conf/vhosts/sub2.domain.dom

Si comento #Require all granted o lo cambio a all denied da error 403... ¿como hago para que no sea accesible el documentroot mediante el navegador?

Asi són los bloques <VirtualHosts>, uno para el puerto 80 (http) y otro exactamente igual, incluyendo la configuración SSL, para el puerto 443 (https):

Código
  1. # conf/extra/httpd-vhosts.conf
  2. <VirtualHost *>
  3.    ServerName default.localhost
  4.    DocumentRoot "/srv/http/default"
  5. </VirtualHost>
  6.  
  7. # conf/vhosts/domain.dom
  8. <VirtualHost domain:80>
  9.    ### Igual que abajo pero sin la configuración SSL
  10. </VirtualHost>
  11.  
  12. <VirtualHost domain.com:443>
  13.    ServerAdmin webmaster@domain.com
  14.    DocumentRoot "/srv/http/domain.com/www"
  15.    ServerName domain.com:443
  16.    ServerAlias www.domain.com:443
  17.    Protocols h2 h2c
  18.  
  19.    <Directory "/srv/http/domain.com/www">
  20.        Require all granted
  21.  
  22.        <IfModule mod_rewrite.c>
  23.            RewriteEngine On
  24.            RewriteBase /
  25.            RewriteCond %{REQUEST_FILENAME} !-d
  26.            RewriteCond %{REQUEST_FILENAME} !-f
  27.            RewriteRule ^index\.php$ - [L]
  28.            RewriteRule . index.php [L]
  29.        </IfModule>
  30.    </Directory>
  31.  
  32.    <IfModule dir_module>
  33.        DirectoryIndex index.php
  34.    </IfModule>
  35.  
  36.    #SSLEngine on
  37.    #SSLCertificateFile "/etc/httpd/conf/apache.crt"
  38.    #SSLCertificateKeyFile "/etc/httpd/conf/apache.key"
  39.    ErrorLog "/var/log/httpd/domain.com-error_log"
  40.    CustomLog "/var/log/httpd/domain.com-access_log" common
  41. </VirtualHost>

Gracias.
76  Programación / Bases de Datos / InnoDB (transactions) o MyIsam (selects) en: 1 Agosto 2016, 20:19 pm
Hola, tengo que elegir que motor usar para una tabla que va recibir muchos selects, pero que necesita transacciones para hacer rollback...

La tabla almacena datos que los usuarios introducen y por lo tanto necesita hacer rollback por si surge algún problema a la hora de ingresar en otra tabla asociada. Pero principalmente va a recibir muchos selects (acompañados de JOIN).

Mi pregunta es, ¿que motor uso en este caso?

Al principio no habria problema con usar InnoDB, pero en cuanto empiece a llenarse la tabla y hayan más de 10.000 records el rendimiento podria disminuir enormemente... ¿que hago? ¿o son pocos 10.000? (a menos que tenga mucho exito la web, no creo que hayan más...)

Gracias.
77  Comunicaciones / Redes / dns para hosting y dominio web en: 29 Julio 2016, 15:12 pm
Hola, estoy configurando un servidor y un dominio para poner una web online y posiblemente otros servicios.

He estado leyendo algunas guias pero me quedan unas dudas especificas sobre dns y ns:

1. El dominio principal o FQDN, ¿puede ser cualquiera? ¿O tiene que ser el de la web principal?

2. El hosting en el que estoy no tiene nameservers, tiene que ser la IP que yo reserve para usar en el servidor. Por lo que es necesario crear nameservers customs, usando el dominio principal. Supongo que si voy a poner más webs sería lo más facil, ¿no? Usar mis propios nameservers para otros dominios.

3. ¿Mis nameservers tienen que tener distintas IPs? ¿O puedo crear 2: ns1 y ns2; y apuntarlos a la misma IP (la de mi servidor)? Creo que no se pueden asignar más de una IP al mismo servidor (por lo menos en el hosting que estoy no veo la opción, solo hay una lista para elegir una).

Hay una guia (un poco antigua pero creo que serviria igual) de 1and1 (donde tengo el dominio) y el proceso es muy facil: crear 2 subdominios y cambiarles el A-Record a la IP del servidor. Pero aquí veo dos problemas:

1. En la guia dice que tienen que ser IPs distintas, y

2. Actualmente tengo el dominio configurado a dos dns (que he creado usando el servicio gratuito no-ip.com, ambos apuntan a la IP de mi servidor), en lugar de usar los de 1and1. Cuando intento cambiar la IP de los nameservers me dice que el dominio princpial tiene que tener la configuración de dns de 1and1 en lugar de custom.

Por lo que mi duda aquí sería: Para configurar mis dos subdominios (para usarlos como nameservers), la configuración dns del dominio tiene que ser la de 1and1 (para poder cambiar el A-Record), pero luego la guia dice que cambie la configuración dns a custom y use los que acaba de crear, entonces ¿se desconfigurarian los subdominios?

Esta es la guia en cuestión: https://kb.iweb.com/entries/21788473-Creating-Private-Nameservers-at-1and1-com

Finalmente, los subdominios y otros dominios, ¿se pueden crear directamente desde el hosting? Por ejemplo, yo estoy usando VestaCP y tiene configuración DNS, por lo que ¿todo lo demás podría configurarlo desde ahí usando mis nameservers?

Gracias.
78  Programación / PHP / Re: Unzip "al aire" en: 22 Julio 2016, 19:43 pm
Eso suena a trabajo de las excepciones PHP. Con los bloques try y catch (opcionalmente finally en php 7 o era 5.6?) podrás manejar las excepciones que hayas definido (cuando algo no sale como quieres).

Sería algo así:

- Primero la función que elimina el directorio y todo lo que contiene (esto serviria para muchas otras cosas, asi que lo puedes poner en tu clase functions, o como la llames):

Código
  1. // Recursively remove the directory with all its content
  2. public function removeDirectory($path) {
  3.  
  4.    $exit = FALSE;
  5.  
  6.    if ( FALSE !== $path && is_dir($path) ) {
  7.  
  8.        $files = new FilesystemIterator($path, FilesystemIterator::SKIP_DOTS);
  9.  
  10.        foreach ($files as $file) {
  11.            (is_dir($file)) ? $this->removeDirectory($file) : unlink($file);
  12.        }
  13.  
  14.        $exit = rmdir($path);
  15.    }
  16.  
  17.    return $exit;
  18. }

- Ahora el script en sí, lo que querias hacer:

Código
  1. // Supongo que esto lo tendrás en tu index.php (donde declaras e inicializas las clases)
  2. require('functions.php');
  3. $functions = new functions();
  4.  
  5. // aquí generas el nombre aleatorio y creas la carpeta
  6. $folder = '';
  7. if (!mkdir($folder)) {
  8.    // no se pudo crear la carpeta
  9. }
  10.  
  11. // Para comprobar que existe usamos la función realpath()
  12. // que devolverá FALSE si no existe, o la ruta si existe
  13. $path = realpath('/home/user/website.com/' . $folder);
  14.  
  15. if ( FALSE !== $path ) {
  16.  
  17.    // Ahora es donde entra try/catch/finally en acción
  18.    try {
  19.  
  20.        // aquí puedes hacer la operación con total seguridad
  21.        // ya que si falla, se ejecutará lo que haya en catch/finally {}
  22.  
  23.        // cualquier error (else if o $mysqli->error) lo puedes manejar con
  24.        throw new Exception('mensaje de error con variable: ' $variable);
  25.  
  26.        // por ejemplo
  27.        if ($x == $y) {
  28.        } else throw new Exception('x (' . $x . ' no es igual a y (' . $y . ')');
  29.  
  30.    } catch (Exception $e) {
  31.  
  32.        // aquí puedes loguear que ha habido un error
  33.        // el mensaje de error se encuentra dentro de $e
  34.        // viene bien para debuguear y estar pendiente de los listillos
  35.  
  36.    } finally {
  37.  
  38.        // finalmente se limpian los archivos temporales
  39.        // esto se ejecutará siempre despues de lo que hay en try, y en caso de fallar, lo de catch
  40.        $functions->removeDirectory($path);
  41.  
  42.    }
  43.  
  44. }

Sencillo, ¿no?  :)

Esto es más que nada para que te hagas una idea de como funciona, la idea básica es esa, tener 3 bloques, dos que se ejecutan siempre (primero y ultimo) y otro que se ejecuta solo en caso de que el primero falle.

Pero no estamos hablando de errores de php, si no errores de los distintos escenarios, que no son problema del código, si no del input de los usuarios y de las distintas variables. Los errores propios de php deben ser solucionados antes de producción.
79  Programación / Desarrollo Web / Re: configuración de apache sin panel de control (entorno de producción seguro) en: 20 Julio 2016, 23:19 pm
Buena guia, pero está un poco desfasada  :-\ Muchos de los problemas actuales no existian en aquel entonces (2006).

De todas formas explica cosas que no sabia, gracias.
80  Programación / Desarrollo Web / configuración de apache sin panel de control (entorno de producción seguro) en: 20 Julio 2016, 21:39 pm
Siempre he usado paneles de control, tipo cpanel, kloxo, etc... Pero me gustaría aprender a hacerlo manualmente y tengo un par de dudas que no consigo encontrar (o entender) en las guias existentes.

Primero decir que voy a usar ultima versión de todo, incluido el protocolo http/2. El servidor sería el típico LAMP. Solo que en lugar de mysql, mariadb.

El objetivo principal sería tener en cuenta cuestiones de seguridad importantes (y menos importantes también), como famosos problemas de openssl (arreglados en la ultima versión, por suerte) con los certificados de seguridad (esta sería la parte a configurar, si no me equivoco sería algo como "SSLProtocol -all +TLSv1.2, ¿no?).

Para ello tengo como referencia la guia LAMP de arch linux (que es de las más completas, con referencias a cuestiones de seguridad más importantes, como la de sslv3, si alguien conoce alguna más a tener en cuenta, agradeceria que la mencionara (opcionalmente con la solución)).

Una de mis primeras dudas sería el uso de mod_rewrite en los .htaccess. He estado leyendo y al parecer es algo recomendado y no recomendado. Algunos afirman que no se debe usar (en la propia web se aconseja usar como ultimo recurso) y otros explican que no hay razón para no usarlo y que además tiene sus ventajas: http://askubuntu.com/a/222880.

No voy a usar un hosting compartido ni un VPS, voy a contratar un baremetal (dedicado) de scaleway y voy a instalar/configurar todo yo mismo, por lo que no tendría razón para usarlo más que por las posibles ventajas.

Citar
Apache2 reads all config files in /etc/apache2/conf.d/. This can be good for any general configuration directives you want to add that don't relate to any particular virtual host. Just add a new file there and put config into it.

Creo que prefiero configurarlo ahí y desactivar htaccess, pero esa ruta es especifica de ubuntu creo, en arch linux es /etc/httpd/conf, ¿es ahí dentro donde puedo crear mis propios archivos de configuración? Más que nada por si alguien consigue acceder al document root mediante php, que no pueda cambiar ninguna configuración local. ¿Tiene sentido o de todas maneras seguiria habiendo riesgo? Como cambiar configuraciones desde php (la cuestión sería como configurarlo para conseguir entornos de producción seguros).

Actualmente uso htaccess con una configuración u otra dependiendo del dominio/subdominio: Por ejemplo, la web principal (y algunos subdominios) redirige todo al index.php, que sería el router de la web y usando php, incluyo archivos dependiendo de la url (y sus parametros get). Pero en el subdominio static, donde almaceno los archivos incluidos estáticos (como javascripts, css e imágenes) he deshabilitado php y aparte configuro CORS para que el dominio principal y otro subdominio puedan cargar contenido. ¿Todo esto podría hacerse desde la configuración interna en /etc/httpd/conf? ¿Mejoraria de alguna manera la seguridad?

Otra cosa que tiene un poquito que ver con la seguridad es, la redirección de http a https automática. En kloxo hay una opción para forzar la redirección, pero no veia nada en el .htaccess, por lo que debe hacer en alguna otra parte, ¿será en alguna configuración interna de apache? La redirección automatica de no-www a www sería en el mismo archivo, ¿no?

Gracias!
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 75
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines