Должен ли я ссылаться на мой каталог / var / www в моем доме?


20

Я только что установил Ubuntu Server 10.04 с настройкой LAMP. Я хочу разместить там сайт, но я не уверен, что это лучший способ получить / отредактировать мои файлы на сервере. Поиск в Google дает много вариантов, но я не уверен, что лучше?

Если нет лучшего варианта, я хотел бы создать страницы на другом ПК (Windows или Linux) и использовать SFTP для синхронизации изменений на сервере - но я делаю это для папки с символическими ссылками в ~ / или изменяя права в папке / var / www /?


Ответы:


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

Применим тот же принцип @Kees - только вам не нужно делать больше пользователей. Таким образом, вам никогда не придется беспокоиться о пользователях или проблемах с разрешениями - и если у одного пользователя несколько доменов, эта настройка покроет это.
Марко Чеппи

Марко, ты можешь реализовать этот метод в тот самый момент, когда у тебя появится второй пользователь. Первый же должен быть намного проще, если не уверен, что у вас будет больше.
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,

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

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

1
+1, согласен с Кисом, это супер просто и работает на поставленный вопрос. Я использовал почти такую ​​же настройку для производственных кластеров с более чем 40 узлами, ограничивая доступ только к SSH-ключам.
SpamapS

1

Я использую webdav. Это очень легко установить на Ubuntu Server. Если у вас установлен 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, разрешения уже правильны для загрузки файлов, поскольку apache работает с обоими аспектами. И если вы хотите безопасности, стандартный 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-данных и добавил бы вашего пользователя в эту группу. Таким образом, было бы легко контролировать, какие пользователи могут писать в этот каталог.

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 Explorer, чтобы открывать / редактировать / сохранять / удалять. Настройте / 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
Вход в систему как root кажется серьезным излишним.
Кис Кук
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.