среда, 22 июня 2016 г.

Zram и Zswap или как увеличить количество оперативной памяти

Данная статья будет актуальна для владельцев нетбуков, компьютеров с малым количеством оперативки, людей, которые запускают много ресурсоёмких приложений, которые в свою очередь потребляют много памяти и так далее. В ядре Linux не так давно появились две замечательные технологии - zram и zswap. Опишу что это и для чего:
ZRAM - модуль ядра Linux, ранее известный как compcache. До версии ядра 3.14 находился в эксперементальной ветке, с 3.14 перемещён в основную. Суть его в том, что в оперативной памяти создаётся сжатый раздел подкачки (swap). Создавая swap в ОЗУ, мы тем самым хоть и уменьшаем объем доступной оперативной памяти, но тем не менее информация в оперативной памяти всегда хранится в несжатом виде, а при использовании ZRAM происходит следующее: как только системе начинает не хватать оперативной памяти, она начинает активно занимать swap, а так как swap у нас в оперативной-же памяти, то по факту система начинает просто сжимать информацию из оперативки и помещать ее в оперативку же. Скорость работы ОЗУ всегда существенно выше чем дисковой подсистемы, а алгоритмы сжатия lzo и lz4 настолько быстры, что в итоге мы получаем существенное "увеличение" оперативной памяти за счет небольших процессорных издержек на архивацию. Таким образом, ZRAM позволяет разместить в оперативной памяти в несколько раз больше информации за счёт сжатия. Эта технология активно используется в Android, ТВ-приставках, ChromeOS, SteamOS и много где ещё. При использовании ZRAM, swap-раздел на диске необязателен. Это особенно полезно для SSD-накопителей, так как частые записи для них вредны.
ZSWAP - модуль ядра Linux, доступный с версии 3.11. Отличается от ZRAM тем, что использует существующий swap-раздел на диске, а в ОЗУ создаётся пул со сжатыми данными (кэшем). После того как пул до отказа забьётся сжатыми данными, он сбросит их в раздел подкачки и снова начнёт принимать и сжимать данные. Размер пула можно указать вручную, по умолчанию он динамический (то есть будет использовать всю доступную оперативку). Реализация такого подхода позволяет, при возникновении необходимости сброса памяти в раздел подкачки, сократить ввод-вывод и повысить скорость работы системы в целом, за счет того, что по возможности избегается использование медленного носителя. Ценой сокращения ввода/вывода является увеличение нагрузки на процессор, который тратит дополнительные ресурсы на сжатие и распаковку данных. По утверждению разработчиков, в их конфигурации при компиляции ядра в ситуации когда происходит своппинг, выигрыш по объему ввода/вывода составил 76%, а время выполнения операции сократилось на 53%. При использовании ZSWAP, используется раздел swap на диске, в ОЗУ хранится только сжатый кэш. Можно считать ZSWAP продвинутым вариантом ZRAM.
Zram или Zswap?
Чтобы узнать что из этого лучше подойдёт вам, возьмём два примера: ноутбук с 4 гигами оперативки и медленным жёстким диском (представьте себе работу подкачки на таком) или с SSD-накопителем; компьютер с 8 гигами оперативки, на котором планируется запускать много виртуальных машин и других ресурсоёмких приложений. В первом случае, более подходящим будет ZRAM, так как ему не нужен swap-раздел на диске (это особенно вредно для SSD) и он позволит размещать все данные непосредственно в памяти. Однако раздел swap нужно обязательно создать если вы будете использовать на ноутбуке режим сна. На компьютере предпочтительнее будет ZSWAP, так как оперативка не будет занята виртуальными swap-файлами (а виртуалкам нужно много оперативки), а в оперативке будет хранится только сжатый кэш, что при нехватке памяти предотвратит своппинг, а в критической ситуации - быстренько скинет его на swap-раздел на диске.
Установка.
Примеры установки я покажу на дистрибутиве Ubuntu 14.04 и Debian 8. В остальных дистрибутивах различия будут не существенными (обратитесь к документации вашего дистрибутива). Начнём с ZRAM. Для Ubuntu всё просто:
sudo apt install zram-config
Всё. Этот скрипт определит количество оперативной памяти в вашей системе, а также количество ядер процессора и создаст swap-файла в памяти (блочные устройства /dev/zram) по количеству ядер. Это нужно потому что сжатие данных однопоточное (один поток==одно ядро). По умолчанию размер такого swap-файла равен 1/2 от общего количества оперативки. После перезагрузки, выполните в терминале команду swapon -s и вы увидите помимо реального swap-раздела, несколько разделов /dev/zram. Далее. Если вы изменяли значение vm.swappiness (для уменьшения порога включения подкачки), например выставили значение vm.swappiness = 10, то измените его на 40, дабы уже при исчерпании 60% оперативки, включался ZRAM. Если вы ничего не трогали, то можете либо оставить значение по умолчанию (60, то есть при исчерпании 40% оперативки), либо:
sudo nano /etc/sysctl.conf
Дописываем в конец строку:
vm.swappiness = 40
сохраняем и выполняем:
sudo sysctl -p
либо перезагружаемся. Вот и всё. Для Debian всё немного сложнее. Но совсем чуть чуть  Открываем терминал, вводим:
sudo nano /etc/init.d/zram
Вставляем следующий скрипт:
#!/bin/sh
### BEGIN INIT INFO
# Provides: zram
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: S
# Default-Stop: 0 1 6
# Short-Description: Use compressed RAM as in-memory swap
# Description: Use compressed RAM as in-memory swap
### END INIT INFO
# Author: Antonio Galea <antonio.galea@gmail.com>
# Thanks to Przemysław Tomczyk for suggesting swapoff parallelization
FRACTION=50
MEMORY=`perl -ne'/^MemTotal:\s+(\d+)/ && print $1*1024;' < /proc/meminfo`
CPUS=`grep -c processor /proc/cpuinfo`
SIZE=$(( MEMORY * FRACTION / 100 / CPUS ))
case "$1" in
"start")
param=`modinfo zram|grep num_devices|cut -f2 -d:|tr -d ' '`
modprobe zram $param=$CPUS
for n in `seq $CPUS`; do
i=$((n - 1))
echo $SIZE > /sys/block/zram$i/disksize
mkswap /dev/zram$i
swapon /dev/zram$i -p 10
done
;;
"stop")
for n in `seq $CPUS`; do
i=$((n - 1))
swapoff /dev/zram$i && echo "disabled disk $n of $CPUS" &
done
wait
sleep .5
modprobe -r zram
;;
*)
echo "Usage: `basename $0` (start | stop)"
exit 1
;;
esac
Сохраняем. Далее даём права на исполнение:
sudo chmod +x /etc/init.d/zram
и активируем:
sudo insserv zram
Перезагружаемся и всё.
Теперь о ZSWAP. Здесь всё значительно проще. Нужно лишь передать ядру во время загрузки, параметр zswap.enabled=1. Для этого открываем файл /etc/default/grub
sudo nano /etc/default/grub
И в строку GRUB_CMDLINE_LINUX_DEFAULT дописываем этот параметр. Чтобы было вот так:
GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 quiet"
Далее:
sudo update-grub
и перезагрузка. После перезагрузки, можете убедиться в работе ZSWAP, введя команду dmesg | grep zswap Если ответом будет
[ 1.273249] zswap: loading zswap
[ 1.273252] zswap: using lzo compressor
значит всё сработало на отлично. Способ включения ZSWAP одинаков для большинства дистрибутивов. Если нужно ограничить объём пула для ZSWAP, то там же в параметрах указываем:
zswap.max_pool_percent=x
где x - процент отведённой памяти под ZSWAP.
Вот так мы бесплатно и без лишних телодвижений, увеличили доступное количество оперативной памяти, лишь незначительно увеличив нагрузку на процессор. Остаётся только поражаться возможностям Linux, ибо в Windows таких технологий нет.

