-
Notifications
You must be signed in to change notification settings - Fork 0
/
guide
277 lines (264 loc) · 24.5 KB
/
guide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
VirtualMachine установлена на маке.
--
Гайд по первому запуску VM: https://www.virtualbox.org/manual/ch01.html . Пункты до 1.7 надо прочитать.
--
После конфигурации VM у нас пустая система. То, что мы выбирали Debian 64 bit и т.д. и т.п. не даёт нам готовую систему - её надо скачать и установить.
--
Скачать последнюю версию Debian можно тут: https://www.debian.org/distrib/
--
Гайд по установке Debian (правда, там про 10 версию, а я ставил 11): https://linuxhint.com/install_debian10_virtualbox/
--
Установка а-ля Да-да-да-принять-ок-ага-принять-далее-далее-ок, но некоторые вещи диктуются сабджектом
--
Про установку:
1. Устанавливал через Install (не graphical install)
2. Language - English
3. Location - Other -> Europe -> Russian Federation
4. Locale (локаль) - United States
5. Keymap use - American English
/subject---
6. Hostname - <имяпользователя>42. Для меня - stycho42.
"Hostname - это одно слово, служащее идентификатором вашей системы в интернетах. Не знаешь, как назвать - спроси сисадмина (а мы спросим сабджект). Делаешь дома (сам себе сисадмин) - делай как хочешь."
"
a) The hostname of your virtual machine must be your login ending with 42 (e.g.,
wil42). You will have to modify this hostname during your evaluation.
"
---subject\
7. "Domain name - часть вашего адреса в интернете, которая пишется после вашего hostname (типа stycho42domainname.com). Обычно это то, что заканчивается на .com, .net, .edu и т.д.. Если вы сам себе сисадмин, выбирайте domain name на своё усмотрение, но следите, чтобы для всех компов сети оно было одинаковым. Оставил пустым.
/subject---
8. Устанавливаем пароль для суперпользователя sudo. Pjacoby1488\0
"
You have to implement a strong password policy
a) Your password must be at least 10 characters long. It must contain an uppercase
letter and a number. Also, it must not contain more than 3 consecutive identical
characters.
b) The password must not include the name of the user.
"
---subject\
9. Создаём пользователя, который не суперпользователь. Создал Shawanda Tycho.
/subject---
10. Присваиваем пользователю, который не суперпользователь, username. Присвоил stycho.
"
a) In addition to the root user, a user with your login as username has to be present.
"
---subject\
---subject/
11. Устанавливаем пароль для пользователя, который не суперпользователь. 8246
"
a) Your password must be at least 10 characters long. It must contain an uppercase
letter and a number. Also, it must not contain more than 3 consecutive identical
characters.
b) The password must not include the name of the user.
c) The password must have at least 7 characters that are not part of the former password.
"
---subject\
12. Timezone - Moscow.
---subject/
13. Разбиваем диск.
Чтоб понимать, что за блоки, разделы и т.п., читаем это и обе ссылки из примечания.
https://www.8host.com/blog/osnovy-upravleniya-ustrojstvami-xraneniya-dannyx-v-linux/
Вот это тоже можно прочитать:
http://xgu.ru/wiki/LVM
Тут написано, почему нельзя создать более 4 разделов (а также можно догадаться, каким должен быть sda5 - первичным или логическим, и почему sda2 создавать явно не нужно):
https://help.ubuntu.ru/wiki/%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8B_%D0%B8_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_linux
lsblk отображает информацию об устройствах хранения.
"
a) You must create at least 2 encrypted partitions using LVM.
"
Это для тех, кто не любит запариться. Я делал структуру сразу под бонусную часть.
Последовательность:
1. Создаём два раздела:
1) sda1 на 500М, форматим его в ext4, он у нас первичный. Точка монтирования - /boot.
2) sda5 на всю котлету, его мучаем LVM-ом. Он у нас первый логический, потому и пятый. (но для LVM-
а он физический, логический он для таблицы разделов MBR)
2. Создаём зашифрованный раздел из sda5.
3. Создаём группу томов, в которую добавляем один лишь зашифрованный раздел sda5.
4. Создаём все необходимые по сабжу логические тома и указываем их размер: root, swap, home, var-log(дефис один) и т.д. логические тома - это наши будущие директории. То, что мы их так назвали, ничего не значит. Сами они не смонтируются.
5. Монтируем наши логические тома к файловой структуре дебиана - тут все по наитию. Сначала выбираем тип ФС, которая должна быть у логического тома (для всех, кроме swap, - ext4), потом выбираем точку монтирования (для var-log вручную вписываем var/log).
6 Подтверждаем, что всё ок и запускаем установку дебиана.
---subject\
---/subject
14. Устанавливаем дебиана в стиле ок-да-подтвердить-ага, но
На шаге с "Software selection" убираем установку графики, оставляем ssh-server и standard system utilities, иначе бан в жбан.
GRUB добавляем в главную загрузочную запись.
Затем GRUB устанавливаем на наш единственный диск - sda.
---subject\
15. Ребутаемся и выбираем первый варик загрузки, вводим Encryption Passphrase. (вводимые символы никак не отображаются на экране, даже ****. пишем и надеемся, что пишем правильно)
16. Вводим логин и пароль пока единственного пользователя. Для меня - stycho. А пароль 8246.
17. Должон загрузиться терминал.
18. Нужно установить утилиту sudo и добавить вашего единственного пользователя в группу sudo. Для этого читаем https://losst.ru/ustanovka-sudo-v-debian-10 и комменты.
Или тут: https://www.8host.com/blog/nachalnaya-nastrojka-servera-debian-10/ .
---/subject
18. Чем отличается apt от aptitude: https://www.tecmint.com/difference-between-apt-and-aptitude/
---subject\
19. Лучше установить aptitude: sudo apt install aptitude.
20. --Про настройку UFW : https://andreyex.ru/debian/kak-nastroit-brandmauer-s-ufw-v-debian-10/https://andreyex.ru/debian/kak-nastroit-brandmauer-s-ufw-v-debian-10/ .
https://www.8host.com/blog/nastrojka-brandmauera-ufw-na-servere-debian-10/
--Про подключение к виртуальной машине с локальной (часть про настройку VirtualBox): https://comp-security.net/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F-%D0%BA-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B5-%D0%BF%D0%BE-ssh/
--Про подключение к виртуальной машине с локальной (часть про команды в терминале): https://www.8host.com/blog/ssh-podklyuchenie-k-serveru/
---/subject
21. Про политику паролей. (лучше делать это всё на последнем этапе)
1) Ломаем глаза и читаем, как и с помощью чего это делать:
https://itsecforu.ru/2019/03/22/%F0%9F%92%AA-%D0%BF%D1%80%D0%B8%D0%BD%D1%83%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D0%BF%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D1%83/
2) Список параметов для настройки
https://habr.com/ru/company/otus/blog/448996/
a) "Your password has to expire every 30 days." sudo nano /etc/login.defs PASS_MAX_DAYS 30
b) "The minimum number of days allowed before the modification of a password will be set to 2." etc/login.defs PASS_MIN_DAYS 2
c) "The user has to receive a warning message 7 days before their password expires." /etc/login.defs PASS_WARN_AGE 7
дальше пытаем конфиг /etc/pam.d/common-password
d) "Your password must be at least 10 characters long" : minlen=10
d) "It must contain an uppercase letter and a number." : ucredit=-1 dcredit=-1
d) "Also, it must not contain more than 3 consecutive identical" : maxrepeat=3
e) "The password must not include the name of the user." : usercheck=1
f) "The following rule does not apply to the root password: The password must have at least 7 characters that are not part of the former password." : difok=7
g) "Of course, your root password has to comply with this policy." : enforce_for_root
characters.
Чтоб поменять пароль, надо ввести passwd.
---subject\
---/subject
22. Про конфигурацию sudo.
1) "A custom message of your choice has to be displayed if an error due to a wrong
password occurs when using sudo."
--insults-- Если этот флаг установлен, то sudo сообщит пользователям, когда они вводят неверный пароль. По умолчанию этот флаг выключен. (Если эту шляпу включить, badpass_message не робит!! Так что не включайте, пацаны - у меня от этой херни брат умер).
--badpass_message--
Сообщение, которое будет отображено, если пользователь введет неверный пароль. По умолчанию это Sorry, try again., если выключено использование insults.
--timestamp_timeout=1--
Включаем такую штуку, чтоб пароль судо "жил" всего минуту и через минуту просил ввести его снова - так проще чекать, что изменения работают. --passwd_timeout-- почему-то не завёлся.
2) "Authentication using sudo has to be limited to 3 attempts in the event of an incorrect password."
--passwd_tries--
Количество пользовательских попыток ввести пароль прежде, чем sudo регистрирует неудачу и прекращает работу. По умолчанию 3.
3) "Each action using sudo has to be archived, both inputs and outputs. The log file
has to be saved in the /var/log/sudo/ folder."
--syslog--
Средство для регистрации событий в системном журнале Syslog (укажите отрицание для отключения регистрации в syslog). По умолчанию установлено authpriv.
Про логгирование ввода/вывода и TTY: https://blog.sedicomm.com/2018/03/21/poleznye-nastrojki-sudoers-dlya-sudo-v-linux/
4) "The TTY mode has to be enabled for security reasons."
Чтобы включить sudo из реального tty, но не с помощью скриптов cron или cgi-bin, добавьте строку:
Defaults requiretty .
5) "For security reasons too, the paths that can be used by sudo must be restricted.
Example:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Тут, как я понял, прописываем пути из примера в переменную secure_path. Хотя это вялая догадка.
---subject\
---/subject
23. Как поменять имя хоста: https://www.cyberciti.biz/faq/ubuntu-change-hostname-command/
---subject\
---/subject
24. Управление группами и пользователями: https://help.ubuntu.ru/wiki/%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%B8_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B
---subject\
25. Про утилиту ss.
1) Читаем: https://habr.com/ru/company/ruvds/blog/346744/
Флаги n и p - комменты и пробуем ручками.
26. Про то, как сменить порт для ssh на 4242: https://www.cyberciti.biz/faq/howto-change-ssh-port-on-linux-or-unix-server/
27. Про apparmor тут показалось наиболее понятно (но не понял, где он может юзаться в проекте): http://vasilisc.com/rules_apparmor
https://losst.ru/nastrojka-apparmor-v-ubuntu-16-04
---/subject
28. Пишем скрипт.
https://parallel.uran.ru/book/export/html/418
https://zalinux.ru/?p=458
https://www.thegeekstuff.com/2010/02/awk-conditional-statements/
https://www.opennet.ru/man.shtml?topic=awk&russian=0&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man
https://www.opennet.ru/man.shtml?topic=grep&category=1
Your script must always be able to display the following information:
1) "The architecture of your operating system and its kernel version."
https://unix.stackexchange.com/questions/12453/how-to-determine-linux-kernel-architecture
2) "The number of physical processors"
3) "The number of virtual processors"
https://www.cyberciti.biz/faq/check-how-many-cpus-are-there-in-linux-system/
4) "The current available RAM on your server and its utilization rate as a percentage"
https://www.binarytides.com/linux-command-check-memory-usage/
https://www.shell-tips.com/bash/math-arithmetic-calculation/
https://www.opennet.ru/man.shtml?topic=awk&russian=0&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man
https://bl831.als.lbl.gov/~gmeigs/scripting_help/printf_awk_notes.txt
5) "The current available memory on your server and its utilization rate as a percentage"
df -h или https://opensource.com/article/18/7/how-check-free-disk-space-linux
6) "The current utilization rate of your processors as a percentage"
https://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
7) "The date and time of the last reboot"
https://www.cyberciti.biz/tips/linux-last-reboot-time-and-date-find-out.html
8) "Whether LVM is active or not"
я юзал systemctl status lvm2-monitor, считая, что этот сервис отражает состояние LVM
9) "The number of active connections"
ss -t (судя по тому, что в задании только TCP просят)
10) "The number of users using the server"
who -q
11) "The IPv4 address of your server and its MAC (Media Access Control) address"
Мб не оч автоматизированно, но брал по имени устройства (второе в выводе ip address) отдельно IP и отдельно MAC:
ip: ip address show имя_устройства
МАС: инфа лежит в каталоге /sys/class/net/имя_устройства/address
12) The number of commands executed with the sudo program.
Так как не сказано, за какой период, то просто посчитал кол-во записей в лог-файле, который по заданию переносили в папку /var/log/sudo . Только он одно сообщение в две строки пишет, поэтому еще надо на 2 поделить. Это не совсем правильно, пушто мы и до этого юзали судо, и он писал в другой лог-файл, но мне пох.
---subject\
---subject/
29. Делаем так, чтоб скрипт робил по расписанию.
1) "At server startup, the script will display some information (listed below) on all terminals every 10 minutes (take a look at wall). The banner is optional. No error mustbe visible."
man wall, https://debian-handbook.info/browse/ru-RU/stable/sect.task-scheduling-cron-atd.html
---subject\
BONUS PART
30. Про отличия lighttpd и nginx: https://www.freelancinggig.com/blog/2017/05/25/lighttpd-vs-nginx-need-know/
31. Про установку lighttpd, MariaDB и PHP.
Вот отсюда не все пакеты ставил: https://www.atlantic.net/dedicated-server-hosting/how-to-install-wordpress-with-lighttpd-web-server-on-ubuntu-20-04/?__cf_chl_captcha_tk__=pmd_AzY1rbfbQzqZoAlA5cK.akfed1rLVP1F68mz19qfSpU-1635599368-0-gqNtZGzNA2WjcnBszQil
Этот тоже юзал, но нужно быть осторожнее с конфигами: https://www.vultr.com/docs/how-to-install-lighttpd-php-and-mariadb-on-ubuntu-20-04-lts
Пакеты: lighttpd, php-fpm, php-mysql, php7.4-cgi, default-mysql-server, mariadb-server. Создавать бд wpuser надо - после этого заработал вордпресс( но после ребута ломается! Если это так, то мне помогло удаление одного лог-файла ib_logfile0 : https://stackoverflow.com/questions/26439742/getting-error-plugin-innodb-registration-as-a-storage-engine-failed-when-sta).
В итоге и после этого Машка валилась. Сносил вордпресс, сносил Машку, потом заново ставил все. Потом начал бунтовать вордпресс, что бд под сайт в Машке уже создана. В итоге создал новую бд и поменял в конфигах вордпресса, чтоб он в неё писал. В итоге всё перестало отваливаться. Но мб временно.
Если что-то пошло не так и надо подчистую снести пакет и конфиги: https://askubuntu.com/questions/187888/what-is-the-correct-way-to-completely-remove-an-application
32. Про бонусный сервис, который я юзал: https://zen.yandex.ru/media/id/5a941fb2f0317316496e8bf7/kak-otpravliat-pochtu-iz-komandnoi-stroki-v-ubuntu-linux-5ad9de11bce67ec3e62fe19e
33. Забыл создать группу stycho42 и добавить туда пользователя stycho:
https://help.ubuntu.ru/wiki/%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%B8_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B
https://linuxize.com/post/how-to-add-user-to-group-in-linux/
Защита
1) Как работает виртуальная машина.
2) Выбор операционки.
3) Базовые отличия между CentOS и Debian.
4) Смысл (цель) использования виртуальных машин.
5) Отличия apt и aptitude, что такое APPArmor
6) Во время защиты должен вылезать скрипт каждые 10 минут.
7) Убедиться, что нет графического интерфейса при запуске машины
8) При подключении к машине должен быть затребован пароль
9) К машине нужно подключиться под каким-то пользователем, который не root -- check
10) Проверить, что пароли соответствуют политике паролей.
11) Проверить, что UFW запущен
12) Проверить, что SSH запущен
13) Проверить, что это дебиан или центос
14) Проверить, что пользователь с именем stycho есть и входит в группы sudo и stycho42
(у меня не было, поэтому:
sudo groupadd stycho42
sudo usermod -a -G stycho42 stycho)
15) Проверить корректную настройку политики паролей, выполнив следующие шаги:
а) Создайте нового пользователя с паролем, удовлетворяющем сабджект. Тут надо объяснить, как конфигурируется политика паролей. (Обычно нужно отредактировать один или два файла для этого)
б) Когда новый пользователь создан, создать группу evaluating и добавить в неё пользователя. Проверить, что пользователь присутствует в этой группе.
16) Объяснить преимущества политики паролей.
17) Проверить, что хостнейм - stycho42
18) Изменить хотстнейм на логин_проверяющего_42 и ребутнуться, проверив, что хостнейм сменился.
либо sudo hostname <новое_имя_хоста>
sudo nano /etc/hostname
sudo nano /etc/hosts
либо без первой строчки и ребутаемся
19) Можно вернуть старый хостнейм
20) Проверить разбивку на разделы и сравнить с сабджектом.
21) Тут ещё надо затереть про LVM: что это и как с ней работать.
22) Проверить, что судо установлена на машине
23) Добавить какого-нибудь пользователя в группу судо
24) Объяснить, как работает судо.
25) Сгонять в папку /ver/log/sudo, проверить что она вообще есть, и что в ней есть файлы, проверить их содержимое. Проверить, что при выполнении какой-либо команды от судо логгируется в журнал.
26) Проверить, что UFW корректно установлена на машине
27) Проверить, что UFW работает
28) Объяснить, что это за зверь и зачем его юзать.
29) Вывести все активные правила в UFW и убедиться, что там есть правило для порта 4242
30) Добавить новое правило для порта 8080 и проверить, что оно добавилось
31) Удалить это правило
32) Проверить, что SSH правильно установлен на машине
33) Проверить, что он норм работает
34) Объяснить, что такое SSH и зачем он нужен.
35) Убедиться, что SSH слушает только 4242 порт.
36) Зайти на сервак через ssh как новый пользователь (которого создали при проверке)
37) Проверить, что нельзя зайти на сервак под рутом.
38) Показать код скрипта и объяснить его
39) Объяснить, что такое cron
40) Рассказать, как запускать скрипт каждые 10 минут
41) Сделать так, чтоб скрипт запускался каждую минуту
42) Сделать так, чтоб скрипт не запускался каждую минут после перезагрузки сервака.
Бонусная часть
43) Проверить, что разбиение на разделы корректное
44) Проверить работу вордпресса, что он юзает только lighty, MariaDB, Php
45) Проверить, что установлен ещё какой-то сервис и он робит. Объяснить, как он робит и почему он полезный.