Windows 10 BestCrypt BSOD и перезагрузка при размонтировании криптодиска

При размонтировании шифрованного диска выдавалось сообщение о том, что с диска открыты какие-то файлы и его размонтирование может привести к потере несохранённых данных открытых файлов. После согласия пользователя с размонтированием система входила в долгое ожидание и через минуту уходила в BSOD (синий экран смерти) и перезагружалась в соответствии с настройками. Ситуация повторялась в 9-ти случаях из 10-ти. Windows 10 работала в виртуальной машине KVM. Другие аналогичные инсталяции работали под VMWare и проблем не создавали.
Continue reading Windows 10 BestCrypt BSOD и перезагрузка при размонтировании криптодиска

Обновление ssh и очередное отключение устаревших алгоритмов

Время идёт и постепенно старые алгоритмы шифрования становятся небезопасными. Разрабочики софта конечно же постепенно их отключают. Но для админа-то обычно это просиходит внезапно и ой как не вовремя и становится чертовски неприятным сюрпризом, особенно если обновления накатываются атоматически. Так обновление на Fedora 23 подарило мне пару незабываемых часов когда я не мог достучаться на большую часть серверов которыми управляю. Казалось бы что обновление openssl, openssh в любом виде должно стать красной тряпкой, но пока что стереотип поведения не сложился. И последнее обновление openssh.i686 7.2p1-2.fc23, openssh-server.i686 7.2p1-2.fc23, openssh-clients.i686 7.2p1-2.fc23 снова подарило неожиданный сюрприз в виде невозможности залогиниться на клиентский mikrotik.

[user001@localhost ~]$ ssh root@192.168.88.1
ssh_dispatch_run_fatal: Connection to 192.168.88.1 port 22: DH GEX group out of range

И как обычно бывает в свежих случаях гугл и яндекс не показали ничего интересного.
— Упс, сказал я и полез в мануал.
Continue reading Обновление ssh и очередное отключение устаревших алгоритмов

sudoers: проверка синтаксиса

