¿Debo vincular mi directorio / var / www a mi casa?

20

Acabo de instalar Ubuntu Server 10.04 con una configuración LAMP. Quiero alojar un sitio web allí, pero no estoy seguro de cuál es la mejor manera de obtener / editar mis archivos en el servidor. Buscar en Google ofrece muchas opciones, pero no estoy seguro de cuál es el mejor.

A menos que haya una mejor opción, me gustaría crear las páginas en otra PC (Windows o Linux) y usar SFTP para sincronizar los cambios en el servidor, pero ¿hago esto en una carpeta enlazada en ~ / o cambiando los derechos? en la carpeta / var / www /?

Craig
fuente
55
Razones por las que / var / ww / no debería tener chmod 777 - Solo para aclararlo.
Marco Ceppi

Respuestas:

21

Cada configuración es diferente. Para mí, tengo muchos usuarios en un servidor que cada uno aloja sitios web; para usted, es probable que no necesite crear más de un usuario en el sistema. Sin embargo, si administra varios sitios web en este servidor, esta configuración lo ayudará a administrar, configurar y depurar cada dominio de una manera más fácil que una configuración LAMP estándar. Para que eso suceda, utilizo varios dispositivos de Apache para evitar errores de permisos.

Primero, esta es la estructura del documento que uso:

/home/[USER]/domains/[DOMAIN]/html
/home/[USER]/domains/[DOMAIN]/logs

Cada usuario tiene su propia cuenta con una carpeta de dominios (que agregué para /etc/skelque se cree cada vez. Cada dominio tiene su propia carpeta en la domainscarpeta con una htmlcarpeta (tengo mis razones para esto, principalmente para que los dominios puedan tener archivos web fuera) del ámbito público). Siéntase libre de modificar esta estructura como mejor le parezca, solo recuerde llevar esos cambios a lo largo de esta publicación.

En segundo lugar, alojo muchos sitios PHP, así que uso suPHP en mi configuración. Por defecto, el paquete de archivo estándar no tiene habilitado el indicador de compilación adecuado, lo que da como resultado una versión menos segura de suPHP. Hice mi propio paquete suPHP que utilizo en mis servidores, las instrucciones de instalación a continuación. suPHP le permite definir a qué scripts PHP de usuario se deben ejecutar (entre otras cosas, incluyendo: php.ini personalizado para cada sitio, etc.). También habilito suExec para Apache, eliminando aún más la necesidad de tener propiedad del usuario www-data (un usuario que desprecio).

Primero asegúrese de tener Apache y todos los demás servicios instalados en su servidor. Asegúrese de que al menos estén trabajando. Después de eso, recomiendo instalar suphp-common y el módulo libapache2-mod-suphp requerido (Más información: ¿Qué son los PPA y cómo los uso? ). Luego, después de instalarlos, active suPHP y suexec usandoa2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Luego vendrá el archivo de configuración. He creado varias herramientas que generan automáticamente los archivos de configuración cada vez que agrego un nuevo sitio; Sin embargo, aquí está la plantilla básica que uso:

<VirtualHost *:80>
    ServerAdmin [EMAIL]
    ServerName [DOMAIN]
    ServerAlias www.[DOMAIN] [DOMAIN]
    DocumentRoot /home/[USER]/domains/[DOMAIN]/html

    <Directory /home/[USER]/domains/[DOMAIN]>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
    </Directory>

    ErrorLog /home/[USER]/domains/[DOMAIN]/logs/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /home/[USER]/domains/[DOMAIN]/logs/access.log combined

    SuexecUserGroup [USER] [USER]

    suPHP_UserGroup [USER] [USER]
    suPHP_ConfigPath /home/[USER]/etc
</VirtualHost>

Esto configura el registro para ese dominio, la raíz del documento y todas las demás necesidades básicas para que el dominio funcione. Coloco estos archivos en /etc/apache2/sites-available/nombres típicamente [USER]-[DOMAIN]y los habilito / deshabilito a2ensiteasí:

sudo a2ensite [USER]-[DOMAIN]
sudo a2dissite [USER]-[DOMAIN]

Después de cada modificación en los archivos de configuración, Apache deberá recargarse con

sudo /etc/init.d/apache reload

Si bien puede parecer mucho configurar la cantidad de flexibilidad obtenida, en mi opinión, supera con creces el tiempo de configuración. Aunque solo necesita un servidor web de un solo usuario, en el futuro si alguna vez quisiera algo más que un servidor web de un solo usuario, necesitaría realizar más acciones (o simplemente abandonar la seguridad por completo) para hacerlo.

Marco Ceppi
fuente
+1 para cada configuración es diferente y usa cuentas de usuario separadas para cada sitio web
Lekensteyn
1
Esto es genial para un sistema LAMP multiusuario, pero la pregunta era sobre un sistema LAMP de un solo usuario, en cuyo caso esta respuesta es exagerada. :)
Kees Cook
@Kees aplica el mismo principio, solo que no tiene que hacer más usuarios. De esta manera, nunca tendrá que preocuparse por los problemas de permisos o usuarios, y si un solo usuario tiene varios dominios, esta configuración lo cubrirá.
Marco Ceppi
Marco, puede implementar este método en el momento en que obtiene su segundo usuario. Sin embargo, el primero debería ser mucho más simple a menos que sea seguro que tendrá más.
SpamapS
+1: esta es la configuración más segura y sensata.
Nathan Osman
11

Sftp es muy fácil de instalar. Simplemente instale el paquete openssh-servery tendrá sftp. Asegúrese de que su usuario tenga una buena contraseña si puede acceder a ella desde Internet. (8+ caracteres, no una palabra del diccionario, tiene símbolos y números).

Para los permisos, generalmente hago esto
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
. Luego, debería poder publicar páginas conectándose con sftp (usando su nombre de usuario y contraseña) y luego yendo a la carpeta / var / www y colocando sus archivos allí.

Azendale
fuente
1
Un método más seguro es la autenticación basada en claves (con la contraseña de clave privada protegida, por supuesto)
Lekensteyn
@Lekensteyn consideré sugerir eso, pero estaba tratando de hacerlo simple. Craig T podría echar un vistazo a help.ubuntu.com/community/SSH/OpenSSH/Keys y help.ubuntu.com/community/SSH/OpenSSH/… si desea configurar la autenticación basada en Clave más segura.
Azendale
2
Este es el enfoque más simple para llevar los archivos al lugar correcto en un servidor web de instancia única sin destruir los permisos de los archivos. :) Además, rsync podría usarse en lugar de sftp. Ambos usan SSH debajo del capó (y recomendaría usar claves ssh en lugar de contraseñas, pero alguien ya lo mencionó).
Kees Cook
1
+1, de acuerdo con Kees, esto es súper simple y funciona para la pregunta planteada. He utilizado casi la misma configuración para clústeres de producción con más de 40 nodos, restringiendo el acceso solo a claves SSH.
SpamapS
1

Yo uso webdav. Es muy fácil de instalar en Ubuntu Server. Si tiene instalado Apache, ya casi ha terminado. Justo sudo a2enmod dav; service apache2 restart. Tendrá que hacer una pequeña configuración de su sitio virtual. Aquí hay un ejemplo que estoy usando en producción:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin [email protected]

    DocumentRoot /srv/mysite
    DAVLockDB /var/lock/apache2/DAVLock
    <Directory /srv/mysite>
        Order allow,deny
        Allow from all
    Dav On
    DAVMinTimeout 600
    DAVDepthInfinity On
AuthName "mysite login"
AuthType Basic
AuthUserFile /srv/mysite/.htpassword
Require valid-user

    </Directory>
php_admin_value engine off
</VirtualHost>

<VirtualHost *>

    ServerName mysite.com
    ServerAlias *.mysite.com
    ServerAdmin [email protected]

    DocumentRoot /srv/mysite/www
    <Directory /srv/mysite/www>
        Order allow,deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /srv/mysite/cgi-bin/
</VirtualHost>

Puede poner esto en / srv / etc / apache2 / sites-available / mysite y luego hacerlo sudo a2ensite mysite; sudo service apache2 reload.

Lo que está sucediendo aquí es que has creado dos sitios virtuales. Uno es www.mysite.com y el otro es webdav.mysite.com. PHP ha sido deshabilitado en webdav.mysite.com, lo cual es importante.

Ahora puede acceder a su sitio a través de http en Ubuntu, Windows y MacOS. Los tres han incorporado soporte webdav. Aquí hay instrucciones sobre cómo agregar una ubicación de red webdav en Ubuntu .

newz2000
fuente
¿Por qué es esto bueno? Debido a que puede acceder a su sitio desde cualquier sistema operativo sin software adicional (sftp funciona en Ubuntu, necesita un programa separado en otros sistemas operativos). Además, con un sitio como WordPress, los permisos ya son correctos para lidiar con la carga de archivos, ya que Apache trata ambos aspectos. Y si desea seguridad, https estándar también está disponible. (puede usar diferentes puertos si tiene varios sitios en la misma IP)
newz2000
Por cierto, las instrucciones anteriores asumen que ha creado un lugar para su sitio: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000
1
No es seguro que DAV esté encriptado (a menos que su servidor web también esté ejecutando SSL), por lo que recomendaría SFTP o rsync sobre DAV en general.
Kees Cook
0

Le daría permisos de escritura a / var / www a los datos de www y agregaría su usuario a ese grupo. De esa manera, sería fácil controlar qué usuarios pueden escribir en ese directorio.

sudo chgrp -R www-data /var/www
sudo chmod g+w -R /var/www 
usermod -a -G www-data your-user
santiagozky
fuente
-1

¿Está utilizando algún marco para su sitio? Drupal, Wordpress, etc. Drupal, por ejemplo, tiene herramientas para cargar mediante la interacción del navegador.

¿Has mirado en Samba? Puede configurar un recurso compartido Samba (y hay toneladas de recursos en la web para ellos) y simplemente usar el Explorador de Windows para abrir / editar / guardar / eliminar. Configure / var / www para compartir y luego asigne la "unidad de red" a Windows.

¿Es este un trabajo o un ambiente hogareño? Suena como en casa, pero si está en un entorno de trabajo ... puede emparejar Samba con Active Directory con herramientas como Likewise-Open. Tengo una configuración de servidor / sitio web para que aquellos en la tienda de TI puedan iniciar sesión en cualquier lado del servidor (Linux o sitio web) a través de sus credenciales de AD.

También sugeriría buscar algo como Mercurial. Cree un repositorio en el servidor y sincronícelo con Windows a través de algo como TortiseHG. Supongo que es como rsync, pero tendría versiones, copias de seguridad, capacidad de distribución, etc. (SVN, Mercurial, Git, etc. todas las opciones)

WernerCD
fuente
-2

¿Estás buscando algo como esto?

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www
kim0
fuente
1
Iniciar sesión como root parece una exageración grave.
Kees Cook