Soll ich mein / var / www-Verzeichnis mit meinem Zuhause verknüpfen?

20

Ich habe gerade Ubuntu Server 10.04 mit einem LAMP-Setup installiert. Ich möchte dort eine Website hosten, bin mir aber nicht sicher, wie ich meine Dateien am besten auf dem Server abrufen / bearbeiten kann. Googeln bietet viele Möglichkeiten, aber ich bin mir nicht sicher, welche am besten ist?

Sofern es keine bessere Option gibt, würde ich die Seiten gerne auf einem anderen PC (Windows oder Linux) erstellen und die Änderungen mit SFTP auf dem Server synchronisieren - aber mache ich das mit einem verknüpften Ordner in ~ / oder indem ich die Rechte ändere im Ordner / var / www /?

Craig
quelle
5
Gründe, warum / var / ww / chmod 777 nicht haben sollte - Nur um es klar zu machen.
Marco Ceppi

Antworten:

21

Jedes Setup ist anders. Für mich gibt es viele Benutzer auf einem Server, auf dem die einzelnen Websites gehostet werden. Sie müssen wahrscheinlich nicht mehr als einen Benutzer auf dem System erstellen. Wenn Sie jedoch mehrere Websites auf diesem Server verwalten, können Sie mit diesem Setup die einzelnen Domänen einfacher als mit einem Standard-LAMP-Setup verwalten, konfigurieren und debuggen. Um dies zu erreichen, benutze ich mehrere Geräte von Apache, um Berechtigungsfehler zu umgehen.

Erstens ist dies die Dokumentenstruktur, die ich benutze:

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

Jeder Benutzer hat ein eigenes Konto mit einem Domänenordner (den ich hinzugefügt habe, /etc/skeldamit er jedes Mal erstellt wird. Jede Domäne hat einen eigenen Ordner im domainsOrdner mit einem htmlOrdner. Ich habe meine Gründe dafür, in erster Linie, damit Domänen Webdateien außerhalb haben können Fühlen Sie sich frei, diese Struktur nach Belieben zu ändern. Denken Sie jedoch daran, diese Änderungen in diesem Beitrag zu übernehmen.

Zweitens hoste ich viele PHP-Sites, sodass ich in meiner Konfiguration suPHP verwende. Standardmäßig ist für das Standardarchivpaket nicht das richtige Kompilierungsflag aktiviert, was zu einer weniger sicheren Version von suPHP führt. Ich habe mein eigenes suPHP-Paket erstellt, das ich auf meinen Servern verwende. Mit suPHP können Sie definieren, unter welchen Bedingungen Benutzer-PHP-Skripte ausgeführt werden sollen (unter anderem: Benutzerdefinierte php.ini für jede Site usw.). Ich aktiviere auch suExec für Apache - außerdem muss ich dem WWW-Datenbenutzer (einem Benutzer, den ich verachte) keinen Besitzer mehr geben.

Stellen Sie zunächst sicher, dass Apache und alle anderen Dienste auf Ihrem Server installiert sind. Stellen Sie sicher, dass sie zumindest funktionieren. Danach empfehle ich, suphp-common und das erforderliche libapache2-mod-suphp-Modul zu installieren (Weitere Informationen: Was sind PPAs und wie verwende ich sie? ). Aktivieren Sie dann nach der Installation suPHP und suexec mita2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Als nächstes kommt die Konfigurationsdatei. Ich habe verschiedene Tools erstellt, die die Konfigurationsdateien jedes Mal automatisch generieren, wenn ich eine neue Site hinzufüge. Hier ist jedoch die grundlegende Vorlage, die ich verwende:

<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>

Dadurch wird die Protokollierung für diese Domäne, den Dokumentenstamm und alle anderen grundlegenden Anforderungen für den Betrieb der Domäne eingerichtet. Ich platziere diese Dateien in der /etc/apache2/sites-available/Regel benannt [USER]-[DOMAIN]und aktivieren / deaktivieren Sie sie mit a2ensitewie folgt:

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

Nach jeder Änderung an den Konfigurationsdateien muss Apache mit neu geladen werden

sudo /etc/init.d/apache reload

Während es viel zu sein scheint, die Menge an gewonnener Flexibilität einzurichten, überwiegt meiner Meinung nach die Einrichtungszeit bei weitem. Obwohl Sie nur einen einzelnen Benutzer-Webserver benötigen, müssen Sie in Zukunft, wenn Sie jemals etwas anderes als einen einzelnen Benutzer-Webserver wünschen, weitere Aktionen ausführen (oder die Sicherheit einfach alle zusammen löschen), um dies zu tun.

Marco Ceppi
quelle
+1 für jedes Setup ist anders und verwendet separate Benutzerkonten für jede Website
Lekensteyn
1
Dies ist für ein Mehrbenutzer-LAMP-System ideal, aber die Frage betraf ein Einzelbenutzer-LAMP-System. In diesem Fall ist diese Antwort übertrieben. :)
Kees Cook
@Kees das gleiche Prinzip gilt - nur müssen Sie nicht mehr Benutzer machen. Auf diese Weise müssen Sie sich nie um Benutzer- oder Berechtigungsprobleme kümmern - und wenn ein einzelner Benutzer mehrere Domänen hat, wird dies durch dieses Setup abgedeckt.
Marco Ceppi
Marco, du kannst diese Methode genau zu dem Zeitpunkt implementieren, an dem du deinen zweiten Benutzer bekommst. Das erste sollte jedoch viel einfacher sein, es sei denn, es ist sicher, dass Sie mehr haben werden.
SpamapS
+1 - Dies ist die sicherste und sinnvollste Konfiguration.
Nathan Osman
11

Sftp ist sehr einfach zu installieren. Installieren openssh-serverSie einfach das Paket und Sie werden sftp haben. Stellen Sie sicher, dass Ihr Benutzer ein gutes Passwort hat, wenn Sie es aus dem Internet abrufen können. (8+ Zeichen, kein Wörterbuchwort, haben Symbole und Zahlen).

Bei Berechtigungen mache ich das normalerweise.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Sie sollten dann in der Lage sein, Seiten zu posten, indem Sie eine Verbindung mit sftp herstellen (mit Ihrem Benutzernamen und Kennwort) und dann zum Ordner / var / www gehen und Ihre Dateien dort ablegen.

Azendale
quelle
1
Eine sicherere Methode ist die schlüsselbasierte Authentifizierung (mit natürlich geschütztem Passwort für den privaten Schlüssel)
Lekensteyn
@Lekensteyn Ich überlegte, ob ich das vorschlagen sollte, aber ich habe versucht, es einfach zu halten. Craig T könnte einen Blick auf help.ubuntu.com/community/SSH/OpenSSH/Keys und help.ubuntu.com/community/SSH/OpenSSH/… werfen, wenn er die sicherere schlüsselbasierte Authentifizierung einrichten möchte.
Azendale
2
Dies ist die einfachste Methode, um die Dateien auf einem Einzelinstanz-Webserver an die richtige Stelle zu bringen, ohne die Dateiberechtigungen zu gefährden. :) Zusätzlich könnte rsync anstelle von sftp verwendet werden. Beide verwenden SSH unter der Haube (und ich würde empfehlen, SSH-Schlüssel anstelle von Passwörtern zu verwenden, aber jemand erwähnte das bereits).
Kees Cook
1
+1, stimme Kees zu, das ist super einfach und funktioniert für die angegebene Frage. Ich habe fast das gleiche Setup für Produktionscluster mit mehr als 40 Knoten verwendet und den Zugriff nur auf SSH-Schlüssel eingeschränkt.
SpamapS
1

Ich benutze webdav Es ist sehr einfach, auf Ubuntu Server zu installieren. Wenn Sie Apache installiert haben, sind Sie fast fertig. Nur sudo a2enmod dav; service apache2 restart. Sie müssen eine kleine Konfiguration Ihrer virtuellen Site vornehmen. Hier ist ein Beispiel, das ich in der Produktion verwende:

<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>

Sie können dies in / srv / etc / apache2 / sites-available / mysite ablegen und dann tun sudo a2ensite mysite; sudo service apache2 reload.

Hier haben Sie zwei virtuelle Sites erstellt. Einer ist www.mysite.com und der andere ist webdav.mysite.com. PHP wurde auf webdav.mysite.com deaktiviert, was wichtig ist.

Jetzt können Sie unter Ubuntu, Windows und MacOS über http auf Ihre Site zugreifen. Alle drei haben Webdav-Unterstützung eingebaut. Hier finden Sie Anweisungen zum Hinzufügen eines Webdav-Netzwerkverzeichnisses in Ubuntu .

newz2000
quelle
Warum ist das gut? Da Sie von jedem Betriebssystem ohne zusätzliche Software auf Ihre Site zugreifen können (sftp funktioniert unter Ubuntu, benötigt ein separates Programm in anderen Betriebssystemen). Außerdem sind bei einer Site wie WordPress die Berechtigungen für das Hochladen von Dateien bereits korrekt, da Apache beide Aspekte behandelt. Und wenn Sie Sicherheit wünschen, ist auch Standard-https verfügbar. (Sie können verschiedene Ports verwenden, wenn Sie mehrere Standorte auf derselben IP haben)
newz2000
By the way, über Anweisungen annehmen , dass Sie einen Platz für Ihre Website erstellt haben: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000
1
DAV ist nicht sicher, ob es verschlüsselt wird (es sei denn, auf Ihrem Webserver wird auch SSL ausgeführt). Daher würde ich SFTP oder rsync generell über DAV empfehlen.
Kees Cook
0

Ich würde / var / www Schreibrechte für die www-Daten geben und Ihren Benutzer dieser Gruppe hinzufügen. Auf diese Weise lässt sich leicht steuern, welche Benutzer in dieses Verzeichnis schreiben können.

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

Verwenden Sie ein Framework für Ihre Website? Drupal, Wordpress, etc? Drupal bietet beispielsweise Tools zum Hochladen über die Interaktion mit dem Browser.

Hast du in Samba geschaut? Sie können eine Samba-Freigabe einrichten (und es gibt Unmengen von Ressourcen im Web dafür) und einfach den Windows-Explorer zum Öffnen / Bearbeiten / Speichern / Löschen verwenden. Richten Sie / var / www ein, das freigegeben werden soll, und ordnen Sie das "Netzwerklaufwerk" Windows zu.

Ist das eine Arbeits- oder eine häusliche Umgebung? Es klingt wie zu Hause, aber wenn Sie sich in einer Arbeitsumgebung befinden, können Sie Samba mit Active Directory mit Tools wie "Ebenso offen" koppeln. Ich habe einen Server / eine Website eingerichtet, sodass sich die Benutzer im IT-Shop über ihre AD-Anmeldeinformationen auf beiden Seiten des Servers (Linux oder Website) anmelden können.

Ich würde auch vorschlagen, etwas wie Mercurial zu untersuchen. Erstellen Sie ein Repository auf dem Server und synchronisieren Sie mit Windows über etwas wie TortiseHG. Ich nehme an, es ist wie mit rsync, aber Sie hätten Versionsverwaltung, Backups, Verteilungsmöglichkeiten usw. (SVN, Mercurial, Git usw., alle Optionen)

WernerCD
quelle
-2

Bist du nach so etwas

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www
kim0
quelle
1
Sich als root einzuloggen scheint ein schwerwiegender Overkill zu sein.
Kees Cook