Когда вы редактируете файл /etc/sudoers или создаёте подключаемые к нему файлы в каталоге /etc/sudoers.d/* то неплохо бы сразу проверить синтаксис. Если вы редактируете sudoers в его редакторе visudo то он автоматически проверит синтаксис при сохранении. А если как я больше пользуетесь mcedit то после редактирования sudoers можно выполнить проверку указав ключ:

[root@d01 sudoers.d]# visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/zabbix_sudo: parsed OK

Как видите синтаксис проверился вместе со вложением /etc/sudoers.d/zabbix_sudo.

Но на боевом сервере, где sudo активно используется системой мониторинга или каким либо скриптом из crontab, не стоит проводить правку файла по-живому. Для этого его можно скопировать в другое место и там редактировать. А после редактирования проверить всё той же командой но с дополнительным ключом:

[root@d01 sudoers.d]# visudo -cf /root/sudoers.new
/root/sudoers.new: parsed OK

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

Почему копипастить команды с web сразу в терминал это глупость?

Потому что bash/sh терминал выполнит команду если в ней будет перевод строки.

Во-первых когда команда набирается руками происходит запоминание, сначала вы внимательно читаете команду, затем вводите ту часть которую запомнили, затем дальше читаете и снова вводите. Работают глаза, голова и руки. Запоминается эффективнее.

Во-вторых вместе с командой можно скопипастить чужой зловредный код. Не верите?
Выделите код который приведён ниже скопируйте и затем вставьте в тектовый редактор. После этого вы всегда будете копипастить код через редактор, а короткие команды будете набирать руками.
Continue reading Почему копипастить команды с web сразу в терминал это глупость?

Однострочный скрипт вывода smart информации по нескольким дискам в виде таблицы

Буквы дисков нужно задать в операторе for in a b (ниже будет скрипт который сам выберет все диски)

# for idx in a b ; do smartctl -A /dev/sd$idx | sed -n '/^ID#/,/^$/p' | sed -e '/^ID#/d;s/^./'"$idx "'&/g'; done | sed -e '/^[ \t]*$/d' | awk '{disks[$1]=$1;keys[$3]=$2$3;valuelen=length($11);keylen=length($3);if(valuelen>maxvaluelen){maxvaluelen=valuelen}if(keylen>maxkeylen){maxkeylen=keylen};VALUES[$1,$3]=$11}END{printf("\n%-"maxkeylen"s","NAME");for(disk in disks){printf(" %"maxvaluelen"s",toupper("SD"disk))};for(key in keys){printf("\n%-"maxkeylen"s",key); for(disk in disks){printf(" %"maxvaluelen"s", VALUES[disk,key])}};printf("\n")}'

NAME                       SDA    SDB
Spin_Retry_Count             0      0
Seek_Error_Rate              0      0
Start_Stop_Count           101     21
Multi_Zone_Error_Rate        0      0
Offline_Uncorrectable        0      0
Spin_Up_Time              9216  10183
Power_Cycle_Count           95     12
Calibration_Retry_Count      0      0
Load_Cycle_Count        199966 111455
Reallocated_Sector_Ct        0      0
Raw_Read_Error_Rate          3      0
Current_Pending_Sector       0      0
Reallocated_Event_Count      0      0
Power_On_Hours            9259  11992
Temperature_Celsius         27     23
UDMA_CRC_Error_Count         0      0
Power-Off_Retract_Count     33      7

Одним движением руки этот скрипт преобразуется в вывод информации, например по 8-ми дискам в RAID контроллере 3ware.

for idx in `seq 0 7` ; do smartctl -A /dev/twa0 -d 3ware,$idx | sed -n '/^ID#/,/^$/p' | sed -e '/^ID#/d;s/^./'"$idx "'&/g'; done | sed -e '/^[ \t]*$/d' | awk '{disks[$1]=$1;keys[$3]=$2$3;valuelen=length($11);keylen=length($3);if(valuelen>maxvaluelen){maxvaluelen=valuelen}if(keylen>maxkeylen){maxkeylen=keylen};VALUES[$1,$3]=$11}END{printf("\n%-"maxkeylen"s","NAME");for(disk in disks){printf(" %"maxvaluelen"s",toupper("p:"disk))};for(key in keys){printf("\n%-"maxkeylen"s",key); for(disk in disks){printf(" %"maxvaluelen"s", VALUES[disk,key])}};printf("\n")}'

А такой скрипт сам выберет все диски с помощью lsblk и выведет состояние smart

while read NAME ; do smartctl -A "${NAME}" | sed -n '/^ID#/,/^$/p' | sed -e '/^ID#/d' -e 's|^.|'"${NAME} "'&|g'; done < <(lsblk -d --noheadings --output name,type | awk '$2=="disk"{print "/dev/"$1}' | sort) | sed -e '/^[ \t]*$/d' | awk '{disks[$1]=$1;keys[$3]=$2$3;valuelen=length($11);keylen=length($3);if(valuelen>maxvaluelen){maxvaluelen=valuelen};if(keylen>maxkeylen){maxkeylen=keylen};VALUES[$1,$3]=$11}END{printf("\n%-"maxkeylen"s","NAME");for(disk in disks){valuelen=length(disk);if(valuelen>maxvaluelen){maxvaluelen=valuelen}};for(disk in disks){printf(" %"maxvaluelen"s",disk)};for(key in keys){printf("\n%-"maxkeylen"s",key); for(disk in disks){printf(" %"maxvaluelen"s", VALUES[disk,key])}};printf("\n")}'

Обновление базы дисков smartctl на CentOS 6.7

Чтобы обновить базу дисков smartctl на CentOS release 6.7 (Final) нужно использовать новый скрипт, так как старый, который идёт в дистрибутиве не работает.

update-smart-drivedb -v ./aa.txt
Download from branches/RELEASE_5_43_DRIVEDB
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
109   329  109   329    0     0   1108      0 --:--:-- --:--:-- --:--:--  2611
./aa.txt.error: rejected by /usr/sbin/smartctl, probably no longer compatible

С момента моего предыдущего обновления снова изменилась структура smartmontools линков для получения свежей базы. Поэтому я написал скрипт который загружает скрипт обновления и настраивает его так чтобы он стянул свежую базу дисков.
Continue reading Обновление базы дисков smartctl на CentOS 6.7

error: Failed to create domain … Cannot check QEMU binary

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

# virsh create /root/copy-vm/server.vm.xml
error: Failed to create domain from /root/copy-vm/server.vm.xml
error: Cannot check QEMU binary /usr/bin/qemu-kvm: No such file or directory

# whereis qemu-kvm
qemu-kvm: /usr/libexec/qemu-kvm /usr/share/qemu-kvm /usr/share/man/man1/qemu-kvm.1.gz

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

...
    <emulator>/usr/bin/qemu-kvm</emulator>
...

После этого вписать туда результат команды

which qemu-kvm

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

Dec 12 13:15:35 gw1 sshd[19967]: Received disconnect from 66.234.240.251: 11: Bye Bye

Распухание логов роутера заставило меня обратить более пристальное внимание на записи в журналах безопасности sshd.

Dec 12 13:15:35 gw1 sshd[19967]: Received disconnect from 66.234.240.251: 11: Bye Bye

Эта запись появляется по одной причине: у меня запрещён вход на ssh по паролю. Разрешён только по сертификату. Бот который подбирает пароль к ssh к сожалению “тупой” и непрерывно долбится пока у него не закончится словарь. Когда ботов становится много и они настырны, то это и приводит к распуханию логов.
Continue reading Dec 12 13:15:35 gw1 sshd[19967]: Received disconnect from 66.234.240.251: 11: Bye Bye

OpenVPN: — PUSH тебе твой собственный ROUTE

К бессонной ночи привёло “молчание логов” OpenVPN сервера при невозможности прочесть файл.

Имеется OpenVPN сервер, к которому подключены VPN клиенты. За некоторыми клиентами находятся сети которые необходимо анонсировать другим клиентам OpenVPN и обеспечить маршрутизацию.

Для этого в OpenVPN предусмотрены четыре параметра находящиеся в двух разных файлах которые позволяют настроить роутинг в сети VPN клиента.

Файл /etc/openvpn/*.conf

push "route 192.168.33.0 255.255.255.0"
route 192.168.33.0 255.255.255.0
client-config-dir ccd-vpn03

client-config-dir определяет каталог в котором будут находиться файлы в которых будут объявлены сети клиентов. Имена файлов должны совпадать с CommonName сертификата клиента за которым находятся сети объявленные в файле. Например если за клиентом с сертификатом у которого CN равен “vpn03.gw01.common-client2” находится сеть 192.168.33.0 255.255.255.0 то файл /etc/openvpn/ccd-vpn03/vpn03.gw01.common-client2

iroute 192.168.33.0 255.255.255.0

Continue reading OpenVPN: — PUSH тебе твой собственный ROUTE

OpenWRT смена MAC адреса сетевого интерфейса

Как изменить MAC адрес сетевого интерфейса под OpenWRT

Смена MAC адреса может потребоваться если кабельный провайдер завязывается на адрес устройства. И часто такая смена адреса через провайдера может занять несколько часов. Также если у вас несколько устройств и вы иногда переключаете их то “дёргать” провайдера может быть обременительно. Поэтому быстрее адрес поменять самостоятельно, тем более это не сложно.

Через uci это меняется так:

root@OpenWrt:~# uci set network.wan.macaddr="00:0c:42:89:d3:e8" ; uci commit network

Continue reading OpenWRT смена MAC адреса сетевого интерфейса