пятница, 3 июня 2016 г.

Проверка Linux на вирусы

Раньше мы уже говорили о вирусах в Linux. Большинство людей считают, что вирусов в Linux нет и в кое чем они правы. Ведь вредоносных программ, которые сами могли бы распространятся по системе и заряжать другие компьютеры в сети минимум. Известные широкой общественности программы такого рода для Linux можно сосчитать на пальцах. Но есть и другой тип угроз, более характерный для Linux. Это руткиты, программы которые устанавливаются вручную и скрывают свою деятельность в системе.
Эти программы могут предоставлять установившему их вам человеку полный доступ к вашей системе, вычислительным ресурсам и данным. Не стоит недооценивать эту опасность. Если ваш компьютер подключен к интернет без использования локальной сети (роутера) и без технологии NAT, то обратится к нему может любой человек из сети провайдера. Для этого даже не обязательно знать ваш ip адрес. Злоумышленик может просто перебирать все адреса в своей подсети и если на вашем компьютере или сервере окажется искомая им уязвимость, например слабый пароль ssh или любая другая уязвимость в системном сервисе программная или недостаток настройки - ваш компьютер будет взломан.
Вы можете посмотреть содержимое файла /var/log/audit.log. Здесь фиксируются все неудачные попытки входа в систему, и в том числе по ssh. Я был удивлен когда увидел что мой пароль пытались подобрать. Ну а если уже хакер получит доступ к вашей системе, тут у него уже много вариантов для действий - всплывают все уязвимости в системных библиотеках, ядре которые можно использовать для обхода защитных механизмов Linux и повышения привилегий в системе. По этому не лишним будет следить за актуальностью своего программного обеспечения, в новом ПО скорее всего, уже закрыли известные уязвимости, а также иногда проверять компьютер специальной программой для поиска руткитов. В этой статье мы рассмотрим как проверить компьютер на вирусы в Linux.
Для поиска руткитов мы будем использовать утилиту rkhunter или RootkitHunter. Мы рассмотрим как ее установить и настроить для правильной проверки.

