Devo collegare simbolicamente la mia directory / var / www a casa mia?


20

Ho appena installato Ubuntu Server 10.04 con una configurazione LAMP. Voglio ospitare un sito Web lì, ma non sono sicuro di quale sia il modo migliore per ottenere / modificare i miei file sul server. Google offre molte opzioni ma non sono sicuro di quale sia la migliore?

A meno che non ci sia un'opzione migliore, mi piacerebbe creare le pagine su un altro PC (Windows o Linux) e utilizzare SFTP per sincronizzare le modifiche al server - ma lo faccio in una cartella con collegamento simbolico in ~ / o modificando i diritti nella cartella / var / www /?


Risposte:


21

Ogni installazione è diversa. Per me ho molti utenti su un server che ospita ogni sito Web, per te probabilmente non dovrai creare più di un solo utente sul sistema. Tuttavia, se gestisci più siti Web su questo server, questa configurazione ti aiuterà a gestire, configurare ed eseguire il debug di ciascun dominio in modo più semplice di una configurazione LAMP standard. Affinché ciò accada, utilizzo diversi dispositivi di Apache per aggirare gli errori di autorizzazione.

Innanzitutto, questa è la struttura del documento che utilizzo:

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

Ogni utente ha il proprio account con una cartella dei domini (che ho aggiunto in /etc/skelmodo che venga creato ogni volta. Ogni dominio ha la propria cartella nella domainscartella con una htmlcartella (ho i miei motivi per questo, principalmente in modo che i domini possano avere file Web all'esterno del dominio pubblico). Sentiti libero di modificare questa struttura come ritieni opportuno, ricorda di apportare tali modifiche in questo post.

In secondo luogo, ospito molti siti PHP, quindi uso suPHP nella mia configurazione. Per impostazione predefinita, il pacchetto di archivio standard non ha il flag di compilazione abilitato che risulta in una versione meno sicura di suPHP. Ho creato il mio pacchetto suPHP che utilizzo sui miei server, le istruzioni di installazione di seguito. suPHP consente di definire quali script PHP utente devono essere eseguiti (tra le altre cose, tra cui: php.ini personalizzato per ciascun sito, ecc.). Abilito anche suExec per Apache, eliminando ulteriormente la necessità di avere la proprietà dell'utente www-data (un utente che disprezzo).

Per prima cosa assicurati di avere Apache e tutti gli altri servizi installati sul tuo server. Assicurati che funzionino almeno. Successivamente, consiglio di installare suphp-common e il modulo libapache2-mod-suphp richiesto (Ulteriori informazioni: cosa sono i PPA e come li uso? ). Quindi, dopo l'installazione, attiva suPHP e suexec usandoa2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Successivamente verrà il file di configurazione. Ho creato vari strumenti che generano automaticamente i file di configurazione ogni volta che aggiungo un nuovo sito; tuttavia, ecco il modello di base che 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>

Questo imposta la registrazione per quel dominio, la radice del documento e tutte le altre necessità di base per far funzionare il dominio. Posiziono questi file in /etc/apache2/sites-available/genere denominati [USER]-[DOMAIN]e li abilito / disabilito in questo a2ensitemodo:

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

Dopo ogni modifica ai file di configurazione, Apache dovrà essere ricaricato

sudo /etc/init.d/apache reload

Sebbene possa sembrare molto impostare la quantità di flessibilità acquisita, a mio avviso, supera di gran lunga i tempi di installazione. Anche se hai bisogno di un solo server web per utente singolo, in futuro se avessi mai desiderato qualcosa di diverso da un server web per singolo utente, per farlo dovresti eseguire ulteriori azioni (o semplicemente abbandonare la sicurezza).


+1 per ogni configurazione è diverso e utilizza account utente separati per ogni sito Web
Lekensteyn,

1
Questo è ottimo per un sistema LAMP multiutente, ma la domanda riguardava un sistema LAMP monoutente, nel qual caso questa risposta è eccessiva. :)
Kees Cook,

Si applica lo stesso principio di @Kees: solo tu non devi fare più utenti. In questo modo non dovrai mai preoccuparti dei problemi dell'utente o dei permessi - e se un singolo utente ha più domini questa configurazione lo coprirà.
Marco Ceppi

Marco, puoi implementare questo metodo proprio nel momento in cui ottieni il tuo secondo utente. Il primo però dovrebbe essere molto più semplice a meno che non sia certo che ne avrai di più.
SpamapS

+1: questa è la configurazione più sicura e sensata.
Nathan Osman,

11

Sftp è molto facile da installare. Basta installare il pacchetto openssh-servere avrai sftp. Assicurati che il tuo utente abbia una buona password se riesci ad accedervi da Internet. (8+ caratteri, non una parola del dizionario, ha simboli e numeri).

Per i permessi, di solito lo faccio.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Dovresti quindi essere in grado di pubblicare pagine collegandoti con sftp (usando il tuo nome utente e password) e poi andando nella cartella / var / www e inserendo i tuoi file lì.


1
Un metodo più sicuro è l'autenticazione basata su chiave (ovviamente con la chiave privata protetta da password)
Lekensteyn,

@Lekensteyn ho pensato di suggerirlo, ma stavo cercando di mantenerlo semplice. Craig T potrebbe dare un'occhiata a help.ubuntu.com/community/SSH/OpenSSH/Keys e help.ubuntu.com/community/SSH/OpenSSH/… se desidera impostare l'autenticazione basata su chiave più sicura.
Azendale

2
Questo è l'approccio più semplice per ottenere i file nel posto giusto su un server Web a istanza singola senza distruggere le autorizzazioni dei file. :) Inoltre, al posto di sftp potrebbe essere usato rsync. Entrambi usano SSH sotto il cofano (e consiglierei di usare i tasti ssh invece delle password, ma qualcuno l'ha già menzionato).
Kees Cook,

