Советы
SSH fingerprint check
В моем не очень продвинутом понимании работы SSH, сервер, при своем первом старте, создает пару ключей, закрытый и открытый. Открытый ключ отсылается клиенту в момент установки соединения. Клиент, в свою очередь, при установки соединения создает отпечаток ключа (fingerprint) и сохраняет его у себя в файле known_hosts.
При каждом новом соединении он проверяет полученный при первом соединении отпечаток с тем. что был передан при новом соединении. Если они не отличаются, то все видимо хорошо. Если же они разные, то с большой вероятностью вы подключаетесь к хосту, который хочет выдать себя за кого-то другого.
В принципе эта проверка очень даже полезна, так как значительно снижает вероятность атаки “человек посередине”, но внутри собственной сети от нее часто больше бед, чем пользы. Уже несколько раз наталкивался в своей практике, как страдали бекапы через ssh от проверки fingerprint хоста. Как правило, такое происходит при переустановки ОС, смене доменного имени, или IP. Если машин немного – проблем особых нет, сам все вовремя отловишь. Но когда число серверов переваливает за второй десяток, да еще серверами и бекапами занимаются разные люди – быть беде.
Решение есть – не проверять fingerprint. Конечно же оно связано с определенным риском получить MITM, так что нужно сперва взвесить все плюсы и минусы. Реализация же очень простая:
ssh -o StrictHostKeyChecking=no host.ru
Можно еще запретить добавление fingerprint в known_hosts
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null host.ru
Источник: http://linuxcommando.blogspot.com
FreeBSD timezone для России после перехода на летнее время.
Этой весной в России отменили переход на летнее время. Хорошо это или плохо для всей страны – покажет время. Для нас же, юниксойдов, это скорее проблема. Нужно обновлять файлы timezone. Многие linux дистрибутивы уже это сделали, а вот старушка FreeBSD, как всегда, сама у себя на уме. В RELENG_8 все хорошо, а в старых системах 7.X, 8.X чтобы обновиться, нужно допилить напильником. Ниже я дам несколько линков о теоретической части вопрос, а тут практика:
1) Нужно достать новый файл с описанием европейских timezones.
Сделать это можно или из cvs/svn FreeBSD RELENG_8 или с ftp проекта, который собственно на добровольных началах мейнтейнит базу всех timezone планеты (ftp://elsie.nci.nih.gov/pub/).
2) После получения файла europe версии 8.33 или выше, его нужно положить в /usr/src/share/zoneinfo
3) cd /usr/src/share/zoneinfo && make clean ; make install clean
4) Получили новые файлы в /usr/share/zoneinfo/
5) Проверяем, что все ок. Делается это утилитой zdump, сейчас лето и старая зона должна показывать MSD для Москвы, и MSK для нового файла зоны. Причем время должно быть одинаковым.
# zdump /usr/share/zoneinfo/Europe/Moscow
/usr/share/zoneinfo/Europe/Moscow Fri Aug 12 17:11:22 2011 MSK
6) Если нужно, то копируем /usr/share/zoneinfo/Europe/Moscow в /etc/localtime
Линки:
Статья про время в linux на opennet
Tz database
P.S
Я написал соответствующий PR в FreeBSD, с запросом как же быть с системами, которые будут поддерживать еще несколько лет (7.3 например), но имеют старые файлы зон для России. Мне вежливо ответили, что понимают мое беспокойство, но ничего сделать не могут. В базовую систему изменения вносятся только в случае проблем с безопасностью. Т.е. ждем, когда кто-нибудь придумает, как использовать старый файл зоны для проникновения в систему? Забавно.
P.S 2
Как мне подсказал Максим Коновалов из Russian FreeBSD Team, можно использовать порт:
misc/zoneinfo
P.S 3
Самый простой и самый некрасивый вариант:
cp /usr/share/zoneinfo/Etc/GMT+4 /etc/localtime
sysctl.conf.local или как настроить sysctl не ломая стандартизацию
Часто парк серверов не такой уж стандартный, как того хотелось бы. И в тоже время хочется держать стандартные настройки на всех серверах, чтобы обновлять и изменять их особо не парясь… Это я к чему? Возникла задача поменять sysctl.conf на одном из серверов, но sysctl.conf должен быть стандартным на всех серверах! Вот незадача! Что же делать?
Ради интереса посмотрел содержание /etc/rc.d/sysctl и нашел в нем
sysctl_start()
{
parse_file /etc/sysctl.conf $1
parse_file /etc/sysctl.conf.local $1
}
Разработчики FreeBSD уже подумали о этой проблеме =) Все кастумные настройки добавляем в /etc/sysctl.conf.local
tcp listen queue в Linux
В FreeBSD netstat отличается от netstat linux, причем в лучшую сторону!
Например, netstat -Lan покажет listen queue, что иногда нужно для дебага непонятных проблем. Но в linux аналога нет! ( есть какие-то самодельные патчи на netstat с требованием к ядру 2.6.18+ =) ).
Что же делать? Awk спешит на помощь!
› Continue reading
Изучаем top в FreeBSD
Вообще, все что я тут буду рассказывать есть или в help top (нажми h во время работы top), или есть в man top.
Если тебе лень их читать (что я, конечно же, не одобряю), то эта заметка для тебя, и мне шпаргалка.
Что такое top и зачем он нужен, я писать не буду, поговорим о приятных возможностях.
Еще хочу заметить, что top меняется вместе с системой, что-то добавляется, что-то меняется, что-то исчезает. Все опции здесь взяты для freebsd 7.3, как наиболее надежной в данный момент. И так поехали!
› Continue reading
Обработка сигналов в sh
Сигналы – один из способов взаимодействия между процессами. Отправив определенный сигнал, можно приостановить или возобновить работы приложения, завершить его или сделать с ним еще что-нибудь. Сигнал определяется номером, которому соответствие имя. Посмотрите man signal или наберите kill -l чтобы получить список сигналов.
В скриптах обработка сигналов может быть крайне полезна.
› Continue reading
Поиск измененных конфигурационных файлов FreeBSD
В продолжение темы mergemaster и обновления системы. Как найти конфигурационные файлы, которые были изменены с момента установки системы? Очень просто – сравнить их с файлами “из коробки”.
› Continue reading
epoch converter
Набрел на сайт, на котором очень подробно разбираются все моменты работы с epoch во всех популярных языках программирования: получение времени в epoch, конвертирование времени из human readable в epoch и обратно.
П.С. мне всегда было лень читать линуковый man date, потому я всегда пользовался date -r из FreeBSD, а тут оказывается все так же просто… только во FreeBSD все равно лучше =)
значение по умолчанию для переменной shell
Иногда нужно выставить значение по умолчанию для переменной, которую может указать/не указать пользователь в качестве аргумента при запуске. Для этого можно использовать вот такую конструкцию:
VALUE='' VALUE_DEFAULT='default' if [ -z $VALUE ]; then VALUE="$VALUE_DEFAULT" fi echo $VALUE
Из явных плюсов – ее читабельность, как всегда в ущерб краткости. Пробуем написать тоже самое, но короче:
VALUE='1' VALUE_DEFAULT='default' [ -z $VALUE ] && VALUE="$VALUE_DEFAULT" echo $VALUE
Получилось, но теперь понять конструкцию чуть сложнее. Пробуем сделать еще более короткий вариант:
VALUE=''
VALUE_DEFAULT='default'
VALUE=${VALUE:-$VALUE_DEFAULT}
echo $VALUE
Самый короткий вариант, но понятный только тем, кто внимательно прочитал man sh.
CentOS/RedHat svnserve quick howto
Периодически сталкиваюсь с задачей настройки svn server причем в самом простом его варианте и каждый раз забываю, что и как. Так что сделаю себе короткую заметку по настройке SVN на CentOS: