четверг, 28 сентября 2017 г.

Установка OwnCloud 10.0.2 на CentOS 7.3 / Installation of OwnCloud on CentOS 7


     ownCloud — система для организации хранения, синхронизации и обмена данными, размещенными на внешних серверах.
В отличии от Dropbox и ему подобных, ownCloud отличается предоставлением пользователю полного контроля над своими данными — информация размещается на подконтрольных пользователю системах. Доступ к данным в ownCloud может осуществляться при помощи web-интерфейса или протокола WebDAV.

Необходимые Пакеты

yum -y install wget httpd curl openssl mod_ssl

Удалим PHP5.4  и установим PHP7.0
yum -y remove php*
yum -y install php70w php70w-php php70w-pdo php70w-dom php70w-gd php70w-mbstring php70w-json php70w-xml php70w-zip php70w-curl php70w-mcrypt php70w-pear

Установка и настройка SQL-сервера

$ yum -y install mariadb-server

$ systemctl start mariadb.service
$ systemctl start httpd.service
$ systemctl enable mariadb.service
$ systemctl enable httpd.service

     Настраиваем:
$ mysql_secure_installation

               Enter current password for root (enter for none):  PRESS ENTER

               Set root password? [Y/n] Y
               New password:  ENTER YOUR NEW PASSWORD
               Re-enter new password:    RE-ENTER YOUR NEW PASSWORD
               Password updated successfully!

               Remove anonymous users? [Y/n] Y
                ... Success!

               Disallow root login remotely? [Y/n] Y
               ... Success!

               Remove test database and access to it? [Y/n] Y
                - Dropping test database...
                ... Success!
                - Removing privileges on test database...
                ... Success!

               Reload privilege tables now? [Y/n] Y
                ... Success!

               Thanks for using MariaDB!

     Создаём базу данных:
$ mysql -u root -p

               CREATE DATABASE owncloud;
               GRANT ALL PRIVILEGES ON owncloud.* TO root@localhost IDENTIFIED BY 'ROOT PASSWORD';
               FLUSH PRIVILEGES;
               exit;

Установка и настройка Apache

     Настраиваем conf файл для VirtualHost Нашего сайта:
vi /etc/httpd/conf.d/disk.conf

*сделаем так, чтобы все запросы на http переправлялись автоматом на https

<VirtualHost *:80>
        ServerName disk.river..ru
        Redirect / https://disk.pdlx.ru
                ErrorLog /var/www/disk/error.log
                CustomLog /var/www/disk/requests.log combined
</VirtualHost>

<VirtualHost *:443>
        ServerName disk.river.ru

        SSLProxyEngine On
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyVia full

        SSLEngine On
        SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
        SSLCertificateFile /var/www/cert/fullchain.pem
        SSLCertificateKeyFile /var/www/cert/privkey.pem
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off

        DocumentRoot /var/www/disk
        <Directory /var/www/>
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/www/disk/error.log
        CustomLog /var/www/disk/requests.log combined
</VirtualHost>

     Создаём директорию для сертификатов:
mkdir /var/www/cert


     Создаём самоподписанный сертификат с помощью openssl:
(также можете воспользоваться бесплатным от StartSSL.com)

cp /etc/pki/tls/openssl.cnf /var/www/cert/river.ru.cnf

vi /var/www/river.ru/cert/river.ru.cnf


    В секции [ req ] раскомментируем:
req_extensions = v3_req
    В секции [ v3_req ] добавляем:
subjectAltName = @alt_names
    Выглядеть будет так:
            [ v3_req ]

            # Extensions to add to a certificate request

            basicConstraints = CA:FALSE
            keyUsage = nonRepudiation, digitalSignature, keyEncipherment
            subjectAltName = @alt_names

    В конце файла добавляем (все имена и IP, которые будет покрывать сертификат):
[ alt_names ]
DNS.1 = disk.river.ru
DNS.2 = d.river.ru


cd /var/www/cert/
openssl genrsa -out river.ru.key 2048
openssl req -new -out river.ru.csr -key river.ru.key -config river.ru.cnf
openssl req -in river.ru.csr -noout -text

openssl x509 -req -days 3650 -in river.ru.csr -signkey river.ru.key -out river.ru.crt -extensions v3_req -extfile river.ru.cnf

     подробнее тут:

     Перезагружаем Apache:
systemctl restart httpd.service

Установка и настройка OwnCloud

     Скачиваем дистрибутив:
wget https://download.owncloud.org/community/owncloud-9.1.2.tar.bz2
     Распаковываем в директорию где хранятся сайты:
tar -xjvf owncloud-9*
      Переименуем директорию как нам нравится:
