Czy powinienem symlinkować mój katalog / var / www do mojego domu?

20

Właśnie zainstalowałem Ubuntu Server 10.04 z konfiguracją LAMP. Chcę hostować tam stronę internetową, ale nie jestem pewien, który jest najlepszy sposób na pobranie / edycję moich plików na serwerze. Google oferuje wiele opcji, ale nie jestem pewien, która z nich jest najlepsza?

O ile nie ma lepszej opcji, chciałbym utworzyć strony na innym komputerze (Windows lub Linux) i użyć SFTP, aby zsynchronizować zmiany z serwerem - ale czy robię to z folderem dowiązanym symbolicznie w ~ / lub zmieniając prawa w folderze / var / www /?

Craig
źródło

Odpowiedzi:

21

Każda konfiguracja jest inna. Dla mnie mam wielu użytkowników na serwerze, z których każdy hostuje strony internetowe, dla ciebie prawdopodobnie nie będziesz musiał utworzyć więcej niż jednego użytkownika w systemie. Jeśli jednak zarządzasz wieloma witrynami na tym serwerze, ta konfiguracja pomoże ci zarządzać, konfigurować i debugować każdą domenę w sposób łatwiejszy niż standardowa konfiguracja LAMP. Aby tak się stało, używam kilku urządzeń Apache do ominięcia błędów uprawnień.

Po pierwsze, korzystam ze struktury dokumentu:

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

Każdy użytkownik ma własne konto z folderem domen (do którego dodałem, aby /etc/skeltworzyło się za każdym razem. Każda domena ma swój własny folder w domainsfolderze z htmlfolderem (mam swoje powody, przede wszystkim dlatego, że domeny mogą mieć pliki sieciowe poza sfery publicznej). Zmodyfikuj tę strukturę według własnego uznania, pamiętaj tylko o wprowadzeniu tych zmian w tym poście.

Po drugie, hostuję wiele stron PHP, więc używam suPHP w mojej konfiguracji. Domyślnie standardowy pakiet archiwum nie ma włączonej właściwej flagi kompilacji, co skutkuje mniej bezpieczną wersją suPHP. Zrobiłem własny pakiet suPHP, którego używam na moich serwerach, instrukcje instalacji poniżej. suPHP pozwala zdefiniować, jakie skrypty użytkownika PHP powinny być wykonywane (między innymi: niestandardowe php.ini dla każdej strony itp.). Włączam również suExec dla Apache - co jeszcze bardziej eliminuje potrzebę posiadania własności przez użytkownika danych www (użytkownika, którym gardzę).

Najpierw upewnij się, że masz Apache i wszystkie inne usługi zainstalowane na serwerze. Upewnij się, że przynajmniej działają. Następnie zalecam zainstalowanie suphp-common i wymaganego modułu libapache2-mod-suphp (Więcej informacji: Co to są PPA i jak ich używać? ). Następnie, po instalacji, aktywuj suPHP i suexec przy użyciua2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Następnie pojawi się plik konfiguracyjny. Stworzyłem różne narzędzia, które automatycznie generują pliki konfiguracyjne za każdym razem, gdy dodam nową stronę; jednak oto podstawowy szablon, którego używam:

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

Spowoduje to skonfigurowanie rejestrowania dla tej domeny, katalogu głównego dokumentu i wszystkich innych podstawowych potrzeb do działania domeny. Umieszczam te pliki w /etc/apache2/sites-available/typowo nazwanych [USER]-[DOMAIN]i włączam / wyłączam je w następujący a2ensitesposób:

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

Po każdej modyfikacji plików konfiguracyjnych należy ponownie załadować Apache

sudo /etc/init.d/apache reload

Chociaż konfiguracja może wydawać się bardzo trudna, moim zdaniem znacznie większa elastyczność. Chociaż potrzebujesz tylko jednego serwera WWW, w przyszłości, jeśli kiedykolwiek chciałbyś czegoś innego niż serwer WWW jednego użytkownika, musisz wykonać dalsze działania (lub po prostu porzucić zabezpieczenia razem), aby to zrobić.

Marco Ceppi
źródło
+1 za każdą konfigurację jest inna i przy użyciu osobnych kont użytkowników dla każdej witryny
Lekensteyn
1
Jest to świetne rozwiązanie dla systemu LAMP dla wielu użytkowników, ale pytanie dotyczyło systemu LAMP dla jednego użytkownika, w którym to przypadku odpowiedź jest przesadna. :)
Kees Cook
@Kees obowiązuje ta sama zasada - tylko Ty nie musisz pozyskiwać większej liczby użytkowników. W ten sposób nigdy nie będziesz musiał martwić się o problemy z użytkownikami lub uprawnieniami - a jeśli pojedynczy użytkownik ma wiele domen, ta konfiguracja to obejmie.
Marco Ceppi
Marco, możesz zaimplementować tę metodę w momencie, gdy uzyskasz drugiego użytkownika. Ten pierwszy powinien być jednak znacznie prostszy, chyba że jest pewne, że będziesz miał więcej.
SpamapS
+1 - jest to najbezpieczniejsza i najbardziej sensowna konfiguracja.
Nathan Osman,
11

Sftp jest bardzo łatwy w instalacji. Wystarczy zainstalować pakiet, openssh-servera będziesz mieć sftp. Upewnij się, że użytkownik ma dobre hasło, jeśli możesz uzyskać do niego dostęp z Internetu. (Ponad 8 znaków, nie słowo w słowniku, ma symbole i cyfry).

Aby uzyskać uprawnienia, zwykle to robię.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Następnie powinieneś być w stanie publikować strony, łącząc się z sftp (używając nazwy użytkownika i hasła), a następnie przechodząc do folderu / var / www i umieszczając tam swoje pliki.

Azendale
źródło
1
Bardziej bezpieczną metodą jest uwierzytelnianie oparte na kluczach (oczywiście chronione hasłem klucza prywatnego)
Lekensteyn
@ Lekensteyn Rozważałem zasugerowanie tego, ale starałem się to uprościć. Craig T może zajrzeć na help.ubuntu.com/community/SSH/OpenSSH/Keys i help.ubuntu.com/community/SSH/OpenSSH/…, jeśli chce skonfigurować bezpieczniejsze uwierzytelnianie oparte na kluczu.
Azendale
2
Jest to najprostsze podejście do umieszczenia plików we właściwym miejscu na serwerze internetowym z pojedynczą instancją bez niszczenia uprawnień do plików. :) Dodatkowo można użyć rsync zamiast sftp. Oba używają SSH pod maską (i zalecałbym używanie kluczy ssh zamiast haseł, ale ktoś już o tym wspomniał).
Kees Cook
1
+1, zgódź się z Kees, to jest bardzo proste i działa na zadane pytanie. Użyłem prawie takiej samej konfiguracji dla klastrów produkcyjnych z ponad 40 węzłami, ograniczając dostęp tylko do kluczy SSH.
SpamapS
1

Używam webdav. Jest bardzo łatwy do zainstalowania na Ubuntu Server. Jeśli masz zainstalowany apache, prawie skończyłeś. Właśnie sudo a2enmod dav; service apache2 restart. Musisz wykonać małą konfigurację swojej wirtualnej strony. Oto przykład, którego używam w produkcji:

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

Możesz umieścić to w / srv / etc / apache2 / sites-available / mysite, a następnie zrobić sudo a2ensite mysite; sudo service apache2 reload.

To, co się tutaj dzieje, polega na utworzeniu dwóch wirtualnych witryn. Jedna to www.mysite.com, a druga to webdav.mysite.com. PHP zostało wyłączone na webdav.mysite.com, co jest ważne.

Teraz możesz uzyskać dostęp do swojej witryny przez http na Ubuntu, Windows i MacOS. Wszystkie trzy mają wbudowaną obsługę webdav. Oto instrukcje dodawania lokalizacji sieciowej webdav w Ubuntu .

newz2000
źródło
Dlaczego to jest dobre? Ponieważ możesz uzyskać dostęp do swojej witryny z dowolnego systemu operacyjnego bez dodatkowego oprogramowania (sftp działa w Ubuntu, wymaga osobnego programu w innych systemach operacyjnych). Ponadto w przypadku witryny takiej jak Wordpress uprawnienia są już poprawne do obsługi przesyłania plików, ponieważ Apache dotyczy obu aspektów. A jeśli chcesz bezpieczeństwa, dostępna jest również standardowa https. (możesz używać różnych portów, jeśli masz wiele witryn pod tym samym
adresem
Nawiasem mówiąc, instrukcje powyżej Zakładam, że stworzyliśmy miejsce dla swojej strony: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000
1
DAV nie ma pewności, że zostanie zaszyfrowany (chyba że na twoim serwerze działa także SSL), więc poleciłbym SFTP lub rsync zamiast DAV w ogóle.
Kees Cook
0

Dałbym uprawnienia do zapisu do / var / www do danych www i dodałbym użytkownika do tej grupy. W ten sposób można łatwo kontrolować, którzy użytkownicy mogą zapisywać w tym katalogu.

sudo chgrp -R www-data /var/www
sudo chmod g+w -R /var/www 
usermod -a -G www-data your-user
Santiagozky
źródło
-1

Czy używasz żadnych ram dla swojej witryny? Drupal, Wordpress itp.? Drupal na przykład ma narzędzia do przesyłania za pośrednictwem interakcji przeglądarki.

Zajrzałeś do Samby? Możesz skonfigurować udział Samby (i jest mnóstwo zasobów w Internecie dla nich) i po prostu użyć Eksploratora Windows, aby otworzyć / edytować / zapisać / usunąć. Skonfiguruj / var / www do udostępnienia, a następnie zamapuj „dysk sieciowy” na Windows.

Czy to środowisko pracy czy domu? Brzmi jak w domu, ale jeśli pracujesz w środowisku pracy ... możesz sparować Sambę z Active Directory z narzędziami takimi jak Likewise-Open. Mam konfigurację serwera / strony internetowej, dzięki czemu osoby ze sklepu IT mogą zalogować się do dowolnej strony serwera (Linux lub strona internetowa) za pomocą swoich poświadczeń AD.

Sugerowałbym także zajrzenie w coś takiego jak Mercurial. Utwórz repozytorium na serwerze i zsynchronizuj z oknami za pomocą czegoś takiego jak TortiseHG. Zakładam, że to jest jak rsync, ale miałbyś wersjonowanie, kopie zapasowe, możliwość dystrybucji itp. (SVN, Mercurial, Git itp. Wszystkie opcje)

WernerCD
źródło
-2

Czy szukasz czegoś takiego?

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www
kim0
źródło
1
Logowanie jako root wydaje się poważną przesadą.
Kees Cook