9 трюков для усиления безопасности Linux

Жизнь обычных людей складывается из мелочей. Жизнь линуксоида складывается из множества маленьких полезных трюков, накапливаемых за годы работы в системе. Ценность таких трюков многим выше, если они не только удобны в использовании, но и способны повысить информационную безопасность. Несколько простых хинтов, описанных в статье, могут пополнить закрома даже гиков, не говоря уже о том, чтобы стать хорошим стартом для новичков.

Отключение камеры

Скотч на веб-камере лаптопа уже давно стал притчей во языцех настолько, что ушлые коммерсанты начали предлагать различные приспособления, превосходящие по своей эстетике кусок изоленты. Поэтому, даже если Большого Брата в твоем случае ожидает лишь изображение красноглазого чувака на фоне кирпичной стены, который сутками напролет пялится в экран, вопросами безопасности все же стоит озаботиться. Но тратиться на лейкопластырь — не наш метод, ведь Linux дает возможность запретить загрузку отдельных модулей ядра.

С помощью mkinitcpio -M можно определить название модуля камеры и поместить его в черный список. Для этого достаточно отредактировать файл /etc/modprobe.d/camera.conf, добавив такую строку:

blacklist uvcvideo

Если твоя паранойя выше среднего уровня и ты опасаешься, что камеру включит другой не запрещенный в системе модуль или ты собственноручно загрузишь в состоянии сомнамбулического транса, можешь пригвоздить его намертво в том же файле строкой:

install uvcvideo /bin/false

Это, конечно же, не спасет тебя от взломщика, который сможет получить права root и будет достаточно сообразителен, чтобы догадаться, почему не работает камера. Но в этом случае твои обнаженные фотографии — последнее, о чем тебе стоит беспокоиться.

Удаление корзины

Как и любое ведро с мусором в реальной жизни, содержимое корзины компьютера может многое рассказать о своем владельце. Поэтому складывать в нее то, что тебе действительно не нужно, не только бессмысленно, но и небезопасно. Лучше удалять весь хлам раз и навсегда полностью.

Если в твоей системе отсутствует возможность удалять файлы, минуя корзину, а сам ты, как солидный человек, привык принимать взвешенные решения и не любишь двойную работу, то для тебя есть универсальный способ, который просто не позволит приложениям помещать файлы в корзину и заставит их удалять файлы навсегда абсолютно во всех случаях.

Для этого достаточно всего лишь удалить каталог ~/.local/share/Trash и создать на его месте пустой файл:

$ rm -rf ~/.local/share/Trash $ touch ~/.local/share/Trash

После этого любая современная среда рабочего стола или приложение при попытке переместить удаляемый файл в корзину или даже создать саму корзину получит ошибку и им не останется ничего, кроме как удалить его с жесткого диска.

Перенос домашнего каталога на флешку

О выделении отдельного раздела на жестком диске под домашний каталог ты наверняка знаешь и уже не раз менял дистрибутивы, оставаясь при своих настройках и с любимым сборником электронной музыки. Но некоторые могут хранить в домашнем каталоге нечто поважнее песенок и постоянно переживать, не уволок ли кто жесткий диск на анализ, пока хозяина не было дома.

Можно, конечно, зашифровать раздел, а можно прикупить флешку пообъемнее и поместить домашний каталог на ней, решив попутно проблему не только сохранности данных, но и их доступности в критической ситуации, — актуально, когда ты не доверяешь облачным сервисам, а товарищ майор уже изъял компьютер на экспертизу.

Флешку нужно предварительно отформатировать в ext4, затем с помощью команды blkidвыяснить ее UUID (в примере используется cbfb14ea-38ce-4a5c-b00b-542b9763038e) и внести в /etc/fstab в строку, монтирующую домашний раздел пользователя username:

UUID=cbfb14ea-38ce-4a5c-b00b-542b9763038e /home/username ext4 defaults 0 0

Разумеется, отключать и подключать флешку необходимо только после отключения питания компа. Но даже если ты выдернешь ее прямо во время работы, ничего страшного не произойдет — при следующей загрузке Linux проверит ее на наличие ошибок, и все файлы останутся в сохранности (кроме тех, которые ты копировал в момент извлечения флешки, конечно).

Флешка — ключ аутентификации

Надежную защиту твоих данных может дать только шифрование в сочетании с надежным паролем. Но, как мы все знаем, длинный, сложный пароль — это долго и слишком нудно. Его придется вводить при каждой разблокировке экрана, возможно на виду у других людей, которые не прочь подсмотреть за твоими нажатиями клавиш и даже записать их на видео.

Чтобы не выйти из себя, в сотый раз набирая свой надежный пароль, достаточно начать использовать в качестве ключа аутентификации обычный USB-накопитель. Сделать это можно с помощью PAM-модуля pam_usb.

Несмотря на то что разработка ведется от случая к случаю и последний стабильный релиз 0.5.0 датирован далеким 2011 годом, инструмент вполне жизнеспособен. А учитывая миниатюрные размеры современных флеш-карт, еще и эстетичен.

Энтузиасты могут попробовать собрать вручную git-версию утилиты, в которой добавлена поддержка SD-карт (однако их работа не всегда гарантирована), или обратиться к форкам, созданным неравнодушными пользователями, с различными дополнительными плюшками (например, поддержкой udisks2).

Для настройки USB-ключа необходимо:

  1. Выбрать носитель и задать ему имя (например, FLASHKEY):
  2. $ sudo pamusb-conf --add-device FLASHKEY
  3. Добавить пользователя, зарегистрированного в системе, который будет авторизоваться с помощью флешки (например, username):
  4. $ sudo pamusb-conf --add-user username
  5. Проверить корректность установок:
  6. $ sudo pamusb-check username
  7. Включить pam_usb в процесс авторизации, добавив в начало /etc/pam.d/system-auth строку:
  8. auth sufficient pam_usb.so

Эта строка указывает системе, что вставленной флешки достаточно для авторизации. Если ее вынуть, система снова станет запрашивать пароль пользователя.

Для авторизации рута благоразумнее иметь отдельную флешку и вставлять ее в разъем, когда понадобится повысить привилегии в системе с помощью su или sudo. В этом случае строку из пункта 4 следует добавить в /etc/pam.d/su.

Двухфакторная аутентификация

Облегчив себе аутентификацию при непосредственной работе за компьютером, стоило бы максимально усложнить ее для удаленного доступа. Например, когда это доступ по SSH. В таком случае тебя выручит модуль pam-google-authentificator, с помощью которой можно настроить двухфакторную аутентификацию на основе одноразовых паролей.

Сперва необходимо установить на компьютер сам пакет. Под тем или иным названием он доступен во всех популярных дистрибутивах. Поиск следует вести по ключевым словам pam google.

Установив пакет, следует отредактировать файл /etc/pam.d/sshd, добавив в него строку

auth required pam_google_authenticator.so no_increment_hotp

Опция no_increment_hotp запретит счетчику неудачных попыток авторизации увеличивать их количество.

Теперь осталось настроить сам модуль, выполнив команду

$ google-authenticator

В ходе ее выполнения будет сгенерирована ссылка на QR-код для привязки телефона (ее следует отсканировать с помощью приложения Google Authenticator), секретный ключ для ввода в телефоне вручную, один текущий код доступа и пять резервных. На все вопросы (привязка кода к линейке времени, обновление настроек программы в папке пользователя, запрет повторного использования одного и того же кода, ограничение в виде трех попыток входа в 30-секундный промежуток времени) следует
ответить утвердительно и лишь на один — четвертый по счету (увеличение временного расхождения между клиентом и сервером) — из соображений безопасности лучше ответить отрицательно.Клетка для софта

Даже надежно защищенная крепость не обходится без общения с внешним миром. Запуск программ сомнительного поведения может свести на нет все усилия по обеспечению безопасности. В этом случае пригодится инструмент, позволяющий настроить исполнение приложений в рамках жестко ограниченного пространства (песочнице).

Такой инструмент есть, и название у него соответствующее — Firejail. Программа лаконична и проста в использовании в сравнении с прочими средствами схожей функциональности. Использование программы в графическом режиме возможно с помощью незатейливого Qt-фронтенда Firetools. Впрочем, и консольный вариант не вызовет затруднений.

Например, запустить нужное приложение (Chromium) в изолированном контейнере с запретом доступа к критическим каталогам, системным вызовам и в приватном режиме можно командой

$ firejail --seccomp --private chromium

В этом случае все файлы, созданные браузером, удалятся, как только он будет закрыт. Но доступ ко всему домашнему каталогу пользователя останется открытым. Чтобы полностью отрезать запускаемое приложение от файловой системы, потребуется выполнить ряд шагов по настройке, а именно — создать пользовательский каталог для файлов конфигурации и каталог запуска для приложения (ту самую тюрьму):

$ mkdir ~/.config/firejail $ mkdir ~/chromium

Далее следует скопировать конфигурационный файл песочницы в домашний каталог:

$ cp /etc/firejail/chromium.profile ~/.config/firejail

и отредактировать его, добавив параметр приватности:

$ echo "private ${HOME}/chromium" >> ~/.config/firejail/chromium.profile

Чтобы по умолчанию приложение запускалось в подготовленной таким образом «тюрьме», нужно выполнить от рута

# echo "firejail --seccomp /usr/bin/chromium $@" > /usr/local/bin/chromium # chmod +x /usr/local/bin/chromium

Отключение фоновых служб в Chrome

Современные веб-приложения сложны, многофункциональны и во многих случаях превосходят свои десктопные аналоги. Но у них есть одна проблема: ты закрываешь вкладку, и приложение перестает работать. Чтобы решить эту проблему, разработчики Chrome придумали штуку под названием Service Worker. Это API, который позволяет загрузить в браузер код и вызывать его позже даже в том случае, если само веб-приложение закрыто.

Основное назначение Service Worker — обработка push-уведомлений, но, как это обычно бывает, технология может быть использована и для несколько других и, скажем так, не совсем полезных пользователю действий. C помощью Service Worker можно создать код, который будет непрерывно работать в фоне и грузить процессор, либо написать троян и организовать браузеры в ботнет.

По умолчанию браузер не позволяет отключить Service Worker, однако мы можем применить небольшой трюк и просто удалить каталог хранения скриптов и создать на его месте пустой файл (если ты используешь Chromium, замени chrome на chromium):

$ cd .config/chrome/Default $ rm -rf "Service Worker" $ touch "Service Worker"

Принцип здесь ровно тот же, что и в случае с корзиной. Не обнаружив каталог хранения скриптов, браузер попытается его создать, но этому помешает наличие файла с тем же именем.

Ускоренная торификация

Об использовании сети Tor в последнее время слышно из каждого утюга. Поэтому неудивительно, что для многих ее использование давно стало рутинным процессом, причем не только в случае серфинга с помощью браузера.

Чтобы обеспечить быстрый доступ к сервису Tor любым программам без необходимости настройки их каждой в отдельности, можно использовать утилиту torify из комплекта Tor. С ее помощью можно прозрачно связать нужное приложение и библиотеку tsocks, содержащую необходимые для проксирования конфигурационные файлы. Использовать ее проще простого:

$ torify wget -qO- https://check.torproject.org/ | grep -i congratulations

Следует заметить, что резолвинг DNS в этом случае будет осуществляться обычным образом, не через Tordns. Это можно исправить, применив утититу tor-resolv, которая возвращает IP переданного доменного имени. Пример открытия страницы с помощью консольного браузера elinks:

$ torify elinks $(tor-resolve checkip.dyndns.org)

Криптографический netcat

Трюками с использованием гиковского швейцарского ножа netcat в качестве утилиты для быстрой передачи файла между компьютерами в сети уже давно никого не удивишь. Инструмент старый, и способов нетривиально его применить изобретено множество. Единственным слабым местом остается отсутствие в netcat какой-либо защиты от компрометации со стороны третьих лиц.

Утилита cryptcat лишена этого недостатка. Она использует шифрование по алгоритму Twofish. Ключ шифрования по умолчанию — metallica, поэтому сразу после установки его следует изменить с помощью ключа -k (для примера пусть будет apocalyptica):

$ cryptcat -k apocalyptica

В остальном логика работы и семантика команд такая же, как и в netcat:

$ cryptcat -lp 1234 # машина-получатель $ cryptcat <IP адресата> 1234 # машина-отправитель

Представленные выше команды позволяют организовать защищенный чат между двумя машинами. Введенный в терминале любой из машин текст отобразится и в терминале другой машины.

Дополнив cryptcat ключом запуска внешнего приложения на устройстве адресата, можно запускать на ней командную оболочку и обеспечить выполнение команд с удаленной машины:

$ cryptcat -lp 1234 -e /bin/bash # машина-адресат $ cryptcat <IP адресата> 1234 # машина-манипулятор

Команды будут выполняться на машине-адресате, а вывод команд появится в том числе и в окне терминала машины-манипулятора.

Потоковая передача видеофайла с машины-транслятора и его просмотр с помощью проигрывателя mplayer на машине-наблюдателе:

$ cat video.avi | cryptcat -lp 1234 # машина-транслятор $ cryptcat <IP адресата> 1234 | mplayer -vo x11 -cache 3000 - # машина-наблюдатель

Отправка файлов (куда ж без них):

$ cryptcat -lp 1234 > my.jpg # машина-получатель $ cryptcat <IP адресата> 1234 < my.jpg # машина-отправитель

Выводы

Возможно, некоторые описанные в статье трюки тебе покажутся слишком примитивными, другие бесполезными, а третьи бредовыми. В любом случае в чемоданчике каждого уважающего себя линуксоида должен быть набор инструментов на разные случае жизни. Не нужно сейчас — возможно, пригодится в будущем.

Рейтинг материала
[Голосов: 0 Рейтинг: 0]
19 октября 2017, 08:43

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *