Сервер DokuWiki¶
Передумови та припущення¶
- Екземпляр Rocky Linux, встановлений на сервері, контейнері або віртуальній машині.
- Зручно змінювати конфігураційні файли з командного рядка за допомогою редактора (наші приклади тут використовуватимуть vi, але ви можете замінити свій улюблений редактор).
- Деякі знання про веб-програми та налаштування.
- У нашому прикладі буде використано Apache Sites Enabled для налаштування, тому радимо переглянути цю процедуру, якщо ви плануєте продовжувати.
- У цьому прикладі ми будемо використовувати «example.com» як доменне ім’я.
- У цьому документі ми припускатимемо, що ви є користувачем root або можете отримати доступ за допомогою sudo.
- Ми припускаємо нове встановлення ОС, однак це НЕ є вимогою.
Вступ¶
Документація в організації може приймати різні форми. Наявність репозиторію, на який можна посилатися на цю документацію, є неоціненною. Вікі (що на гавайській мові означає швидкий) — це спосіб централізованого зберігання документації, нотаток процесів, корпоративних баз знань і навіть прикладів коду. ІТ-фахівці, які підтримують wiki, навіть таємно, мають вбудований поліс страхування від забуття незрозумілої процедури.
DokuWiki — це зріла, швидка вікі, яка працює без бази даних, має вбудовані функції безпеки та відносно проста в розгортанні. Щоб дізнатися більше про можливості DokuWiki, перегляньте їх веб-сторінку.
DokuWiki — це лише одна з багатьох доступних вікі, хоча вона досить хороша. Одним із великих плюсів є те, що DokuWiki відносно легка і може працювати на сервері, на якому вже запущено інші служби, за умови, що у вас є простір і пам’ять.
Встановлення залежностей¶
Мінімальна версія PHP для DokuWiki тепер становить 7.2, і це саме те, що поставляється з Rocky Linux 8. Rocky Linux 9.0 поставляється з PHP версії 8.0, яка також повністю підтримується. Тут ми вказуємо пакети, які вже можуть бути встановлені:
dnf install tar wget httpd php php-gd php-xml php-json php-mbstring
Ви побачите список додаткових залежностей, які буде встановлено, і таке повідомлення:
Is this ok [y/N]:
Далі відповідайте "y" і натисніть "Enter", щоб установити.
Створення каталогів і зміна конфігурації¶
Конфігурація Apache¶
Якщо ви прочитали процедуру Apache Sites Enabled, ви знаєте, що нам потрібно створити кілька каталогів. Ми почнемо з додавання каталогу конфігурації httpd:
mkdir -p /etc/httpd/{sites-available,sites-enabled}
Нам потрібно відредагувати файл httpd.conf:
vi /etc/httpd/conf/httpd.conf
І додайте це в самий низ файлу:
Include /etc/httpd/sites-enabled
Створіть файл конфігурації сайту в sites-available:
vi /etc/httpd/sites-available/com.example
Файл конфігурації має виглядати приблизно так:
<VirtualHost *>
ServerName example.com
DocumentRoot /var/www/sub-domains/com.example/html
<Directory ~ "/var/www/sub-domains/com.example/html/(bin/|conf/|data/|inc/)">
<IfModule mod_authz_core.c>
AllowOverride All
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
</IfModule>
</Directory>
ErrorLog /var/log/httpd/example.com_error.log
CustomLog /var/log/httpd/example.com_access.log combined
</VirtualHost>
Зауважте, що наведений вище пункт «AllowOverride All» дозволяє працювати файлу .htaccess (захист для певного каталогу).
Зв’яжіть файл конфігурації з підтримкою сайтів, але поки що не запускайте веб-служби:
ln -s /etc/httpd/sites-available/com.example /etc/httpd/sites-enabled/
Apache DocumentRoot¶
Нам також потрібно створити наш DocumentRoot. Для цього:
mkdir -p /var/www/sub-domains/com.example/html
Встановлення DokuWiki¶
На вашому сервері перейдіть до кореневого каталогу.
cd /root
Тепер, коли наше середовище готове до роботи, давайте отримаємо останню стабільну версію DokuWiki. Ви можете знайти це, перейшовши на сторінку завантаження, і ліворуч на сторінці в розділі "Версія" ви побачите "Стабільна (Рекомендовано) (пряме посилання)."
Клацніть правою кнопкою миші на частині "(пряме посилання)" та скопіюйте адресу посилання. У консолі вашого сервера DokuWiki введіть «wget» і пробіл, а потім вставте скопійоване посилання в терміналі. Ви повинні отримати щось на зразок цього:
wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz
Перш ніж розпакувати архів, подивіться на вміст за допомогою tar ztf
, щоб побачити вміст архіву:
tar ztvf dokuwiki-stable.tgz
Помітили названий датований каталог попереду всіх інших файлів, який виглядає приблизно так?
... (more above)
dokuwiki-2020-07-29/inc/lang/fr/resetpwd.txt
dokuwiki-2020-07-29/inc/lang/fr/draft.txt
dokuwiki-2020-07-29/inc/lang/fr/recent.txt
... (more below)
Нам не потрібний цей провідний іменований каталог, коли ми розпаковуємо архів, тому ми збираємося використати деякі параметри з tar, щоб виключити його. Першим варіантом є "--strip-components=1", який видаляє цей провідний каталог.
Друга опція — це опція «-C», яка вказує tar, куди ми хочемо розпакувати архів. Отже, розпакуйте архів за допомогою цієї команди:
tar xzf dokuwiki-stable.tgz --strip-components=1 -C /var/www/sub-domains/com.example/html/
Після того, як ми виконаємо цю команду, весь DokuWiki має бути в нашому DocumentRoot.
Нам потрібно зробити копію файлу .htaccess.dist, який надійшов із DokuWiki, і залишити там старий файл на випадок, якщо нам знадобиться повернутися до оригіналу в майбутнє.
У процесі ми змінимо назву цього файлу просто на .htaccess, що й буде шукати apache. Для цього:
cp /var/www/sub-domains/com.example/html/.htaccess{.dist,}
Тепер нам потрібно змінити право власності на новий каталог і його файли на користувача та групу apache:
chown -Rf apache.apache /var/www/sub-domains/com.example/html
Налаштування DNS або /etc/hosts¶
Перш ніж ви зможете отримати доступ до інтерфейсу DokuWiki, вам потрібно встановити роздільну здатність імен для цього сайту. Для тестування ви можете використати свій файл /etc/hosts.
У цьому прикладі припустімо, що DokuWiki працюватиме на приватній IPv4-адресі 10.56.233.179. Припустімо також, що ви змінюєте файл /etc/hosts на робочій станції Linux. Для цього запустіть:
sudo vi /etc/hosts
Потім змініть файл hosts, щоб він виглядав приблизно так (зверніть увагу на IP-адресу вище в наведеному нижче прикладі):
127.0.0.1 localhost
127.0.1.1 myworkstation-home
10.56.233.179 example.com example
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Коли ви завершите тестування та будете готові запустити роботу для всіх, вам потрібно буде додати цей хост до DNS-сервера. Це можна зробити за допомогою приватного DNS-сервера або відкритого DNS-сервера.
Запуск httpd¶
Перш ніж розпочати httpd, давайте перевіримо, чи наша конфігурація правильна:
httpd -t
Ви повинні отримати:
Syntax OK
Якщо так, ви повинні бути готові запустити httpd, а потім завершити налаштування. Почнемо з увімкнення httpd для запуску під час завантаження:
systemctl enable httpd
А потім почніть наступне:
systemctl start httpd
Тестування DokuWiki¶
Тепер, коли наше ім’я хоста налаштовано для тестування та веб-службу запущено, наступним кроком буде відкрити веб-браузер і ввести це в адресному рядку:
http://example.com/install.php
Або
http://example.com/install.php
Будь-який має працювати, якщо ви налаштуєте файл hosts, як зазначено вище. Це приведе вас до екрана налаштування, щоб ви могли завершити налаштування:
- У полі «Wiki Name» введіть назву нашої вікі. Приклад «Технічна документація»
- У полі «Superuser» введіть ім’я адміністратора. Наприклад, "admin"
- У полі «Real name» введіть справжнє ім’я адміністратора.
- У полі «E-Mail» введіть адресу електронної пошти адміністратора.
- У полі «Password» введіть безпечний пароль користувача-адміністратора.
- У полі «once again» введіть той самий пароль ще раз.
- З випадаючого меню «Initial ACL Policy» виберіть варіант, який найкраще підходить для вашого середовища.
- Виберіть відповідний прапорець для ліцензії, під якою ви хочете розмістити свій вміст.
- Залиште позначеним (або зніміть, якщо бажаєте) прапорець «Раз на місяць надсилати анонімні дані про використання розробникам DokuWiki»
- Натисніть кнопку «Зберегти»
Тепер ваша вікі готова для додавання вмісту.
Захист DokuWiki¶
Окрім політики ACL, яку ви щойно створили, розгляньте:
Ваш брандмауер¶
Примітка
Жоден із цих прикладів брандмауера не робить жодних припущень щодо того, які ще служби вам може знадобитися дозволити на вашому сервері Dokuwiki. Ці правила базуються на нашому середовищі тестування й стосуються ТІЛЬКИ дозволу доступу до IP-блоку ЛОКАЛЬНОЇ мережі. Вам знадобиться більше послуг, дозволених для робочого сервера.
Перш ніж сказати що все готово, потрібно подумати про безпеку. По-перше, ви повинні запустити брандмауер на сервері. Ми припустимо, що ви використовуєте один із наведених нижче брандмауерів.
Замість того, щоб усі мали доступ до вікі, ми припустимо, що будь-хто в мережі 10.0.0.0/8 знаходиться у вашій приватній локальній мережі, і це єдині люди, яким потрібен доступ до сайту.
Брандмауер iptables
(не підтримується)¶
Важливо
Процес брандмауера iptables
у Rocky Linux 9.0 застарів (все ще доступний, але, ймовірно, зникне в наступних випусках, можливо, вже в Rocky Linux 9.1). З цієї причини ми рекомендуємо перейти до процедури firewalld
, наведеної нижче, якщо ви робите це на версії 9.0 або новішій.
Зверніть увагу, що вам можуть знадобитися інші правила для інших служб на цьому сервері, і що цей приклад враховує лише веб-служби.
Спочатку змініть або створіть файл /etc/firewall.conf:
vi /etc/firewall.conf
#IPTABLES=/usr/sbin/iptables
# Unless specified, the default for OUTPUT is ACCEPT
# The default for FORWARD and INPUT is DROP
#
echo " clearing any existing rules and setting default policy.."
iptables -F INPUT
iptables -P INPUT DROP
# web ports
iptables -A INPUT -p tcp -m tcp -s 10.0.0.0/8 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s 10.0.0.0/8 --dport 443 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
/usr/sbin/service iptables save
Після створення сценарію переконайтеся, що він виконуваний:
chmod +x /etc/firewall.conf
Потім виконайте сценарій:
/etc/firewall.conf
Це виконає правила та збереже їх, щоб вони були перезавантажені під час наступного запуску iptables або під час завантаження.
Брандмауер firewalld
¶
Якщо ви використовуєте firewalld
як свій брандмауер (а до цього часу ви, ймовірно, маєте), ви можете застосувати ті самі концепції за допомогою синтаксис firewall-cmd
брандмауера.
Ми будемо дублювати правила iptables
(вище) правилами firewalld
:
firewall-cmd --zone=trusted --add-source=10.0.0.0/8 --permanent
firewall-cmd --zone=trusted --add-service=http --add-service=https --permanent
firewall-cmd --reload
Після додавання наведених вище правил і перезавантаження служби firewalld виведіть свою зону в список, щоб переконатися, що там є все, що вам потрібно:
firewall-cmd --zone=trusted --list-all
який повинен показати вам щось подібне, якщо все вищезазначене спрацювало правильно:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 10.0.0.0/8
services: http https
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
SSL¶
Для найкращої безпеки вам слід розглянути можливість використання SSL, щоб весь веб-трафік був зашифрований. Ви можете придбати SSL у постачальника SSL або скористатися Let's Encrypt.
Висновок¶
Незалежно від того, чи потрібно вам задокументувати процеси, політику компанії, програмний код чи щось інше, вікі — чудовий спосіб це зробити. DokuWiki — це безпечний, гнучкий, простий у використанні, відносно простий у встановленні та розгортанні продукт, який є стабільним проектом, який існує вже багато років.
Author: Steven Spencer
Contributors: Ezequiel Bruni, Ganna Zhyrnova