Что такое Rkhunter?

RkHunter (Rootkit Hunter) - это инструмент для сканирования системы Linux / Unix с открытым исходным кодом, выпущенный под лицензией GPL. Утилита выполняет сканирование Linux на предмет руткитов, бекдоров, локальных эксплойтов и уязвимостей. На данный момент известно 242 руткита, и всех их программа может найти, и удалить, если они были установлены в вашей системе. Программа - всего лишь скрипт, позволяющий проверить локальные файлы, и обнаружить известные руткиты. Также выполняется проверка изменения системных команд, файлов запуска, а также проверяет сетевые интерфейсы, на предмет прослушивания определенных портов.
Установить программу в Ubuntu можно командой:
$ sudo apt-get install rkhunter
Если у вас другой дистрибутив, вы всегда можете собрать программу из исходников:
$ cd /tmp
$ wget http://downloads.sourceforge.net/project/rkhunter/rkhunter/1.4.2/rkhunter-1.4.2.tar.gz
$ tar -xvf rkhunter-1.4.2.tar.gz
$ cd rkhunter-1.4.2
$ ./installer.sh --layout default --install

Обновление RkHunter

Перед тем как будет выполнена проверка linux на вирусы, необходимо обновить базу данных утилиты. Для этого выполните:
$ rkhunter --update
$ rkhunter --propupd
Обновление желательно выполнять регулярно, поэтому давайте создадим специальный скрипт и будем запускать его с помощью cron каждый день. Для этого создайте файл скрипта в папке /etc/cron.daily:
$ vi /etc/etc/cron.daily/rkhunter.sh
#!/bin/sh
(
/usr/local/bin/rkhunter --versioncheck
/usr/local/bin/rkhunter --update
/usr/local/bin/rkhunter --cronjob --report-warnings-only
) | /bin/mail -s 'rkhunter Daily Run (Ваш сервер)' your@email.com
Здесь в последней строчке мы запланировали проверку и отправку уведомления вам на Enail. Для работы необходимо заменить your@email.com на ваш адрес электронной почты.
Теперь осталось только дать программе права на выполнение:
$ chmod 755 /etc/cron.daily/rkhunter.sh

Проверка Linux на вирусы Rkhunter

Для того чтобы проверить Linux на вирусы всю систему выполните от суперпользователя:
$ rkhunter --check
Программа кроме вывода информации на экран, создаст лог проверки, который можно прочитать с помощью команды:
$ cat /var/log/rkhunter.log
К сожалению программа работает только на английском, поэтому, чтобы понять в каком состоянии ваша система вам придется немного понимать английский.
А теперь давайте рассмотрим еще несколько опций программы которые мы уже использовали, или которые вам могут пригодится:
  • --vl, --verbose-logging - максимально подробный вывод
  • --quiet - минимум информации в выводе
  • -l, --logfile - записать лог программы в свой файл
  • --cronjob - не интерактивный режим проверки, используется для запуска с помощью cron, отсюда и название.
  • --list - позволяет посмотреть какие возможности проддерживает программа, можно передать несколько параметров, test - тесты, lang - языки, rootkits - руткиты.
  • --unlock - удаляет файл блокировки базы данных, может быть полезна если предыдущий сеанс работы с программой был завершен некорректно.
Например, чтобы посмотреть все руткиты, которые может найти программа выполните:
$ sudo rkhunter --list rootkits

Что такое Chkrootkit?

Chkrootkit - это классический инструмент позволяющий не только искать руткиты Linux, но и проверять систему на признаки чужого присутстсвия. Программа позволяет ваш компьютер или сервер на наличие подозрительных процессов, руткитов и проверяет список известных руткитов. Функциональность программы очень похожа на Rkhunter.
Программа состоит из нескольких отдельных утилит:
  • chkrootkit - скрипт для проверки системы
  • ifpromisc - сканирование интерфейсов на предмет неразборчивого режима
  • chklastlog - проверить лог lastlog на предмет удаления записей
  • chkwtmp - проверка лога wtmp на предмет удаления записей
  • chkproc - писк троянских программ
Установить программу в Ubuntu можно с помощью команды:

$ sudo apt-get install chkrootkit
Если у вас другой дистрибутив, то вы можете собрать программу из исходников:
$ wget --passive-ftp ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
$ tar xvfz chkrootkit.tar.gz
$ cd chkrootkit-*/
$ make sense
$ make install

Проверка системы с помощью chkrootkit

Команды выполняются без параметров. Достаточно запустить нужную утилиту чтобы найти руткиты linux:
$ sudo chkrootkit
Аналогично вы можете выполнить другую утилиту, чтобы проверить на модификацию lastlog:
$ sudo chklastlog

Выводы

Вот и все. Выполняйте регулярное сканирование Linux, чтобы вовремя выявить все угрозы, особенно это актуально для серверов, которые чаще всего могут подвергаться хакерским атакам.
Источник http://losst.ru/proverka-linux-na-virusy