2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !
Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
Управление несколькими клетками с помощью Shell скриптов
Между ручным управлением каждой клеткой с помощью cbsd jlogin и настройкой систем централизованной оркестровки вроде Puppet или Ansible находится способ, основанный на базе скриптов на языке Shell.
Использование фреймворка cbsd и команд вида jset/jget/jconfig/jexec позволяет с помощью простых скриптов реализовать достаточно сложные сценарии конфигурирования и управления множеством клеток.
Ниже приводится примеры написания таких скриптов для решения всевозможных групповых задач внутри клеток.
Тестируем наличие в клетках уязвимого ПО
Простейший скрипт, запускающий в каждой клетке команду pkg audit -F - проверка наличия установленного ПО с известными проекту FreeBSD уязвимостями.
#!/bin/sh echo «Checking local SYSTEM» pkg audit -F echo "" echo «Checking DokuWiki JAIL» /usr/local/bin/cbsd jexec jname=dokuwiki pkg audit -F echo "" echo «Checking OwnCloud JAIL» /usr/local/bin/cbsd jexec jname=owncloud pkg audit -F echo "" echo «Checking FTP Backup JAIL» /usr/local/bin/cbsd jexec jname=ftpbackup pkg audit -F echo "" echo «Checking SAMBA JAIL» /usr/local/bin/cbsd jexec jname=samba pkg audit –F
Пример вывода скрипта после отработки:
Checking local SYSTEM vulnxml file up-to-date 0 problem(s) in the installed packages found. Checking DokuWiki JAIL vulnxml file up-to-date 0 problem(s) in the installed packages found. Checking OwnCloud JAIL vulnxml file up-to-date 0 problem(s) in the installed packages found. Checking FTP Backup JAIL vulnxml file up-to-date 0 problem(s) in the installed packages found. Checking SAMBA JAIL vulnxml file up-to-date 0 problem(s) in the installed packages found.
Более компактный вариант скрипта, который использует цикл и проверку статуса Jail.
#!/bin/sh for jail in $(/usr/local/bin/cbsd jorder); do jstatus1=`/usr/local/bin/cbsd jstatus ${jail}` if [ $jstatus1 -ne "0" ]; then /usr/local/bin/cbsd jexec jname=${jail} pkg audit -F fi done
Обновление базы известных пакетов и вывод информации об наличие обновлений
Аналогичная предыдущей идеи - выполняем pkg upgrade с ключом -n внутри каждой клетки. Итог - обновляем список доступных для клетки пакетов pkg из репозиториев и выводим на экран доступные обновления.
#!/bin/sh echo «Checking local SYSTEM» pkg upgrade -n echo "" echo «Checking DokuWiki JAIL» /usr/local/bin/cbsd jexec jname=dokuwiki pkg upgrade -n echo "" echo «Checking OwnCloud JAIL» /usr/local/bin/cbsd jexec jname=owncloud pkg upgrade -n echo "" echo «Checking FTP Backup JAIL» /usr/local/bin/cbsd jexec jname=ftpbackup pkg upgrade -n echo "" echo «Checking SAMBA JAIL» /usr/local/bin/cbsd jexec jname=samba pkg upgrade –n
Вариант с циклом работает аналогично.
Получение мгновенных значений потребления оперативной памяти клеток
Задача простая - хотим знать, сколько запущенные клетки используют оперативной памяти
#!/bin/sh cbsd jrctl mode=show | egrep -i "\-\-\-|memoryuse" | grep -v "\=0"
Полученный результат выполнения скрипта
--- dokuwiki --- memoryuse=31M vmemoryuse=645M --- owncloud --- memoryuse=46M vmemoryuse=1948M --- samba --- memoryuse=16M vmemoryuse=1680M --- ftpbackup --- memoryuse=1172K vmemoryuse=42M --- asterisk --- memoryuse=25M vmemoryuse=889M
Запуск нескольких скриптов и отправка по почте
Итак - у нас есть несколько полезных скриптов, которые получают нужную нам информацию о клетках. Нужно решить задачу их периодического запуска и получения вывода на электронную почту
#!/bin/sh sleep 1 echo "To: vershinin.e@gmail.com" > /root/Scripts/audit-pkg.mail echo "Subject: Audit PKG on MAIN and JAILed systems!!!" >> /root/Scripts/audit-pkg.mail echo "" >> /root/Scripts/audit-pkg.mail echo "" >> /root/Scripts/audit-pkg.mail sleep 1 `/root/Scripts/pkg-audit-all-sys.sh >> /root/Scripts/audit-pkg.mail` sleep 1 `/root/Scripts/pkg-upgrade-all-sys.sh >> /root/Scripts/audit-pkg.mail` sleep 1 `/root/Scripts/memory-use-jails.sh >> /root/Scripts/audit-pkg.mail` sleep 1 `cat /root/Scripts/audit-pkg.mail | /usr/local/bin/msmtp vershinin.e@gmail.com` sleep 1
Настройки почтового клиента msmtp в файле /root/.msmtprc
account default host smtp.gmail.com maildomain gmail.com auto_from on port 587 from vershinin.asterisk@gmail.com tls on tls_certcheck off auth on user vershinin.asterisk password XXXXXXXXXXXX logfile /var/log/msmtp.log # Syslog logging with facility LOG_MAIL instead of the default LOG_USER. syslog LOG_MAIL
Регулярное резервное копирование клеток
Скрипт для регулярной выгрузки клеток и их сохранение в определенном месте с определенным именем.
#!/bin/sh jailname=$1 CBSDPATH=/CBSD JAILBACKUPTARGET=/data/JAILS backupdate=`/bin/date "+%Y-%m-%d"` jstatus=`/usr/local/bin/cbsd jstatus $jailname` if [ $jstatus -ne "0" ]; then /usr/local/bin/cbsd jstop $jailname sleep 15 fi jstatus2=`/usr/local/bin/cbsd jstatus $jailname` if [ $jstatus2 -eq "0" ]; then /usr/local/bin/cbsd jexport jname=$jailname compress=9 sleep 15 fi if [ -f $CBSDPATH/export/$jailname.img ]; then cp $CBSDPATH/export/$jailname.img $JAILBACKUPTARGET/$jailname-$backupdate.img sleep 5 fi jstatus3=`/usr/local/bin/cbsd jstatus $jailname` if [ $jstatus3 -eq "0" ]; then /usr/local/bin/cbsd jstart $jailname sleep 5 fi jstatus4=`/usr/local/bin/cbsd jstatus $jailname` if [ $jstatus4 -ne "0" ]; then echo "Backup JAIL Finish Successfull! Jail restarted!" fi
Данный скрипт запускается через /etc/crontab для каждой клетки индивидуально по расписанию.
# Backup JAILS monthly 1 4 1 * * root /root/Scripts/backup-jail.sh dokuwiki 1 4 2 * * root /root/Scripts/backup-jail.sh owncloud 1 4 3 * * root /root/Scripts/backup-jail.sh samba && /usr/local/bin/cbsd jexec jname=samba /usr/local/etc/rc.d/transmission stop 1 4 4 * * root /root/Scripts/backup-jail.sh ftpbackup
Итог работы скрипта - в каталоге /data/JAILS/ каждый месяц в первых числах будут создаваться сжатые экспорты всех клеток со всеми настройками.
Полезные alias-ы для интерпретатора CSH
При частой работе с клетками некоторые большие команды удобно сократить с помощью создания alias в настройках интерпретатора - например .cshrc
Просмотр файловых систем - вариант первый.
alias df 'df -m | grep -v "\/dev"'
Просмотр файловых систем - вариант второй.
alias df2 'df | grep -v "\/jails\/"'
Список всех клеток со всех узлов.
alias jall cbsd jls alljails=1 shownode=1
Список всех узлов и их статусов.
alias cnodes cbsd node mode=list
Команды запуска и остановки torrent клиента Transmission внутри клетки.
alias tstop '/usr/local/bin/cbsd jexec jname=samba /usr/local/etc/rc.d/transmission stop' alias tstart '/usr/local/bin/cbsd jexec jname=samba /usr/local/etc/rc.d/transmission start'