cp -r ./owncloud /var/www/disk
(директория disk не должна существовать на момент копирования)
     Назначаем права Apache к директории сайта и всему содержимому:
chown -R apache.apache /var/www/disk
     Создаём в корне директорию, где будут хранится все пользовательские файлы пользователей OwnCloud:
mkdir /DISK
      Назначаем Apache владельцем директории и прописываем права доступа:
chown apache.apache /DISK; chmod 775 /DISK

Первый запуск OwnCloud

     Открываем браузер и пробуем http://disk.river.ru и https://disk.river.ru:
Чтобы из локальной сети имя disk.river.ru разрешалось в IP адрес из локальной подсети, нужно где-нибудь на сервере в локальной сети создать DNS зону river.ru и добавить туда A запись для disk.river.ru.
     Как быстрое решение можно добавить в файл C:\Windows\system32\drivers\etc\hosts строку вида:
     192.168.1.2  disk.river.ru

     Прописываем Имя и Пароль администратора, пусть к директории с данными Логин/Пароль и Имя Базы Данных в MariaDB


    Чтобы увеличить лимит загружаемых файлов через WEB интерфейс:

vi /var/www/disk/.htaccess
  меняем строки:
     php_value upload_max_filesize = 16G
     
php_value post_max_size = 16G
  добавляем строки:

     php_value max_input_time 3600
     php_value max_execution_time 3600


Включить HSTS на nginx
https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

Установка SSL сертификата для OwnCloud

Регистрируемся на starssl.com

Проходим проверку что домен, под который вам нужен SSL сертификат, ваш.
Вам вышлют на почтовый ящик webmaster@<вашдомен>.com письмо с кодом.

Запрашиваем бесплатный сертификат 

Скачиваем ssl.key и ssl.crt файлы

Для Apache всё просто, подставляете в конфиге вашего сайта ssl.key и ssl.crt и всё. При перезапуске сервиса Apache, последний спросит у вас пароль от сертификата (вы его вводили при генерации сертификата на StarSSL)

Для Nginx нужно будет немного поклацать по клаве:

Копируете сертификат на ваш сервер
Расшифровываете сертификат, введя пароль (всё тот же)
        openssl rsa -in ssl.key -out /etc/nginx/conf/ssl.key

Подставляете расшифрованный ssl.key файл в конфиг сайта.
С ssl.crt ничего делать не нужно. Подставляете его в конфиг и всё.

Ошибки и проблемы которые возникают с OwnCloud.
Оптимизация работы OwnCloud.

6 комментариев:

  1. Ставил все по вашей инструкции но после изменения и добавления конфигов HTTPD выдает ошибку - Starting The Apache HTTP Server...
    июл 14 14:18:23 owncloud httpd[25027]: AH00526: Syntax error on line 5 of /etc/httpd/sites-enabled/disk.conf:
    июл 14 14:18:23 owncloud httpd[25027]: Invalid command 'SSLProxyEngine', perhaps misspelled or defined by a module not included in the server configuration
    июл 14 14:18:24 owncloud systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
    июл 14 14:18:24 owncloud kill[25028]: kill: cannot find process ""
    июл 14 14:18:24 owncloud systemd[1]: httpd.service: control process exited, code=exited status=1
    июл 14 14:18:24 owncloud systemd[1]: Failed to start The Apache HTTP Server.
    июл 14 14:18:24 owncloud systemd[1]: Unit httpd.service entered failed state.
    июл 14 14:18:24 owncloud systemd[1]: httpd.service failed.

    ОтветитьУдалить
  2. SOLVED.. решено установкой доп.мдуля - yum install mod_ssl -y

    ОтветитьУдалить
  3. Добрый день.

    Не подскажете как настроить, чтобы почта различных уведомлений успешно отправлялась на внешние почтовые домены (mail.ru, gmail.com и др.)?

    Если, например, название хоста Owncloud звучит как server.test.ru, в настройках почтового сервера указан домен отправителя также как test.ru, то все получатели в test.ru успешно получают уведомления.

    А вот если сделать публичную ссылку для пользователя, ящик которого указан как user@mail.ru, то ему на mail.ru не приходят никакие уведомления.

    ОтветитьУдалить
    Ответы
    1. Не сталкивался - посоветовать нечего.. Опыта с эти нет.

      Удалить
  4. Как защищаться от атак?
    Подборов и т.п...

    ОтветитьУдалить
  5. SSL + CBAC

    http://it.kuchuk.net/2013/05/cbac-cisco.html

    И в ACL на вход разрешить HTTP/HTTPS только из указанного вами списка статических IP адресов.

    ОтветитьУдалить