Чи повинен я пов’язати каталог / var / www зі своїм будинком?


20

Я щойно встановив Ubuntu Server 10.04 із налаштуванням LAMP. Я хочу розмістити там веб-сайт, але я не впевнений, який найкращий спосіб отримати / редагувати мої файли на сервері. Гуглінг пропонує безліч варіантів, але я не впевнений, що найкраще?

Якщо немає кращого варіанту, я б хотів створити сторінки на іншому ПК (Windows або Linux) і використовувати SFTP для синхронізації змін на сервері - але чи потрібно це робити в папці з посиленою посиланням в ~ / або шляхом зміни прав у папці / var / www /?


5
Причини, чому / var / ww / не повинні мати chmod 777 - Просто для того, щоб було зрозуміло.
Марко Цеппі

Відповіді:


21

Кожна установка різна. Для мене на сервері багато користувачів, на яких розміщуються веб-сайти, для вас, ймовірно, не потрібно буде створювати більше одного користувача в системі. Однак якщо ви керуєте декількома веб-сайтами на цьому сервері, ця налаштування допоможе вам керувати, налаштовувати та налагоджувати кожен домен способом простіше, ніж стандартні установки LAMP. Для того, щоб це сталося, я використовую кілька пристроїв Apache, щоб уникнути помилок дозволу.

По-перше, це структура документа, яку я використовую:

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

Кожен користувач має свій власний обліковий запис із папкою доменів (яку я додав, щоб /etc/skelвона створювалася щоразу. Кожен домен має власну папку в domainsпапці з htmlпапкою (у мене є свої причини цього, насамперед, щоб домени могли мати веб-файли поза публічної сфери). Не соромтесь змінювати цю структуру, як вважаєте за потрібне, просто не забудьте пронести ці зміни протягом усієї публікації.

По-друге, я розміщую багато сайтів PHP, тому я використовую suPHP у своїй конфігурації. За замовчуванням у стандартному пакеті архівів не включений відповідний прапор компіляції, що призводить до менш безпечної версії suPHP. Я створив власний пакет suPHP, який використовую на своїх серверах, інструкції з установки нижче. suPHP дозволяє визначити, як слід виконувати сценарії PHP користувачів (серед іншого, зокрема: користувацькі php.ini для кожного сайту тощо). Я також включаю suExec для Apache - додатково знімаю необхідність володіти користувачем www-data (користувачем, якого я зневажаю).

Спочатку переконайтеся, що на вашому сервері встановлено Apache та всі інші сервіси. Переконайтеся, що вони принаймні працюють. Після цього я рекомендую встановити suphp-common та необхідний модуль libapache2-mod-suphp (Докладніше: Що таке PPA та як я ними користуюся? ). Потім після встановлення активуйте suPHP та suexec, використовуючиa2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Далі з'явиться файл конфігурації. Я створив різні інструменти, які автоматично генерують файли конфігурації кожного разу, коли я додаю новий сайт; проте ось основний шаблон, який я використовую:

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

Це налаштовує журнал для цього домену, корінь документа та всі інші основні потреби для роботи домену. Я розміщую ці файли в /etc/apache2/sites-available/типово названих [USER]-[DOMAIN]і включаю / відключаю їх a2ensiteтак:

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

Після кожної модифікації файлів конфігурації Apache потрібно буде перезавантажити

sudo /etc/init.d/apache reload

Хоча це може здатися великим для встановлення обсягу набутої гнучкості, на мою думку, значно переважає час налаштування. Хоча вам потрібен лише один веб-сервер користувача, у майбутньому, якщо ви коли-небудь хотіли що-небудь, крім одного веб-сервера одного користувача, вам потрібно буде виконати подальші дії (або просто скинути безпеку всі разом) для цього.


+1 для кожної установки відрізняється та використовує окремі облікові записи користувачів для кожного веб-сайту
Lekensteyn

1
Це відмінно підходить для багатокористувацької системи LAMP, але питання стосувалося однокористувацької системи LAMP, і в цьому випадку ця відповідь є надмірною. :)
Kees Cook

@ Застосовується той самий принцип - тільки вам не доведеться заробляти більше користувачів. Таким чином, вам ніколи не доведеться турбуватися про проблеми користувачів або дозволів - і якщо один користувач має кілька доменів, це налаштування покриє це.
Марко Цеппі

Марко, ти можеш реалізувати цей метод у той самий момент, коли ти отримаєш свого другого користувача. Цей перший, однак, повинен бути набагато простішим, якщо його певних у вас буде більше.
SpamapS

+1 - це найбезпечніша та найрозумніша конфігурація.
Натан Осман

11

Sftp дуже простий в установці. Просто встановіть пакет, openssh-serverі у вас буде sftp. Переконайтеся, що ваш користувач має хороший пароль, якщо ви можете отримати його до Інтернету. (8 символів, а не словникове слово, мають символи та цифри).

Для дозволів я зазвичай це роблю.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Потім ви зможете публікувати сторінки, з'єднавшись з sftp (використовуючи своє ім’я користувача та пароль), а потім перейдіть до папки / var / www і розмістивши там свої файли.


1
Більш безпечним методом є аутентифікація на основі ключів (звичайно, захищений паролем приватного ключа)
Лекенштейн

@Lekensteyn Я вважав, що це пропонують, але я намагався зробити це просто. Крейг T може ознайомитися з help.ubuntu.com/community/SSH/OpenSSH/Keys та help.ubuntu.com/community/SSH/OpenSSH/…, якщо він хоче встановити більш захищену аутентифікацію на основі ключа.
Azendale

2
Це найпростіший підхід до отримання файлів у потрібне місце на веб-сервері з одним примірником без руйнування дозволів на файли. :) Крім того, rsync можна використовувати замість sftp. Обидва використовують SSH під кришкою (і я б рекомендував використовувати ключі ssh замість паролів, але хтось це вже згадував).
Кіс Кук

1
+1, погоджуйтеся з Кісом, це дуже просто і працює на поставлене питання. Я використовував майже таку саму настройку для виробничих кластерів з 40+ вузлами, обмежуючи доступ лише до ключів SSH.
SpamapS

1

Я використовую webdav. Встановити на сервер Ubuntu дуже просто. Якщо у вас встановлений apache, ви майже готові. Просто sudo a2enmod dav; service apache2 restart. Вам потрібно буде зробити невелику конфігурацію вашого віртуального сайту. Ось приклад, який я використовую у виробництві:

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

Ви можете помістити це в / srv / etc / apache2 / sites-available / mysite, а потім зробити sudo a2ensite mysite; sudo service apache2 reload.

Що тут відбувається - це ви створили два віртуальних сайти. Один - www.mysite.com, а другий - webdav.mysite.com. PHP було відключено на webdav.mysite.com, що важливо.

Тепер ви можете отримати доступ до свого веб-сайту через http в Ubuntu, Windows та MacOS. Усі три вбудовані в підтримку webdav. Ось інструкції щодо додавання мережевого розташування webdav в Ubuntu .


Чому це добре? Оскільки ви можете отримати доступ до свого сайту з будь-якої операційної системи без додаткового програмного забезпечення (sftp працює в Ubuntu, потрібна окрема програма в інших ОС). Крім того, на такому веб-сайті, як wordpress, дозволили вже працювати з завантаженнями файлів, оскільки апаш стосується обох аспектів. А якщо ви хочете забезпечити безпеку, також доступні стандартні https. (ви можете використовувати різні порти, якщо у вас один і той самий IP-адрес)
newz2000

До речі, вище інструкції припустимо , що ви створили місце для вашого сайту: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000

1
DAV не обов'язково шифрується (якщо тільки ваш веб-сервер також не працює SSL), тому я б рекомендував SFTP або rsync над DAV взагалі.
Кіс Кук

0

Я б дав дозволи на запис / var / www до www-data та додав вашого користувача до цієї групи. Таким чином було б легко контролювати, які користувачі можуть записувати в цей каталог.

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

-1

Ви використовуєте які-небудь рамки для свого сайту? Drupal, Wordpress тощо? Наприклад, Drupal має інструменти для завантаження через взаємодію з браузером.

Ви заглянули в Самба? Ви можете налаштувати спільний доступ Samba (а в Інтернеті є багато ресурсів) і просто використовувати Провідник Windows для відкриття / редагування / збереження / видалення. Налаштуйте / var / www для спільного використання, а потім перетасуйте "мережевий диск" у Windows.

Це робота чи домашнє середовище? Це звучить як дома, але якщо ви перебуваєте в робочому середовищі ... ви можете з’єднати Samba з Active Directory з такими інструментами, як "Likewise-Open". У мене налаштування сервера / веб-сайту таким чином, що ті, хто знаходиться в ІТ-магазині, можуть входити в будь-яку сторону сервера (Linux або веб-сайт) за допомогою своїх облікових даних AD.

Я б також запропонував розглянути щось на кшталт Mercurial. Створіть сховище на сервері та синхронізуйте з Windows через щось на зразок TortiseHG. Я припускаю, що це як rsync, але у вас з'являться версії, резервні копії, можливість розповсюдження і т. Д. (SVN, Mercurial, Git тощо, всі варіанти)



-2

Ви після чогось подібного

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

1
Увійти в систему як корінь здається серйозною надмірністю.
Кіс Кук
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.