1
+1, d'accordo con Kees, questo è super semplice e funziona per la domanda dichiarata. Ho usato quasi la stessa identica configurazione per i cluster di produzione con oltre 40 nodi, limitando l'accesso solo alle chiavi SSH.
SpamapS

1

Uso webdav. È molto facile da installare su Ubuntu Server. Se hai installato apache hai quasi finito. Basta sudo a2enmod dav; service apache2 restart. Dovrai fare una piccola configurazione del tuo sito virtuale. Ecco un esempio che sto usando in produzione:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin webmaster@mysite.com

    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 webmaster@mysite.com

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

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

Puoi metterlo in / srv / etc / apache2 / sites-available / mysite e poi farlo sudo a2ensite mysite; sudo service apache2 reload.

Quello che sta succedendo qui è che hai creato due siti virtuali. Uno è www.mysite.com e l'altro è webdav.mysite.com. PHP è stato disabilitato su webdav.mysite.com che è importante.

Ora puoi accedere al tuo sito tramite http su Ubuntu, Windows e MacOS. Tutti e tre hanno integrato il supporto webdav. Ecco le istruzioni su come aggiungere un percorso di rete webdav in Ubuntu .


Perché va bene? Perché puoi accedere al tuo sito da qualsiasi sistema operativo senza software aggiuntivo (sftp funziona in Ubuntu, necessita di un programma separato in altri sistemi operativi). Inoltre, con un sito come wordpress, le autorizzazioni sono già corrette per gestire i caricamenti di file poiché apache si occupa di entrambi gli aspetti. E se si desidera la sicurezza, è disponibile anche https standard. (puoi usare porte diverse se hai più siti sullo stesso IP)
newz2000

Tra l'altro, istruzioni precedenti presuppongono che hai creato un posto per il vostro sito: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000,

1
DAV non è certo di essere crittografato (a meno che il tuo server web non stia eseguendo anche SSL), quindi consiglierei SFTP o rsync su DAV in generale.
Kees Cook,

0

Darei i permessi di scrittura a / var / www ai dati www e aggiungerei il tuo utente a quel gruppo. In questo modo sarebbe facile controllare quali utenti possono scrivere in quella directory.

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

-1

Stai usando qualche framework per il tuo sito? Drupal, Wordpress, ecc.? Drupal ad esempio ha strumenti per caricare tramite l'interazione del browser.

Hai guardato in Samba? Puoi configurare una condivisione Samba (e ci sono tonnellate di risorse sul web per loro) e semplicemente usare Esplora risorse per aprire / modificare / salvare / eliminare. Setup / var / www da condividere e quindi mappare "unità di rete" su Windows.

È un lavoro o un ambiente domestico? Sembra casa, ma se ti trovi in ​​un ambiente di lavoro ... puoi associare Samba ad Active Directory con strumenti come Likewise-Open. Ho un server / sito Web configurato in modo tale che quelli nel negozio IT possano accedere a entrambi i lati del server (Linux o sito Web) tramite le loro credenziali AD.

Suggerirei anche di esaminare qualcosa come Mercurial. Crea un repository sul server e sincronizza con Windows tramite qualcosa come TortiseHG. Presumo sia come rsync, ma avresti il ​​versioning, i backup, la possibilità di distribuire, ecc. (SVN, Mercurial, Git, ecc. Tutte le opzioni)



-2

Stai cercando qualcosa del genere

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www

1
Accedere come root sembra un grave sovraccarico.
Kees Cook,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.