security.rst 95 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072
  1. ..
  2. SPDX-FileCopyrightText: 2018-2023 EasyCoding Team and contributors
  3. SPDX-License-Identifier: CC-BY-SA-4.0
  4. .. _security:
  5. **************
  6. Безопасность
  7. **************
  8. .. index:: selinux
  9. .. _selinux:
  10. Что такое SELinux?
  11. ======================
  12. SELinux -- это мандатная система контроля доступа, ограничивающая доступ ряду сервисов к файлам и каталогам.
  13. Более подробная информация может быть получена `здесь <https://ru.wikipedia.org/wiki/SELinux>`__.
  14. .. index:: selinux, disable selinux, disable
  15. .. _selinux-temp:
  16. Как мне временно отключить SELinux?
  17. =======================================
  18. Мы настоятельно не рекомендуем этого делать, однако если это необходимо, то для временного однократного отключения SELinux, передадим ядру Linux специальный :ref:`параметра ядра <kernelpm-once>`:
  19. .. code-block:: text
  20. SELINUX=0
  21. .. index:: selinux, disable selinux
  22. .. _selinux-disable:
  23. Как мне навсегда отключить SELinux?
  24. =======================================
  25. Для постоянного отключения SELinux, откроем его главный файл файл конфигурации ``/etc/selinux/config`` в текстовом редакторе:
  26. .. code-block:: text
  27. sudoedit /etc/selinux/config
  28. Изменить значение директивы ``SELINUX`` на одно из допустимых значений:
  29. * ``enforcing`` — включён и блокирует всё, что явно не разрешено;
  30. * ``permissive`` — включён, но ничего не блокирует, а лишь записывает события в :ref:`системный журнал <journal-current>`;
  31. * ``disabled`` — полностью отключён.
  32. Изменения вступят в силу при следующей загрузке системы.
  33. .. index:: selinux, status selinux, status
  34. .. _selinux-status:
  35. Как узнать текущий статус SELinux?
  36. =======================================
  37. Получим текущий статус SELinux при помощи одной из следующих команд: ``getenforce`` или ``sestatus``.
  38. .. index:: auditd, selinux, error, security
  39. .. _selinux-auditd:
  40. Как разрешить заблокированные действия SELinux?
  41. ===================================================
  42. По умолчанию :ref:`SELinux <selinux>` будет блокировать доступ к любым файлам, каталогам, сокетам, которые не разрешены в политиках для конкретного процесса. Это вызывает множество проблем, поэтому пользователи зачастую предпочитают :ref:`отключать SELinux <selinux-disable>`, что в корне неверно. Вместо этого следует разобраться в причине блокировки и создать разрешающее правило.
  43. Очистим журнал аудита для того, чтобы избавиться от предыдущих ошибок и случайно не позволить лишние действия, накопившиеся с момента его прошлой ротации:
  44. .. code-block:: text
  45. sudo bash -c "cat /dev/null > /var/log/audit/audit.log"
  46. Запустим приложение, модуль ядра и т.д., который вызывает срабатывание SELinux и блокировку доступа к ресурсу (файлу, каталогу, сокету). Как только это произойдёт, воспользуемся утилитой **audit2allow** для анализа журнала аудита, облегчающей создание новых разрешающих правил для SELinux:
  47. .. code-block:: text
  48. sudo bash -c "cat /var/log/audit/audit.log | audit2allow -M foo-bar"
  49. В результате работы данной утилиты будет создан новый модуль ``foo-bar.te``, в котором разрешаются действия, записи о запрещении которых были внесены в журнал auditd ранее.
  50. Перед применением этого файла и созданием политики SELinux обязательно загрузим его в текстовый редактор и проверим корректность, т.к. в нем может содержаться больше разрешающих правил, чем требуется, а также присутствуют подсказки о том, как правильно настроить SELinux.
  51. В сгенерированном файле модуля ``foo-bar.te`` после комментария *This avc can be allowed using one of the these booleans* присутствует список переменных двоичного типа, установка которых поможет разрешить заблокированное действие. Справочную информацию можно получить из документации SELinux:
  52. .. code-block:: text
  53. getsebool -a
  54. Описание переменных SELinux, относящихся к работе веб-сервера, можно найти `здесь <https://dwalsh.fedorapeople.org/SELinux/httpd_selinux.html>`__.
  55. .. index:: httpd, selinux, access rights, security
  56. .. _selinux-httpd:
  57. Как настроить SELinux так, чтобы веб-сервер мог создавать файлы и каталоги?
  58. ==============================================================================
  59. Если при работе веб-сервера в журналах появляются сообщения вида:
  60. .. code-block:: text
  61. Warning: chmod(): Permission denied in /var/www/html/foo-bar/foo.php on line XXX
  62. Warning: Directory /var/www/html/foo-bar/foo not writable, please chmod to 755 in /var/www/html/foo-bar/foo.php on line XXX
  63. Они означают, что процесс веб-сервера (или интерпретатора языка программирования) не может получить доступ на запись. Если права доступа (chmod и chown) при этом установлены верно, значит доступ блокирует :ref:`SELinux <selinux>`.
  64. Установим правильный контекст безопасности для всех каталогов внутри ``document_root/foo-bar``:
  65. .. code-block:: text
  66. sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/foo-bar(/.*)?"
  67. Сбросим контекст безопасности для всех файлов внутри document_root рекурсивно:
  68. .. code-block:: text
  69. sudo restorecon -Rv /var/www/html
  70. Для отмены произведённых изменений контекста выполним:
  71. .. code-block:: text
  72. sudo semanage fcontext -d "/var/www/html/foo-bar(/.*)?"
  73. Получим список контекстов для httpd:
  74. .. code-block:: text
  75. sudo semanage fcontext -l | grep httpd
  76. Если предудущая команда выводит очень много информации, осуществим фильтрацию вывода:
  77. .. code-block:: text
  78. sudo semanage fcontext -l | grep /var/www/html
  79. Получим список файлов и каталогов с установленным контекстом SELinux:
  80. .. code-block:: text
  81. ls -laZ /var/www/html/foo-bar
  82. Более полную информацию о контекстах безопасности и работе с ними можно найти `здесь <https://docs.fedoraproject.org/en-US/Fedora/25/html/SELinux_Users_and_Administrators_Guide/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html>`__.
  83. Откроем текстовый редактор и создадим новый модуль ``httpd_wr.te``:
  84. .. code-block:: text
  85. module httpd_wr 1.0;
  86. require {
  87. type httpd_t;
  88. type httpd_sys_rw_content_t;
  89. class file { create write setattr rename unlink };
  90. class dir { create write setattr add_name remove_name rmdir };
  91. }
  92. allow httpd_t httpd_sys_rw_content_t:file { create write setattr rename unlink };
  93. allow httpd_t httpd_sys_rw_content_t:dir { create write setattr add_name remove_name rmdir };
  94. Проверим, скомпилируем и установим его:
  95. .. code-block:: text
  96. sudo checkmodule -M -m httpd_wr.te -o httpd_wr.mod
  97. sudo semodule_package -o httpd_wr.pp -m httpd_wr.mod
  98. sudo semodule -i httpd_wr.pp
  99. Больше полезной информации о модулях:
  100. * `создание модулей SELinux <https://habr.com/ru/company/pt/blog/142423/>`__;
  101. * `создание разрешений для классов <https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/SELinux_Guide/rhlcommon-section-0049.html>`__;
  102. * `информация о контекстах и настройках для веб-сервера <https://dwalsh.fedorapeople.org/SELinux/httpd_selinux.html>`__.
  103. .. index:: httpd, selinux, connection, network, port, security
  104. .. _selinux-connections:
  105. Как настроить SELinux так, чтобы веб-сервер мог осуществлять исходящие сетевые соединения?
  106. ==============================================================================================
  107. .. _nsl-first:
  108. Первый вариант (самый правильный):
  109. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  110. Откроем текствый редактор и создадим новый модуль ``httpd_network.te``:
  111. .. code-block:: text
  112. module httpd_connect 1.0;
  113. require {
  114. type httpd_t;
  115. type ephemeral_port_t;
  116. class tcp_socket name_connect;
  117. }
  118. allow httpd_t ephemeral_port_t:tcp_socket name_connect;
  119. Проверим, скомпилируем и установим его:
  120. .. code-block:: text
  121. sudo checkmodule -M -m httpd_network.te -o httpd_network.mod
  122. sudo semodule_package -o httpd_network.pp -m httpd_network.mod
  123. sudo semodule -i httpd_network.pp
  124. Получим названия диапазонов портов:
  125. .. code-block:: text
  126. sudo semanage port -l
  127. Добавим порт в диапазон:
  128. .. code-block:: text
  129. semanage port -a -t ephemeral_port_t -p tcp 80-88
  130. Удалим порт из диапазона:
  131. .. code-block:: text
  132. semanage port -d -t ephemeral_port_t -p tcp 80-88
  133. Здесь **ephemeral_port_t** -- название диапазона, **tcp** -- используемый протокол, а **80-88** -- диапазон разрешаемых портов.
  134. .. _nsl-second:
  135. Второй вариант (быстрый, но менее безопасный)
  136. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  137. Разрешим любые исходящие соединения для веб-сервера:
  138. .. code-block:: text
  139. sudo setsebool -P httpd_can_network_connect on
  140. .. index:: openvpn, selinux, vpn, security
  141. .. _openvpn-selinux:
  142. OpenVPN не может получить доступ к сертификатам из-за SELinux. Что делать?
  143. ==============================================================================
  144. Это нормально ибо запущенные сервисы не могут получать доступ к каталогам пользователя, однако для OpenVPN сделано исключение в виде каталога ``~/.cert``.
  145. По умолчанию он не существует, поэтому его нужно создать и задать для него контекст безопасности SELinux:
  146. .. code-block:: text
  147. mkdir ~/.cert
  148. restorecon -Rv ~/.cert
  149. Теперь в нём можно размещать сертификаты и приватные ключи.
  150. .. index:: cpu, kpti, hardware, vulnerability, disable, mitigation
  151. .. _kpti:
  152. Можно ли отключить KPTI?
  153. ===========================
  154. KPTI -- это новый механизм ядра, направленный на защиту системы от уязвимости `Meltdown <https://ru.wikipedia.org/wiki/Meltdown_(%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C)>`__ в процессорах Intel. Настоятельно не рекомендуется его отключать, хотя это и возможно. Для этого необходимо и достаточно передать :ref:`параметр ядра <kernelpm-perm>`:
  155. .. code-block:: text
  156. nopti
  157. Параметр ``pti=off`` также поддерживается в полной мере.
  158. .. index:: cpu, spectre, hardware, vulnerability, disable, mitigation
  159. .. _spectrev1:
  160. Можно ли отключить защиту от Spectre v1?
  161. ============================================
  162. Программные заплатки могут быть отключены при помощи :ref:`параметра ядра <kernelpm-perm>`:
  163. .. code-block:: text
  164. nospectre_v1
  165. .. index:: cpu, spectre, hardware, vulnerability, disable, mitigation
  166. .. _spectrev2:
  167. Можно ли отключить защиту от Spectre v2?
  168. ============================================
  169. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  170. .. code-block:: text
  171. nospectre_v2
  172. .. index:: cpu, spectre, hardware, vulnerability, disable, mitigation
  173. .. _spectrev4:
  174. Можно ли отключить защиту от Spectre v4?
  175. ===========================================
  176. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  177. .. code-block:: text
  178. nospec_store_bypass_disable
  179. .. index:: cpu, l1tf, hardware, vulnerability, disable, mitigation
  180. .. _l1tf:
  181. Можно ли отключить защиту от L1TF?
  182. ======================================
  183. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  184. .. code-block:: text
  185. l1tf=off
  186. .. index:: cpu, mds, hardware, vulnerability, disable, mitigation
  187. .. _mds:
  188. Можно ли отключить защиту от MDS?
  189. =====================================
  190. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  191. .. code-block:: text
  192. mds=off
  193. .. index:: cpu, itlb, hardware, vulnerability, disable, mitigation
  194. .. _itlb:
  195. Можно ли отключить защиту от iTLB?
  196. =====================================
  197. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  198. .. code-block:: text
  199. nx_huge_pages=off
  200. .. index:: cpu, tsx, hardware, vulnerability, disable, mitigation
  201. .. _tsx:
  202. Можно ли отключить защиту от TSX?
  203. ====================================
  204. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  205. .. code-block:: text
  206. tsx=on
  207. Для полной деактивации должен использоваться совместно с :ref:`TAA <taa>`.
  208. .. index:: cpu, taa, hardware, vulnerability, disable, mitigation
  209. .. _taa:
  210. Можно ли отключить защиту от TAA?
  211. ====================================
  212. Да, при помощи :ref:`параметра ядра <kernelpm-perm>`:
  213. .. code-block:: text
  214. tsx_async_abort=off
  215. .. index:: cpu, kpti, hardware, vulnerability, disable, mitigation, l1tf, spectre, mds, itlb, tsx, taa
  216. .. _mitigations-off:
  217. Можно ли отключить все виды защит от уязвимостей в процессорах?
  218. ==================================================================
  219. Да. Начиная с версии ядра Linux 5.1.2, появился особый :ref:`параметр ядра <kernelpm-perm>`, отключающий все виды программных защит:
  220. .. code-block:: text
  221. mitigations=off
  222. .. index:: gpu, hardware, vulnerability, disable, mitigation, i915, intel
  223. .. _i915-mitigations:
  224. Можно ли отключить защиту от уязвимостей в Intel GPU?
  225. =========================================================
  226. Да. Начиная с версии ядра Linux 5.12, появился особый :ref:`параметр ядра <kernelpm-perm>`, отключающий все виды программных защит интегрированных видеокарт Intel:
  227. .. code-block:: text
  228. i915.mitigations=off
  229. .. index:: hardware, vulnerability, disable, mitigation, cpu
  230. .. _hardware-vuln:
  231. Как узнать защищено ли ядро от известных уязвимостей в процессорах?
  232. ========================================================================
  233. Ранее для этого применялись сторонние утилиты, но в современных версиях ядра для этого есть штатный механизм, который можно использовать:
  234. .. code-block:: text
  235. grep . /sys/devices/system/cpu/vulnerabilities/*
  236. .. index:: selinux, error
  237. .. _selinux-boot-error:
  238. При загрузке получаю ошибку SELinux. Как исправить?
  239. =======================================================
  240. Такое бывает если по какой-то причине сбился контекст безопасности SELinux. Исправить это можно двумя различными способами.
  241. *Способ первый*:
  242. .. code-block:: text
  243. sudo touch /.autorelabel
  244. sudo systemctl reboot
  245. Внимание! Следующая загрузка системы займёт много времени из-за переустановки контекста для всех файлов и каталогов. Ни в коем случае не следует её прерывать. По окончании система автоматически перезагрузится ещё один раз.
  246. *Способ второй*:
  247. .. code-block:: text
  248. sudo restorecon -Rv /
  249. sudo systemctl reboot
  250. После перезагрузки все ошибки, связанные с SELinux, должны исчезнуть.
  251. .. index:: luks, encryption, USB, cryptsetup
  252. .. _luks-usb:
  253. Как можно надёжно зашифровать файлы на USB устройстве?
  254. =========================================================
  255. См. `здесь <https://www.easycoding.org/2016/11/14/shifruem-vneshnij-nakopitel-posredstvom-luks.html>`__.
  256. .. index:: luks, encryption, home
  257. .. _luks-home:
  258. Можно ли зашифровать домашний раздел уже установленной системы?
  259. ==================================================================
  260. См. `здесь <https://www.easycoding.org/2016/12/09/shifruem-domashnij-razdel-ustanovlennoj-sistemy.html>`__.
  261. .. index:: luks, encryption, change password, password, cryptsetup
  262. .. _luks-change-password:
  263. Как сменить пароль зашифрованного LUKS раздела?
  264. ===================================================
  265. Сменить пароль достаточно просто. Достаточно выполнить следующую команду:
  266. .. code-block:: text
  267. sudo cryptsetup luksChangeKey /dev/sda1 -S 0
  268. Здесь **/dev/sda1** -- зашифрованный раздел диска, а **0** -- порядковый номер LUKS слота для пароля.
  269. Для успешной смены пароля раздел не должен быть смонтирован, поэтому если это корневой или домашний, то придётся выполнять загрузку с :ref:`LiveUSB <usb-flash>`.
  270. .. index:: luks, encryption, drive information, information, cryptsetup
  271. .. _luks-info:
  272. Как получить информацию о зашифрованном LUKS устройстве?
  273. =============================================================
  274. Если требуется получить подробную информацию о зашифрованном LUKS разделе (алгоритм шифрование, тип хеша и количество итераций и т.д.), можно воспользоваться утилитой **cryptsetup**:
  275. .. code-block:: text
  276. sudo cryptsetup luksDump /dev/sda1
  277. Здесь **/dev/sda1** -- зашифрованный раздел диска.
  278. .. index:: luks, encryption, performance, benchmark, cryptsetup
  279. .. _luks-benchmark:
  280. Насколько сильно шифрование LUKS снижает производительность дисковой подсистемы?
  281. =====================================================================================
  282. На современных процессорах с аппаратной поддержкой набора инструкций AES-NI снижение производительности практически незаметно даже на самых производительных NVMe SSD накопителях.
  283. Для того, чтобы оценить скорость работы на реальном оборудовании, в **cryptsetup** присутствует встроенный бенчмарк для тестирования разных алгоритмов шифрования и типа сцепления блоков шифротекста:
  284. .. code-block:: text
  285. cryptsetup benchmark
  286. .. index:: luks, encryption, performance, cpu
  287. .. _luks-aes:
  288. Как узнать поддерживает ли процессор моего ПК набор инструкций AES-NI?
  289. ===========================================================================
  290. Если в выводе ``/proc/cpuinfo`` присутствует строка **aes**, значит поддерживает:
  291. .. code-block:: text
  292. grep -Eq 'aes' /proc/cpuinfo && echo Yes || echo No
  293. .. index:: firewalld, firewall
  294. .. _firewalld-about:
  295. Что такое Firewalld?
  296. =======================
  297. Firewalld -- это современный динамически управляемый брандмауэр с поддержкой зон для интерфейсов.
  298. .. index:: firewalld, configuration, firewall
  299. .. _firewalld-configure:
  300. Как можно настраивать Firewalld?
  301. ==================================
  302. Для настройки применяется либо графическая утилита **firewall-config**, либо консольная **firewall-cmd**.
  303. Документацию можно `найти в Wiki <https://fedoraproject.org/wiki/FirewallD/ru>`__.
  304. .. index:: firewalld, configuration, firewall, hardening
  305. .. _firewalld-hardened:
  306. Как усилить настройки безопасности Firewalld?
  307. =================================================
  308. По умолчанию в Fedora Workstation применяется зона брандмауэра **FedoraWorkstation**, для которой разрешены входящие соединения на порты из диапазона 1025-65535, как по TCP, так и UDP.
  309. Если необходимо запретить все входящие подключения, кроме явно разрешённых, переключим зону на **public**:
  310. .. code-block:: text
  311. sudo firewall-cmd --set-default-zone=public
  312. .. index:: firewalld, cloak service, firewall
  313. .. _firewalld-hide-service:
  314. Как замаскировать сервис средствами Firewalld?
  315. =================================================
  316. См. `здесь <https://www.easycoding.org/2017/06/22/maskiruem-opredelyonnyj-servis-sredstvami-firewalld.html>`__.
  317. .. index:: firewalld, block addresses, ip, network, firewall
  318. .. _firewalld-block:
  319. Как запретить подключения с конкретных IP-адресов?
  320. ======================================================
  321. Достаточно добавить их в специально созданную зону **drop** файрвола:
  322. .. code-block:: text
  323. sudo firewall-cmd --permanent --zone=drop --add-source=1.2.3.4
  324. Здесь вместо **1.2.3.4** нужно указать необходимый IP-адрес или подсеть (**1.2.3.0/24**).
  325. .. index:: gpg, gnupg, signatures
  326. .. _gpg-signatures:
  327. Как работать с подписями GnuPG?
  328. ==================================
  329. См. `здесь <https://www.easycoding.org/2018/01/11/rabotaem-s-cifrovymi-podpisyami-gpg.html>`__.
  330. .. index:: gpg, encrypt files, encryption
  331. .. _gpg-encrypt:
  332. Как зашифровать и расшифровать файлы с определённой маской в текущем каталоге?
  333. ==================================================================================
  334. Шифрование всех файлов с маской *.7z.* (многотомные архивы 7-Zip):
  335. .. code-block:: text
  336. find . -maxdepth 1 -type f -name "*.7z.*" -exec gpg2 --out "{}.asc" --recipient "example@example.org" --encrypt "{}" \;
  337. Расшифровка:
  338. .. code-block:: text
  339. find . -maxdepth 1 -type f -name "*.asc" -exec gpg2 --out "$(basename {})" --decrypt "{}" \;
  340. .. index:: admin, user, sudo
  341. .. _admin-vs-user:
  342. Чем отличается пользователь-администратор от обычного?
  343. =========================================================
  344. Администратор (в терминологии программы установки Anaconda) имеет доступ к sudo.
  345. .. index:: admin, user, sudo
  346. .. _sudo-run:
  347. Как запустить команду с правами суперпользователя?
  348. =====================================================
  349. Для запуска чего-либо с правами суперпользователя необходимо использовать sudo:
  350. .. code-block:: text
  351. sudo foo-bar
  352. Здесь вместо **foo-bar** следует указать команду, путь к исполняемому файлу, скрипту и т.д.
  353. .. index:: admin, sudo, su
  354. .. _sudo-password:
  355. Какие пароли запрашивают sudo и su?
  356. ======================================
  357. Утилита sudo запрашивает текущий пароль пользователя, а su -- рутовый.
  358. .. index:: root password, password change, security
  359. .. _root-password:
  360. Как мне сменить пароль суперпользователя?
  361. ============================================
  362. Для смены или установки пароля суперпользователя при наличии доступа к sudo, можно выполнить:
  363. .. code-block:: text
  364. sudo passwd root
  365. .. index:: sudo, security
  366. .. _sudo-access:
  367. Как мне получить доступ к sudo?
  368. ==================================
  369. Если при установке Fedora, при создании пользователя, не был установлен флажок в чекбокс **Создать администратора**, то необходимо самостоятельно добавить пользовательский аккаунт в группу **wheel**:
  370. .. code-block:: text
  371. su -c "usermod -a -G wheel $(whoami)"
  372. .. index:: sudo, su, security
  373. .. _sudo-vs-su:
  374. Что лучше: sudo или su?
  375. ==========================
  376. Sudo ибо позволяет гибко настраивать права доступа, включая список разрешённых команд, а также ведёт полный журнал её использования.
  377. .. index:: sudo, file manager
  378. .. _sudo-file-manager:
  379. Почему я не могу запустить файловый менеджер с правами суперпользователя?
  380. ============================================================================
  381. Это сделано из соображений безопасности. Более подробная информация доступна `здесь <https://blog.martin-graesslin.com/blog/2017/02/editing-files-as-root/>`__.
  382. .. index:: sudo, config editing, config
  383. .. _sudo-edit-config:
  384. Как мне отредактировать конфиг, доступный только суперпользователю?
  385. ======================================================================
  386. Необходимо использовать **sudoedit**:
  387. .. code-block:: text
  388. sudoedit /путь/к/файлу/конфигурации.conf
  389. .. index:: sudo, config editing, config
  390. .. _sudoedit-info:
  391. Sudoedit безопаснее прямого запуска текстового редактора с правами суперпользователя?
  392. ========================================================================================
  393. Да, намного ибо sudoedit копирует нужный файл во временный каталог и загружает в выбранном по умолчанию текстовом редакторе с обычными правами, а по завершении редактирования копирует на прежнее место.
  394. .. index:: ssh, configuration, security
  395. .. _ssh-install:
  396. Как включить и безопасно настроить сервер SSH?
  397. ==================================================
  398. Сначала установим и активируем sshd:
  399. .. code-block:: text
  400. sudo dnf install openssh-server
  401. sudo systemctl enable --now sshd.service
  402. Создадим собственный файл конфигурации, в который будем вносить изменения:
  403. .. code-block:: text
  404. sudo touch /etc/ssh/sshd_config.d/00-foobar.conf
  405. sudo chmod 0600 /etc/ssh/sshd_config.d/00-foobar.conf
  406. Имя файла начинается с **00**, т.к., согласно документации OpenSSH, приоритет среди всех файлов конфигурации имеет та директива, которая была указана раньше.
  407. Отредактируем созданный файл для внесения своих изменений:
  408. .. code-block:: text
  409. sudoedit /etc/ssh/sshd_config.d/00-foobar.conf
  410. Отключим вход суперпользователем:
  411. .. code-block:: text
  412. PermitRootLogin no
  413. Запретим вход по паролям (будет доступна лишь аутентификация по ключам):
  414. .. code-block:: text
  415. PasswordAuthentication no
  416. PermitEmptyPasswords no
  417. Сохраним изменения и перезапустим sshd:
  418. .. code-block:: text
  419. sudo systemctl restart sshd.service
  420. .. index:: ssh, password authentication, password, authentication
  421. .. _ssh-passwords:
  422. Допустимо ли использовать парольную аутентификацию для SSH?
  423. ================================================================
  424. В настоящее время мы настоятельно не рекомендуем эксплуатировать SSH серверы с включённой парольной аутентификацией (настройки по умолчанию), т.к. он станет постоянной целью для атак заражённых устройств, которые будут пытаться подобрать пароль по словарям, а также полным перебором, создавая тем самым лишнюю нагрузку на SSH сервер.
  425. Автоматическая блокировка средствами fail2ban также не особо поможет, т.к. современные ботнеты умеют координировать свои атаки посредством мастер-сервера и знают стандартные настройки данных утилит.
  426. .. index:: ssh, port
  427. .. _ssh-port:
  428. Следует ли сменить порт SSH на нестандартный?
  429. ==================================================
  430. Это никак не поможет скрыть сервер от крупных бот-сетей, сканирующих весь допустимый диапазон портов, и лишь создаст дополнительные неудобства для самих пользователей.
  431. .. index:: ssh, key-based authentication
  432. .. _ssh-keys:
  433. Безопасна ли аутентификация по ключам в SSH?
  434. =================================================
  435. Да. В настоящее время это самый безопасный метод аутентификации. Если во время рукопожатия SSH клиент не предоставил серверу разрешённый ключ, последний немедленно закроет соединение.
  436. .. index:: ssh, key-based authentication, generate key
  437. .. _ssh-keygen:
  438. Как сгенерировать ключи для SSH?
  439. =====================================
  440. Для создания ключевой пары из открытого и закрытого ключей, необходимо воспользоваться утилитой **ssh-keygen**:
  441. .. code-block:: text
  442. ssh-keygen -t rsa -C "user@example.org"
  443. Здесь в качестве параметра **-t** указывается тип ключа: RSA, DSA, ecdsa или ed25519. Рекомендуется использовать либо RSA, либо ed25519.
  444. Для RSA можно добавить параметр **-b** и указать длину в битах, например **-b 4096**.
  445. .. index:: ssh, key-based authentication, transfer key
  446. .. _ssh-transfer:
  447. Как безопасно передать публичный ключ SSH на удалённый сервер?
  448. ===================================================================
  449. Для простой, быстрой и безопасной передачи можно использовать утилиту **ssh-copy-id**:
  450. .. code-block:: text
  451. ssh-copy-id user@example.org
  452. Здесь **user@example.org** -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост.
  453. .. index:: ssh, port forwarding, tunneling
  454. .. _ssh-port-forwarding:
  455. Как пробросить порт с удалённой машины на локальную через SSH?
  456. ==================================================================
  457. Для примера пробросим с удалённого сервера на локальную машину порт MySQL/MariaDB:
  458. .. code-block:: text
  459. ssh user@example.org -L 3306:127.0.0.1:3306 -N -f
  460. Здесь **user@example.org** -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост, а **3306** -- порт. Параметры ``-N -f`` заставляют SSH клиент сразу вернуть управление, уйти в фоновый режим и продолжать поддерживать соединение до своего завершения.
  461. .. index:: ssh, socks, tunneling
  462. .. _ssh-socks:
  463. Как настроить виртуальный SOCKS туннель через SSH?
  464. ======================================================
  465. .. code-block:: text
  466. ssh user@example.org -D 127.0.0.1:8080 -N -f
  467. Здесь **user@example.org** -- данные для подключения к серверу, т.е. имя пользователя на удалённом сервере и хост, а **8080** -- локальный порт, на котором будет запущен SSH клиент в режиме эмуляции SOCKS5 сервера. Параметры ``-N -f`` заставляют SSH клиент сразу вернуть управление, уйти в фоновый режим и продолжать поддерживать соединение до своего завершения.
  468. После запуска необходимо настроить браузер и другие приложения на работу через данный SOCKS5 прокси.
  469. .. index:: ssh, configuration, sftp
  470. .. _ssh-sftp:
  471. Можно ли разрешить доступ посредством SSH только к файлам, без возможности выполнения команд?
  472. =================================================================================================
  473. Да. Для этого создадим специальную группу (например **sftp**):
  474. .. code-block:: text
  475. sudo groupadd sftp
  476. Создадим собственный файл конфигурации, в который будем вносить изменения:
  477. .. code-block:: text
  478. sudo touch /etc/ssh/sshd_config.d/01-sftp.conf
  479. sudo chmod 0600 /etc/ssh/sshd_config.d/01-sftp.conf
  480. Откроем конфиг ``/etc/ssh/sshd_config.d/01-sftp.conf`` в текстовом редакторе:
  481. .. code-block:: text
  482. sudoedit /etc/ssh/sshd_config.d/01-sftp.conf
  483. Добавим следующие строки:
  484. .. code-block:: text
  485. Subsystem sftp internal-sftp
  486. Match Group sftp
  487. ChrootDirectory %h
  488. AllowTCPForwarding no
  489. ForceCommand internal-sftp
  490. Сохраним изменения и перезапустим sshd:
  491. .. code-block:: text
  492. sudo systemctl restart sshd.service
  493. .. index:: destroy file, shred, wipe, erasing
  494. .. _destroy-file:
  495. Как безвозвратно уничтожить файл?
  496. =====================================
  497. Для уничтожения данных можно использовать штатную утилиту **shred** из пакета GNU Coreutils:
  498. .. code-block:: text
  499. shred -u -v /путь/к/файлу.txt
  500. Восстановить такой файл будет практически невозможно ибо сектора диска, на которых он располагался, будут многократно перезаписаны случайной последовательностью, а затем заполнены нулями.
  501. .. index:: destroy disk, shred, disk, drive, wipe, erasing
  502. .. _destroy-disk:
  503. Можно лишь уничтожить содержимое всего диска?
  504. =================================================
  505. Да, для этого можно использовать уже упомянутую выше утилиту **shred**:
  506. .. code-block:: text
  507. sudo shred -v /dev/sdX
  508. Здесь **/dev/sdX** — устройство, которое будет очищено. На больших HDD процесс займёт много времени.
  509. .. index:: destroy file, ssd, trim, wipe, erasing
  510. .. _destroy-ssd-file:
  511. Как уничтожить файл на SSD?
  512. ===============================
  513. Для безвозвратного удаления файла на SSD накопителе достаточно просто удалить его штатным средством системы и дождаться выполнения процедуры TRIM, которая физически забьёт ячейки, которые им использовались, нулями.
  514. Если не используется TRIM реального времени, принудительно запустить этот процесс на всех твердотельных накопителях можно так:
  515. .. code-block:: text
  516. sudo systemctl start fstrim.service
  517. .. index:: wipe, ssd, secure erase, uefi, bios, hdparm, sata, erasing
  518. .. _wipe-ssd:
  519. Как полностью очистить SATA SSD без возможности восстановления?
  520. ==================================================================
  521. Все модели SATA SSD поддерживают специальную ATA-команду `Secure Erase <https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase>`__, при получении которой контроллер обязан полностью очистить все ячейки диска и вернуть все параметры к настройкам по умолчанию.
  522. Установим утилиту **hdparm**:
  523. .. code-block:: text
  524. sudo dnf install hdparm
  525. Далее **/dev/sdb** -- это устройство SSD накопителя, который мы планируем очистить. Очищать устройство, на котором установлена система, можно только после загрузки с :ref:`Fedora LiveUSB <usb-flash>`.
  526. Убедимся, что UEFI BIOS не блокирует функцию самоуничтожения диска:
  527. .. code-block:: text
  528. sudo hdparm -I /dev/sdb
  529. Если в выводе присутствует **frozen**, значит диск блокируется и сначала нужно её снять.
  530. В большинстве реализаций UEFI BIOS сбросить блокировку с SATA накопителей можно лишь посредством "горячего" подключения устройства. Необходимо включить компьютер, не подсоединяя SATA-кабель к накопителю, а затем уже после загрузки системы подключить его.
  531. Если всё сделано верно, в выводе обнаружим **not frozen** и сможем продолжить процесс.
  532. Установим специальный пароль блокировки накопителя, т.к. без передачи верного пароля команда ATA Secure Erase будет проигнорирована:
  533. .. code-block:: text
  534. sudo hdparm --user-master u --security-set-pass FooBar /dev/sdb
  535. Ни в коем случае не следует устанавливать новое значение пароля в виде пустой строки, либо NULL, т.к. на многих материнских платах это приведёт к невозможности загрузки с этого устройства, а равно как и его смены.
  536. Запустим процесс очистки:
  537. .. code-block:: text
  538. sudo hdparm --user-master u --security-erase FooBar /dev/sdb
  539. Через некоторое время (зависит от объёма и производительности контроллера устройства) диск будет полностью очищен, а все настройки, включая пароль блокировки, сброшены.
  540. В случае **если произошёл сбой** очистки, сбросим установленный пароль вручную:
  541. .. code-block:: text
  542. sudo hdparm --user-master u --security-disable FooBar /dev/sdb
  543. .. index:: permissions, file, chmod
  544. .. _newfile-permissions:
  545. Как рассчитываются права доступа для новых файлов и каталогов?
  546. ==================================================================
  547. Права доступа (chmod) в GNU/Linux рассчитываются в по формуле ``$default-chmod - $current-umask``. ``$default-chmod`` для файлов равен ``0666``, а для каталогов -- ``0777``.
  548. В Fedora umask по умолчанию для пользоватьских учётных записей равен ``0002`` (ведущий нуль в chmod означает использование восьмеричной системы счисления).
  549. Таким образом, chmod для новых файлов ``0666 - 0002 = 0664`` (``-rw-rw--r--``), а для каталогов -- ``0777 - 0002 = 0775`` (``drwxrwxr-x``).
  550. .. index:: cryptography, gost, openssl
  551. .. _fedora-gost:
  552. Можно ли включить поддержку российской криптографии в Fedora?
  553. ==================================================================
  554. См. `здесь <https://www.easycoding.org/2018/11/28/dobavlyaem-podderzhku-gost-dlya-openssl-v-fedora.html>`__.
  555. .. index:: wi-fi, random mac, mac
  556. .. _mac-randomize:
  557. Как включить рандомизацию MAC адресов при подключении к Wi-Fi точкам в Fedora?
  558. ==================================================================================
  559. Network Manager поддерживает два сценария рандомизации MAC адресов:
  560. 1. генерирование уникального псевдослучайного MAC адреса для каждого соединения при загрузке системы (параметр ``stable``). Это избавит от проблем с переподключением к публичным хот-спотам и небходимости повторно проходить аутентификацию в captive-порталах;
  561. 2. генерирование уникального псевдослучайного MAC адреса для каждого соединения при каждом переподключении (параметр ``random``). Наиболее безопасно, но может вызывать описанные выше проблемы.
  562. Профиль **stable**. Файл ``00-macrandomize-stable.conf``:
  563. .. code-block:: ini
  564. [device]
  565. wifi.scan-rand-mac-address=yes
  566. [connection]
  567. wifi.cloned-mac-address=stable
  568. ethernet.cloned-mac-address=stable
  569. connection.stable-id=${CONNECTION}/${BOOT}
  570. Профиль **random**. Файл ``00-macrandomize-random.conf``:
  571. .. code-block:: ini
  572. [device]
  573. wifi.scan-rand-mac-address=yes
  574. [connection]
  575. wifi.cloned-mac-address=random
  576. ethernet.cloned-mac-address=random
  577. Для применения одной из конфигураций создадим в каталоге ``/etc/NetworkManager/conf.d`` файл с выбранным профилем, после чего перезапустим Network Manager:
  578. .. code-block:: text
  579. sudo systemctl restart NetworkManager
  580. Для отключения рандомизации и возвращения настроек по умолчанию достаточно просто удалить созданный файл и перезапустить Network Manager.
  581. .. index:: ca, certificate, certification authority
  582. .. _add-custom-ca:
  583. Как добавить собственный удостоверяющий центр в список доверенных?
  584. =======================================================================
  585. Для добавления нового удостоверяющего центра необходимо скопировать файл его сертификата в формате PEM или DER в каталог ``/etc/pki/ca-trust/source/anchors``, после чего выполнить:
  586. .. code-block:: text
  587. sudo update-ca-trust
  588. Следует помнить, что данное действие не будет распространяться на браузер Mozilla Firefox, имеющий собственную базу доверенных корневых УЦ.
  589. .. index:: ca, certificate, certification authority
  590. .. _blackist-ca:
  591. Как внести удостоверяющий центр в список запрещённых?
  592. ==========================================================
  593. Для добавления удостоверяющего центра в список заблокированных необходимо скопировать файл его сертификата в формате PEM или DER в каталог ``/etc/pki/ca-trust/source/blacklist``, после чего выполнить:
  594. .. code-block:: text
  595. sudo update-ca-trust
  596. Следует помнить, что данное действие не будет распространяться на браузер Mozilla Firefox, имеющий собственную базу доверенных корневых УЦ.
  597. .. index:: certificate, private key, decrypt, openssl
  598. .. _openssl-decrypt-key:
  599. Как убрать пароль шифрования закрытого RSA ключа средствами OpenSSL?
  600. ======================================================================
  601. Воспользуемся утилитой **openssl** для расшифровки:
  602. .. code-block:: text
  603. openssl rsa -in foo-bar.key -out foo-bar-nopass.key
  604. Здесь **foo-bar.key** -- имя файла с закрытым RSA ключом, который необходимо расшифровать. После ввода верного пароля, результат появится в файле **foo-bar-nopass.key**.
  605. .. index:: certificate, private key, encrypt, openssl, aes
  606. .. _openssl-encrypt-key:
  607. Как установить или изменить пароль шифрования закрытого RSA ключа средствами OpenSSL?
  608. ========================================================================================
  609. Воспользуемся утилитой **openssl** для установки или изменения пароля:
  610. .. code-block:: text
  611. openssl rsa -aes256 -in foo-bar-nopass.key -out foo-bar.key
  612. Здесь **-aes256** -- используемый алгоритм шифрования (AES-256), **foo-bar-nokey.key** -- имя файла с закрытым RSA ключом, пароль которого нужно задать или изменить. Результат будет сохранён в файле **foo-bar.key**.
  613. .. index:: bash, command, sudo, root
  614. .. _sudo-multi:
  615. Как посредством sudo запустить сразу несколько команд?
  616. ==========================================================
  617. Команда :ref:`sudo <sudo-access>` предназначена для запуска исключительно одной команды от имени другого пользователя, поэтому если необходимо запустить сразу несколько команд, либо осуществлять перенаправление вывода, придётся использовать другой вариант:
  618. .. code-block:: text
  619. sudo bash -c "first | seconds && third"
  620. В данном примере все три приложения будут запущены с правами суперпользователя, причём стандартный вывод *first* перенаправляется в стандартный ввод *second* через канал (pipe) и при успешном завершении запустится процесс *third*.
  621. .. index:: wireshark, root, access rights
  622. .. _wireshark-no-root:
  623. Как запускать WireShark без предоставления ему прав суперпользователя?
  624. ==========================================================================
  625. WireShark поддерживает запуска как с правами суперпользователя, так и без них. Добавим свой аккаунт в группу **wireshark**:
  626. .. code-block:: text
  627. sudo usermod -a -G wireshark $(whoami)
  628. Изменения вступят в силу при следующем входе в систему.
  629. .. index:: password, cli
  630. .. _password-gen:
  631. Как сгенерировать криптостойкий пароль без использования стороннего ПО?
  632. ===========================================================================
  633. Для того, чтобы сгенерировать криптостойкий пароль не обязательно устанавливать и применять специальные утилиты.
  634. Воспользуемся штатными средствами, входящими в базовый пакет GNU Coreutils:
  635. .. code-block:: text
  636. cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 4
  637. Данный пример сгенерирует 4 криптостойких пароля по 20 символов каждый.
  638. .. index:: who, login, user
  639. .. _users-logged:
  640. Как получить список вошедших в систему пользователей?
  641. ========================================================
  642. Список вошедших в систему пользователей можно получить посредством утилиты **who**:
  643. .. code-block:: text
  644. who
  645. .. index:: w, login, user
  646. .. _users-activity:
  647. Как получить список вошедших в систему пользователей и информацию об их деятельности?
  648. ========================================================================================
  649. Список вошедших в систему пользователей и базовую информацию об их действиях можно получить посредством утилиты **w**:
  650. .. code-block:: text
  651. w
  652. .. index:: last, login, user
  653. .. _users-last:
  654. Как получить информацию обо всех входах в систему?
  655. =====================================================
  656. Информацию о любых попытках входа в систему можно получить посредством утилиты **last**:
  657. .. code-block:: text
  658. last
  659. .. index:: com, rs-232, root, access rights, dialout
  660. .. _com-dialout:
  661. Как получить доступ к COM портам без наличия прав суперпользователя?
  662. =======================================================================
  663. Для того, чтобы получить доступ к :ref:`COM порту (RS-232) <screen-com>` без наличия прав суперпользователя, необходимо добавить свой аккаунт в группу **dialout**:
  664. .. code-block:: text
  665. sudo usermod -a -G dialout $(whoami)
  666. Изменения вступят в силу при следующем входе в систему.
  667. .. index:: gpg, gnupg, password, kwallet, kde
  668. .. _gpg-kwallet:
  669. Можно ли сохранить пароль GnuPG ключа в связке ключей KWallet?
  670. =================================================================
  671. Да. Установим пакет **kwalletcli**:
  672. .. code-block:: text
  673. sudo dnf install kwalletcli
  674. Откроем файл ``~/.gnupg/gpg-agent.conf`` в текстовом редакторе и добавим строку:
  675. .. code-block:: text
  676. pinentry-program /usr/bin/pinentry-kwallet
  677. Выполним выход из системы. При следующем вводе пароля расшифровки закрытого ключа, KWallet предложит сохранить его в связке ключей.
  678. .. index:: gpg, gnupg, manager, gui
  679. .. _gpg-gui:
  680. Безопасно ли использовать менеджеры связки ключей GnuPG с графическим интерфейсом?
  681. =====================================================================================
  682. Да.
  683. .. index:: gpg, gnupg, manager, gui, plasma, kde, kleopatra, kgpg
  684. .. _gpg-kleopatra:
  685. Можно ли одновременно использовать Kleopatra и KGpg?
  686. =======================================================
  687. Нет, не следует использовать одновременно разные графические менеджеры, т.к. настройки, вносимые ими в файл конфигурации GnuPG, будут конфликтовать и приводить к непредсказуемым последствиям.
  688. Пользователям KDE мы рекомендуем Kleopatra, как наиболее современную и функциональную оболочку.
  689. .. index:: gpg, gnupg, smart card, token, nitrokey
  690. .. _gpg-token:
  691. Какой токен для безопасного хранения GnuPG ключей вы можете порекомендовать?
  692. ===============================================================================
  693. Мы рекомендуем использовать токены `Nitrokey Pro 2 <https://www.nitrokey.com/ru>`__, т.к. они имеют как открытое железо, так и софт (спецификации, прошивки, а также программное обеспечение опубликовано под свободными лицензиями).
  694. .. index:: gpg, gnupg, smart card, token
  695. .. _gpg-use-token:
  696. Как работать с токеном или смарт-картой из консоли?
  697. ======================================================
  698. Для работы с аппаратным токеном будем использовать утилиту GnuPG2.
  699. Вставим устройство в USB порт компьютера или ноутбука, либо смарт-карту в считыватель, затем выведем его статус:
  700. .. code-block:: text
  701. gpg2 --card-status
  702. Установим PIN-код:
  703. .. code-block:: text
  704. gpg2 --change-pin
  705. Перейдём в режим работы с токеном:
  706. .. code-block:: text
  707. gpg2 --card-edit
  708. Переключимся в режим администратора:
  709. .. code-block:: text
  710. admin
  711. Сгенерируем новую связку ключей GnuPG на токене:
  712. .. code-block:: text
  713. generate
  714. GnuPG2 запросит стандартные данные: имя и адрес электронной почты владельца ключевой пары, срок действия, а также указать стойкость шифра. Следует помнить, что размер памяти токена сильно ограничен, поэтому если генерировать исключительно 4096 битные ключи, место быстро закончится (например Nitrokey Pro 2 вмещает лишь 3 ключевых пары со стойкостью шифра 4096 бит).
  715. Также будет предложено сохранить копию секретного ключа на диск. Для максимальной безопасности лучше отказаться от этого.
  716. Проверим сгенерировались ли ключи:
  717. .. code-block:: text
  718. list
  719. Если всё сделано верно, то новая ключевая пара появится в списке немедленно.
  720. .. index:: gpg, gnupg, smart card, token, ssh, authentication
  721. .. _gpg-ssh:
  722. Как использовать токен для аутентификации SSH?
  723. =================================================
  724. Сначала нам необходимо добавить в нашу ключевую пару особый ключ для аутентификации. По умолчанию он не создаётся.
  725. Выведем список доступных ключевых пар:
  726. .. code-block:: text
  727. gpg2 --list-secret-keys
  728. Откроем наш основной ключ в режиме редактирования:
  729. .. code-block:: text
  730. gpg2 --edit-key XXXXXXXXX
  731. Здесь **XXXXXXXXX** -- ID нашего ключа.
  732. Добавим новый подключ:
  733. .. code-block:: text
  734. addkey
  735. В списке атрибутов оставим только **Authentication** и обязательно отключим *Encrypt* и *Sign*.
  736. Выберем созданный подключ и переместим его на токен:
  737. .. code-block:: text
  738. key 2
  739. keytocard
  740. Экспортируем публичный ключ SSH из созданного подключа для аутентификации:
  741. .. code-block:: text
  742. gpg2 --export-ssh-key XXXXXXXXX --output ~/.ssh/id_rsa.pub
  743. Здесь **XXXXXXXXX** -- ID нашего ключа.
  744. Активируем поддержку SSH агента в GnuPG агенте, добавив в конец файла ``~/.gnupg/gpg-agent.conf`` следующую строку:
  745. .. code-block:: text
  746. enable-ssh-support
  747. Настроим автоматический запуск GnuPG агента вместе с системой, создав скрипт ``~/bin/gpg-agent.sh``:
  748. .. code-block:: text
  749. #!/usr/bin/sh
  750. export GPG_TTY="$(tty)"
  751. export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
  752. gpgconf --launch gpg-agent
  753. Выдадим ему права на выполнение:
  754. .. code-block:: text
  755. chmod +x ~/bin/gpg-agent.sh
  756. Добавим этот скрипт а автозагрузку используемой DE, либо в ``~/.bashrc`` и выполним новый вход в систему.
  757. .. index:: gpg, gnupg, smart card, token, key transfer
  758. .. _gpg-transfer:
  759. Можно ли переместить на токен уже имеющуюся ключевую пару GnuPG?
  760. ===================================================================
  761. Да. Выведем список доступных ключевых пар:
  762. .. code-block:: text
  763. gpg2 --list-secret-keys
  764. Откроем наш основной ключ в режиме редактирования:
  765. .. code-block:: text
  766. gpg2 --edit-key XXXXXXXXX
  767. Здесь **XXXXXXXXX** -- ID нашего ключа.
  768. Выберем каждый подключ и переместим его на токен:
  769. .. code-block:: text
  770. key 1
  771. keytocard
  772. Повторим для всех оставшихся подключей.
  773. **Отключим токен от компьютера или ноутбука**, затем выполним удаление локального секретного ключа:
  774. .. code-block:: text
  775. gpg2 --delete-secret-key XXXXXXXXX
  776. Здесь **XXXXXXXXX** -- ID нашего ключа.
  777. .. index:: nmap, scanner, vulnerability, hosts
  778. .. _nmap-scan:
  779. Как просканировать хост на наличие работающих сервисов?
  780. ===========================================================
  781. Стандартное сканирование самых популярных портов:
  782. .. code-block:: text
  783. nmap -A -T4 -Pn 127.0.0.1
  784. Стандартное сканирование портов в указанном диапазоне (параметр ``-p 1-100``):
  785. .. code-block:: text
  786. nmap -A -T4 -Pn -p 1-100 127.0.0.1
  787. Стандартное сканирование всего диапазона портов (параметр ``-p-``):
  788. .. code-block:: text
  789. nmap -A -T4 -Pn -p- 127.0.0.1
  790. Стандартное сканирование всего диапазона портов, включая UDP (параметр ``-sU``):
  791. .. code-block:: text
  792. sudo nmap -sU -A -T4 -Pn -p- 127.0.0.1
  793. Сканирование UDP требует прав суперпользователя.
  794. .. index:: luks, encryption, add key, key, cryptsetup
  795. .. _luks-addkey:
  796. Как добавить ключевой файл для разблокировки зашифрованного LUKS раздела?
  797. ============================================================================
  798. Создадим каталог для хранения ключей ``/etc/keys`` (может быть любым):
  799. .. code-block:: text
  800. sudo mkdir -p /etc/keys
  801. Сгенерируем ключевой файл ``foo-bar.key`` размером 4 КБ на основе системного генератора псевдослучайных чисел:
  802. .. code-block:: text
  803. sudo dd if=/dev/urandom of=/etc/keys/foo-bar.key bs=1024 count=4
  804. Установим корректные права доступа:
  805. .. code-block:: text
  806. sudo chown root:root /etc/keys/foo-bar.key
  807. sudo chmod 0400 /etc/keys/foo-bar.key
  808. Добавим ключ в свободный слот LUKS заголовка зашифрованного раздела:
  809. .. code-block:: text
  810. sudo cryptsetup luksAddKey /dev/sda2 /etc/keys/foo-bar.key
  811. Утилита cryptsetup запросит ввод мастер-пароля.
  812. Здесь **/dev/sda2** -- устройство зашифрованного LUKS тома, для которого требуется добавить ключевой файл.
  813. .. index:: luks, encryption, remove key, key, cryptsetup
  814. .. _luks-removekey:
  815. Как удалить ключевой файл разблокировки зашифрованного LUKS раздела?
  816. =======================================================================
  817. Если разблокировка по ключевому файлу более не требуется, его можно удалить.
  818. Удалим слот с ключом ``foo-bar.key`` из LUKS заголовка зашифрованного раздела:
  819. .. code-block:: text
  820. sudo cryptsetup luksRemoveKey /dev/sda2 /etc/keys/foo-bar.key
  821. Надёжно :ref:`уничтожим <destroy-file>` ключевой файл:
  822. .. code-block:: text
  823. sudo shred -u -v /etc/keys/foo-bar.key
  824. Здесь **/dev/sda2** -- устройство зашифрованного LUKS тома, у которого требуется удалить слот с ключевым файлом.
  825. .. index:: luks, encryption, key, cryptsetup, fstab, crypttab
  826. .. _luks-auto:
  827. Как настроить автоматическую расшифровку LUKS разделов при загрузке?
  828. =======================================================================
  829. Откроем файл ``/etc/crypttab`` в :ref:`редакторе по умолчанию <editor-selection>`:
  830. .. code-block:: text
  831. sudoedit /etc/crypttab
  832. Добавим в конец файла строку вида:
  833. .. code-block:: text
  834. foo-bar UUID=XXXXXX /etc/keys/foo-bar.key luks
  835. Здесь **foo-bar** -- внутреннее имя, которое будет использоваться dev-mapper, **XXXXXX** -- :ref:`UUID диска <get-uuid>`, **/etc/keys/foo-bar.key** -- полный путь к :ref:`ключевому файлу <luks-addkey>`. При шифровании :ref:`SSD накопителя <get-uuid>` вместо параметра **luks** следует использовать **discard**.
  836. Откроем файл ``/etc/fstab``:
  837. .. code-block:: text
  838. sudoedit /etc/fstab
  839. Добавим в конец строку вида:
  840. .. code-block:: text
  841. /dev/mapper/foo-bar /media/data ext4 defaults 1 2
  842. Здесь **foo-bar** -- внутреннее имя, указанное ранее в crypttab, **/media/data** -- точка монтирования, а **ext4** -- используемая файловая система.
  843. Если всё сделано верно, то при следующей загрузке раздел будет смонтирован автоматически без запроса пароля.
  844. .. index:: root, password, restore, recovery
  845. .. _root-reset:
  846. Я забыл пароль суперпользователя. Как мне его сбросить?
  847. ==========================================================
  848. При наличии доступа к sudo, пароль суперпользователя можно изменить :ref:`в штатном режиме <root-password>`.
  849. Если текущий пользователь не может использовать sudo, но есть физический доступ к устройству, см. `здесь <https://docs.fedoraproject.org/en-US/quick-docs/reset-root-password/>`__.
  850. .. index:: luks, encryption, key, cryptsetup, crypttab
  851. .. _luks-noauto:
  852. Можно ли отключить автоматическое монтирование устройств LUKS при загрузке?
  853. ==============================================================================
  854. Да. Для этого добавим параметр ``noauto`` для соответствующей записи в файле ``/etc/crypttab``:
  855. .. code-block:: text
  856. foo-bar UUID=XXXXXX /etc/keys/foo-bar.key noauto
  857. Здесь **foo-bar** -- внутреннее имя, которое будет использоваться dev-mapper, **XXXXXX** -- :ref:`UUID диска <get-uuid>`, **/etc/keys/foo-bar.key** -- полный путь к :ref:`ключевому файлу <luks-addkey>`. Параметр **noauto** должен применяться только совместно с ключом.
  858. Данное зашифрованное устройство будет смонтировано и автоматически расшифровано при первой попытке доступа к нему.
  859. .. index:: encryption, cryptsetup, truecrypt, veracrypt
  860. .. _truecrypt-fedora:
  861. Как работать с TrueCrypt контейнерами в Fedora?
  862. ==================================================
  863. Из-за :ref:`несвободной лицензии <fedora-licenses>` TrueCrypt и все его форки (в т.ч. VeraCrypt) не могут быть добавлены в репозитории Fedora, однако в настоящее время утилита **cryptsetup** полностью поддерживает работу с созданными ими контейнерами.
  864. Cryptsetup поддерживает монтирование как :ref:`TrueCrypt <truecrypt-mount>`, так и :ref:`VeraCrypt <veracrypt-mount>` томов (файлы и устройства), а также умеет их администрировать (управлять ключами, паролями). Ограничение лишь одно -- нельзя создавать новые зашифрованные данными механизмами контейнеры.
  865. .. index:: encryption, cryptsetup, truecrypt, mount
  866. .. _truecrypt-mount:
  867. Как смонтировать TrueCrypt контейнер в Fedora?
  868. =================================================
  869. Откроем файл контейнера средствами cryptsetup:
  870. .. code-block:: text
  871. sudo cryptsetup --type tcrypt open /path/to/container.tc foo-bar
  872. Смонтируем файловую систему:
  873. .. code-block:: text
  874. sudo mkdir /media/data
  875. sudo mount -t auto /dev/mapper/foo-bar /media/data
  876. По окончании работы произведём размонтирование:
  877. .. code-block:: text
  878. sudo umount /media/data
  879. sudo rmdir /media/data
  880. Закроем файл контейнера:
  881. .. code-block:: text
  882. sudo cryptsetup --type tcrypt close /dev/mapper/foo-bar
  883. Здесь **/path/to/container.tc** полный путь к файлу контейнера на диске (либо зашифрованному устройству), а **foo-bar** -- внутреннее имя для dev-mapper.
  884. .. index:: encryption, cryptsetup, veracrypt, mount
  885. .. _veracrypt-mount:
  886. Как смонтировать VeraCrypt контейнер в Fedora?
  887. =================================================
  888. Откроем файл контейнера средствами cryptsetup:
  889. .. code-block:: text
  890. sudo cryptsetup --veracrypt --type tcrypt open /path/to/container.hc foo-bar
  891. Смонтируем файловую систему:
  892. .. code-block:: text
  893. sudo mkdir /media/data
  894. sudo mount -t auto /dev/mapper/foo-bar /media/data
  895. По окончании работы произведём размонтирование:
  896. .. code-block:: text
  897. sudo umount /media/data
  898. sudo rmdir /media/data
  899. Закроем файл контейнера:
  900. .. code-block:: text
  901. sudo cryptsetup --veracrypt --type tcrypt close /dev/mapper/foo-bar
  902. Здесь **/path/to/container.hc** полный путь к файлу контейнера на диске (либо зашифрованному устройству), а **foo-bar** -- внутреннее имя для dev-mapper.
  903. .. index:: encryption, cryptsetup, fstab, crypttab, veracrypt, truecrypt
  904. .. _veracrypt-auto:
  905. Как настроить автоматическое монтирование VeraCrypt томов при загрузке?
  906. ===========================================================================
  907. Откроем файл ``/etc/crypttab`` в :ref:`редакторе по умолчанию <editor-selection>`:
  908. .. code-block:: text
  909. sudoedit /etc/crypttab
  910. Добавим в конец файла строку вида:
  911. .. code-block:: text
  912. foo-bar UUID=XXXXXX /etc/keys/foo-bar.key tcrypt-veracrypt
  913. Здесь **foo-bar** -- внутреннее имя, которое будет использоваться dev-mapper, **XXXXXX** -- :ref:`UUID диска <get-uuid>`, либо полный путь к файлу контейнера, **/etc/keys/foo-bar.key** -- полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).
  914. Откроем файл ``/etc/fstab``:
  915. .. code-block:: text
  916. sudoedit /etc/fstab
  917. Добавим в конец строку вида:
  918. .. code-block:: text
  919. /dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0
  920. Здесь **foo-bar** -- внутреннее имя, указанное ранее в crypttab, а **/media/data** -- точка монтирования.
  921. Если всё сделано верно, то при следующей загрузке зашифрованный VeraCrypt том будет смонтирован автоматически.
  922. .. index:: encryption, cryptsetup, bitlocker
  923. .. _bitlocker-fedora:
  924. Как работать с BitLocker контейнерами в Fedora?
  925. ===================================================
  926. Начиная с версии 2.3.0 утилита **cryptsetup** поддерживает работу с зашифрованными BitLocker томами.
  927. Допускается :ref:`монтирование <bitlocker-mount>`, базовые операции с ними, но не создание новых.
  928. .. index:: encryption, cryptsetup, bitlocker, mount
  929. .. _bitlocker-mount:
  930. Как смонтировать BitLocker контейнер в Fedora?
  931. ==================================================
  932. Откроем устройство, зашифрованное BitLocker, средствами cryptsetup:
  933. .. code-block:: text
  934. sudo cryptsetup --type bitlk open /dev/sdX1 foo-bar
  935. Смонтируем файловую систему:
  936. .. code-block:: text
  937. sudo mkdir /media/data
  938. sudo mount -t auto /dev/mapper/foo-bar /media/data
  939. По окончании работы произведём размонтирование:
  940. .. code-block:: text
  941. sudo umount /media/data
  942. sudo rmdir /media/data
  943. Закроем файл контейнера:
  944. .. code-block:: text
  945. sudo cryptsetup --type bitlk close /dev/mapper/foo-bar
  946. Здесь **/dev/sdX1** -- зашифрованное BitLocker устройство, а **foo-bar** -- внутреннее имя для dev-mapper.
  947. .. index:: encryption, cryptsetup, fstab, crypttab, bitlocker
  948. .. _bitlocker-auto:
  949. Как настроить автоматическое монтирование BitLocker томов при загрузке?
  950. ===========================================================================
  951. Откроем файл ``/etc/crypttab`` в :ref:`редакторе по умолчанию <editor-selection>`:
  952. .. code-block:: text
  953. sudoedit /etc/crypttab
  954. Добавим в конец файла строку вида:
  955. .. code-block:: text
  956. foo-bar UUID=XXXXXX /etc/keys/foo-bar.key bitlk
  957. Здесь **foo-bar** -- внутреннее имя, которое будет использоваться dev-mapper, **XXXXXX** -- :ref:`UUID диска <get-uuid>`, **/etc/keys/foo-bar.key** -- полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).
  958. Откроем файл ``/etc/fstab``:
  959. .. code-block:: text
  960. sudoedit /etc/fstab
  961. Добавим в конец строку вида:
  962. .. code-block:: text
  963. /dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0
  964. Здесь **foo-bar** -- внутреннее имя, указанное ранее в crypttab, а **/media/data** -- точка монтирования.
  965. Если всё сделано верно, то при следующей загрузке зашифрованный BitLocker том будет смонтирован автоматически.
  966. .. index:: selinux, context, storage
  967. .. _selinux-local-storage:
  968. Где хранятся установленные пользователем контексты SELinux?
  969. ==============================================================
  970. Заданные пользователем нестандартные контексты, а также переопределения хранятся внутри каталога ``/etc/selinux/targeted/contexts/files`` в следующих файлах:
  971. * ``file_contexts.local`` -- текстовый формат;
  972. * ``file_contexts.local.bin`` -- скомпилированный бинарный формат.
  973. Не следует их править в текстовых, либо шестнадцатиричных редакторах, т.к. это может привести к сбою в политиках SELinux и сбросу настроек по умолчанию. Вместо этого необходимо использовать :ref:`инструмент semanage <selinux-local-remove>`.
  974. .. index:: selinux, context, semanage
  975. .. _selinux-local-list:
  976. Как получить список установленных пользователем контекстов SELinux?
  977. ======================================================================
  978. Выведем полный список нестандартных контекстов, а также переопределений политик SELinux:
  979. .. code-block:: text
  980. sudo semanage fcontext --list -C
  981. .. index:: selinux, context, semanage
  982. .. _selinux-local-remove:
  983. Как удалить пользовательские контексты SELinux?
  984. ===================================================
  985. Удалим конкретный нестандартный контекст, либо переопределение политик SELinux:
  986. .. code-block:: text
  987. sudo semanage fcontext -d "/foo/bar(/.*)?"
  988. Удалим все нестандартный контексты, а также переопределения политик SELinux:
  989. .. code-block:: text
  990. sudo semanage fcontext -D
  991. Для полного вступления изменений в силу рекомендуется :ref:`сбросить контекст <selinux-boot-error>` SELinux.
  992. .. index:: encryption, cryptsetup, luks, container, cryptography
  993. .. _luks-container-create:
  994. Как создать зашифрованный контейнер на диске?
  995. ================================================
  996. При помощи утилиты **dd** создадим пустой файл для хранения криптоконтейнера размером в 1 ГБ:
  997. .. code-block:: text
  998. sudo dd if=/dev/zero bs=1M count=1024 of=/media/data/foo-bar.dat
  999. Минимальный размер создаваемого образа должен быть не меньше 32 МБ, т.к. противном случае возникнет ошибка *Requested offset is beyond real size of device*.
  1000. Здесь **/media/data/foo-bar.dat** -- полный путь к файлу на диске.
  1001. Создадим зашифрованный LUKS контейнер:
  1002. .. code-block:: text
  1003. sudo cryptsetup --verify-passphrase luksFormat /media/data/foo-bar.dat -c aes-xts-plain64 -s 256 -h sha512
  1004. Подтвердим процесс создания посредством набора на клавиатуре **YES** в верхнем регистре, затем укажем пароль, который будет использоваться для шифрования.
  1005. Загрузим контейнер и расшифруем содержимое:
  1006. .. code-block:: text
  1007. sudo cryptsetup luksOpen /media/data/foo-bar.dat foo-bar
  1008. Создадим файловую систему ext4:
  1009. .. code-block:: text
  1010. sudo mkfs -t ext4 -m 1 -L foo-bar /dev/mapper/foo-bar
  1011. Завершим сеанс работы с контейнером:
  1012. .. code-block:: text
  1013. sudo cryptsetup luksClose /dev/mapper/foo-bar
  1014. .. index:: encryption, cryptsetup, luks, container, cryptography
  1015. .. _luks-container-mount:
  1016. Как смонтировать зашифрованный файловый контейнер?
  1017. =====================================================
  1018. Загрузим :ref:`криптоконтейнер <luks-container-create>` и расшифруем содержимое:
  1019. .. code-block:: text
  1020. sudo cryptsetup luksOpen /media/data/foo-bar.dat foo-bar
  1021. Создадим каталог для точки монтирования:
  1022. .. code-block:: text
  1023. sudo mkdir /media/foo-bar
  1024. Смонтируем файловую систему:
  1025. .. code-block:: text
  1026. sudo mount -t auto /dev/mapper/foo-bar /media/foo-bar
  1027. По окончании работы произведём размонтирование:
  1028. .. code-block:: text
  1029. sudo umount /media/foo-bar
  1030. Удалим каталог точки монтирования:
  1031. .. code-block:: text
  1032. sudo rmdir /media/foo-bar
  1033. Завершим сеанс работы с контейнером:
  1034. .. code-block:: text
  1035. sudo cryptsetup luksClose /dev/mapper/foo-bar
  1036. .. index:: luks, encryption, key, cryptsetup, wipe, erasing
  1037. .. _luks-erase:
  1038. Как быстро уничтожить содержимое LUKS контейнера?
  1039. =====================================================
  1040. Быстро и безопасно уничтожим ключи шифрования заголовка LUKS-контейнера:
  1041. .. code-block:: text
  1042. sudo cryptsetup luksErase /dev/sdX1
  1043. Здесь **/dev/sdX1** -- зашифрованный раздел диска, данные с которого требуется уничтожить. Он не должен быть смонтирован. Ввод пароля не требуется.
  1044. После выполнения данного действия все ключевые слоты LUKS-контейнера будут заполнены нулями и доступ к данным, хранящимся на данном разделе, станет невозможен даже при знании верного пароля или наличии ключа.
  1045. Внимание! Это действие не затирает содержимое физически, поэтому после его использования рекомендуется :ref:`осуществить эту процедуру <destroy-disk>` самостоятельно.
  1046. .. index:: luks, encryption, tpm, cryptsetup
  1047. .. _luks-tpm:
  1048. Можно ли использовать TPM для разблокировки LUKS контейнера?
  1049. ===============================================================
  1050. См. `здесь <https://www.easycoding.org/2019/09/24/avtomaticheski-razblokiruem-luks-diski-pri-pomoshhi-tpm.html>`__.
  1051. .. index:: selinux, samba, smb
  1052. .. _selinux-samba:
  1053. Как настроить работу Samba с SELinux?
  1054. ========================================
  1055. См. `здесь <https://fedoraproject.org/wiki/SELinux/samba>`__.
  1056. .. index:: ssh, mitm, dns, protection
  1057. .. _ssh-mitm-protection:
  1058. Как защитить SSH от возможных MITM-атак?
  1059. ============================================
  1060. Для защиты от MITM-атак в протоколе SSH применяется проверка отпечатков публичного ключа сервера в момент установки рукопожатия с эталоном, сохранённым на клиенте.
  1061. Во время первого подключения пользователю предлагается проверить отпечаток сервера и либо разрешить, либо отклонить соединение.
  1062. После одобрения, они вместе с IP-адресом сохраняются в файле ``~/.ssh/known_hosts`` и при следующих подключениях проверяется их действительность. В случае изменения, например из-за проведения злоумышленником атаки "человек посередине", соединение не устанавливается, а пользователю выводится соответствующее сообщение об ошибке.
  1063. К сожалению, ручная проверка отпечатка мало кем производится, поэтому был придуман новый, более надёжный способ -- размещение публичных ключей в виде особых **SSHFP** записей DNS.
  1064. При использовании данного метода, при подключении будет проверяться соответствие ключей, полученных от сервера, записям из SSHFP для конкретного домена. При этом конечно же необходимо использовать надёжные DNS-резолверы с поддержкой шифрования :ref:`DNS-over-TLS <dns-crypt>`, а также рекомендуется подписать DNS-зону `DNSSEC <https://ru.wikipedia.org/wiki/DNSSEC>`__.
  1065. С помощью утилиты **ssh-keygen**, на сервере сгенерируем DNS-записи для домена **example.org**:
  1066. .. code-block:: text
  1067. ssh-keygen -r example.org
  1068. Добавим их в настройки DNS через панель управления регистратора домена или хостера и подождём несколько часов до полной синхронизации между серверами.
  1069. Проверим корректность SSHFP-записей:
  1070. .. code-block:: text
  1071. dig +nocmd +noquestion +nostats +noheader SSHFP example.org
  1072. Если всё верно, активируем работу функции на каждом SSH-клиенте, добавив в файл ``~/.ssh/config`` следующие строки:
  1073. .. code-block:: text
  1074. Host example
  1075. HostName example.org
  1076. Port 22
  1077. User user
  1078. VerifyHostKeyDNS yes
  1079. Подключимся к серверу **по доменному имени** (в случае использования прямого IP-адреса, будет выполняться классическая проверка по файлу **known_hosts**):
  1080. .. code-block:: text
  1081. ssh example
  1082. .. index:: luks, encryption, cryptsetup
  1083. .. _luks-version:
  1084. Как определить версию LUKS конкретного криптоконтейнера?
  1085. ============================================================
  1086. Версия LUKS всегда указана в разделе **Version** :ref:`информации о шифровании <luks-info>`.
  1087. .. index:: luks, encryption, cryptsetup, backup, header
  1088. .. _luks-header-backup:
  1089. Как создать резервную копию заголовка LUKS?
  1090. ===============================================
  1091. Загрузим систему с :ref:`LiveUSB <usb-flash>` и создадим резервную копию заголовка тома **/dev/sda2** на внешнем накопителе данных:
  1092. .. code-block:: text
  1093. sudo cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/foo-bar/luks-header.img
  1094. .. index:: luks, encryption, cryptsetup, backup, header
  1095. .. _luks-header-restore:
  1096. Как восстановить резервную копию заголовка LUKS?
  1097. ====================================================
  1098. Загрузим систему с :ref:`LiveUSB <usb-flash>` и восстановим резервную копию заголовка тома **/dev/sda2** с внешнего накопителя данных:
  1099. .. code-block:: text
  1100. sudo cryptsetup luksHeaderRestore /dev/sda2 --header-backup-file /media/foo-bar/luks-header.img
  1101. .. index:: luks, encryption, password, cryptsetup, upgrade
  1102. .. _luks-upgrade:
  1103. Как осуществить апгрейд версии LUKS?
  1104. =======================================
  1105. Загрузим систему с :ref:`LiveUSB <usb-flash>` и создадим :ref:`резервную копию заголовка <luks-header-backup>` на внешнем накопителе данных.
  1106. Выведем текущую :ref:`версию <luks-version>` и убедимся, что она равна **1**:
  1107. .. code-block:: text
  1108. sudo cryptsetup luksDump /dev/sda2 | grep 'Version'
  1109. Произведём апгрейд LUKS до версии 2:
  1110. .. code-block:: text
  1111. sudo cryptsetup convert /dev/sda2 --type luks2
  1112. .. index:: luks, encryption, password, cryptsetup, upgrade
  1113. .. _luks-upgrade-key:
  1114. Как усилить защиту ключа LUKS?
  1115. ==================================
  1116. Загрузим систему с :ref:`LiveUSB <usb-flash>` и создадим :ref:`резервную копию заголовка <luks-header-backup>` на внешнем накопителе данных.
  1117. Выведем текущую :ref:`версию LUKS <luks-version>` и убедимся, что значение не ниже **2** (если это не так, сначала :ref:`осуществим преобразование <luks-upgrade>`):
  1118. .. code-block:: text
  1119. sudo cryptsetup luksDump /dev/sda2 | grep 'Version'
  1120. Выведем текущий `PBKDF <https://ru.wikipedia.org/wiki/PBKDF2>`__:
  1121. .. code-block:: text
  1122. sudo cryptsetup luksDump /dev/sda2 | grep 'PBKDF'
  1123. Осуществим преобразование в `Argon2 <https://ru.wikipedia.org/wiki/Argon2>`__:
  1124. .. code-block:: text
  1125. sudo cryptsetup luksConvertKey /dev/sda2 --pbkdf argon2id
  1126. .. index:: luks, encryption, password, cryptsetup, upgrade, cipher, key, cryptography
  1127. .. _luks-upgrade-cipher:
  1128. Как усилить надёжность шифрования LUKS?
  1129. ===========================================
  1130. Загрузим систему с :ref:`LiveUSB <usb-flash>` и создадим полную посекторную копию раздела на внешнем накопителе данных.
  1131. Выведем информацию о шифровании выбранного тома:
  1132. .. code-block:: text
  1133. sudo cryptsetup luksDump /dev/sda2 | egrep 'Version|Cipher|MK bits'
  1134. Перешифруем весь том в :ref:`формате LUKS2 <luks-upgrade-key>` с использованием алгоритма **AES-256-XTS-PLAIN64**:
  1135. .. code-block:: text
  1136. sudo cryptsetup-reencrypt /dev/sda2 --type luks2 --pbkdf argon2id --cipher aes-xts-plain64 --key-size 512 --hash sha512
  1137. .. index:: luks, encryption, trim, cryptsetup
  1138. .. _luks-trim-open:
  1139. Как активировать TRIM для открытых вручную LUKS-контейнеров?
  1140. ================================================================
  1141. Зашифрованные :ref:`LUKS-контейнеры <luks-container-create>`, открытые вручную при помощи ``cryptsetup open``, по умолчанию не будут поддерживать :ref:`процедуру TRIM <ssd-trim>`, поэтому рассмотрим несколько способов исправить это.
  1142. **Способ 1.** Передадим :ref:`параметр ядра <kernelpm-perm>` Linux ``rd.luks.options=discard``.
  1143. Теперь все контейнеры, открытые утилитой, будут поддерживать TRIM. Однако действие не распространяется на указанные в файле ``/etc/crypttab``, т.к. он имеет более высокий приоритет.
  1144. **Способ 2.** Воспользуемся параметром командной строки ``--allow-discards``.
  1145. LUKS :ref:`версии 2 <luks-version>` поддерживает возможность принудительно задать использование процедуры TRIM внутри контейнера при любых операциях монтирования. В LUKS1 это не реализовано и поэтому работать не будет.
  1146. Для LUKS1 (вводится при каждом открытии тома):
  1147. .. code-block:: text
  1148. sudo cryptsetup --allow-discards open /path/to/container foo-bar
  1149. Для LUKS2 (вводится только один раз):
  1150. .. code-block:: text
  1151. sudo cryptsetup --allow-discards --persistent open /path/to/container foo-bar
  1152. Убедимся, что в :ref:`информации о шифровании <luks-info>`, в разделе **Flags**, появился **allow-discards**.
  1153. .. index:: luks, encryption, trim, cryptsetup
  1154. .. _luks-trim-execute:
  1155. Как выполнить TRIM для открытых вручную LUKS-контейнеров?
  1156. ==============================================================
  1157. Функция автоматической очистки неиспользуемые данных TRIM выполняется либо в :ref:`реальном времени <ssd-trim>`, либо :ref:`по таймеру <ssd-timer>`, но только для автоматически смонтированных и указанных в файле ``/etc/crypttab`` разделов.
  1158. Для зашифрованных :ref:`LUKS-контейнеров <luks-container-create>`, открытых вручную при помощи ``cryptsetup open``, её необходимо сначала :ref:`активировать <luks-trim-open>`, а затем периодически запускать утилиту ``fstrim``:
  1159. .. code-block:: text
  1160. sudo fstrim -v /media/foo-bar
  1161. Здесь **/media/foo-bar** -- это точка монтирования.
  1162. .. index:: network, internet, unshare
  1163. .. _app-disable-network:
  1164. Как запретить приложению доступ к сети?
  1165. ===========================================
  1166. Иногда возникает необходимость ограничить какому-либо приложению доступ к сети Интернет.
  1167. Установим ограничение пространствами имён ядра (более подробную информацию о них можно получить в ``man namespaces``) при помощи утилиты **unshare**:
  1168. .. code-block:: text
  1169. unshare -r -n foo-bar
  1170. Здесь вместо **foo-bar** укажем приложение, которое требуется запустить.
  1171. .. index:: ssh, tpm, security
  1172. .. _ssh-tpm:
  1173. Как настроить хранение SSH ключей в TPM?
  1174. ============================================
  1175. См. `здесь <https://www.easycoding.org/2022/02/14/ispolzuem-tpm-dlya-xraneniya-ssh-klyuchej.html>`__.