Я же правильно понимаю что данный способ не сработает если в ноутбуке используются только свои UEFI ключи. т.к. не получится запустить grub.elf подписанный ключами MS
TPM это срез угла в безопасности. т.к. позволяет при физическом доступе как минимум загрузить os. И обмен с TPM не зашифрован и его можно дампать. Это вроде хотят как-то прикрыть шифрованием сообщений в SPI.
Безопасность не может быть удобной по определению.
выбор дистрибутива это совсем другой разговор. А вот что вы подразумеваете под "арчевые скрипты" непонятно. Не могли бы вы раскрыть эту часть более подробно?
В принципе это возможно в grub2 с какой то версии он стал поддерживать шифрованный раздел /boot/ но в нём есть ограничение на поддерживаемый формат LUKS и самое противное это необходимость вводить пароль дважды. И нет возможности удалённо ввести пароль по ssh
В принципе вы правы. Такое добавление ещё сильнее усложнит атаку. Но такое сработает насколько мне известно только при физическом доступе к загружаемому устройству.
При редком использовани удобней что-то что примит исходную строку и результирующую и на основании этого сделает регулярку.
Но я такого не встречал к сожелению.
Ну не знаю для меня условие kernel >5.0 и qemu > 4.0 и ubuntu 18 lts невыполнимо т.к. там ещё 2.11. так что можно считать что в промышленой эксплатации этой фичи нет.
root@scw:/etc/bird# cat /usr/local/bin/chklist.sh
#!/bin/bash
TMP_DIR=/tmp/blacklist
mkdir -p $TMP_DIR/list
cd $TMP_DIR/list
wget -N https://antifilter.download/list/ipsum.lst https://antifilter.download/list/subnet.lst
old=$(cat $TMP_DIR/md5.txt);
new=$(cat $TMP_DIR/list/*.lst | md5sum | head -c 32);
if [ "$old" != "$new" ]
then
cat $TMP_DIR/list/ipsum.lst | sed 's_.*_route & reject;_' > /etc/bird/ipsum.txt
cat $TMP_DIR/list/subnet.lst | sed 's_.*_route & reject;_' > /etc/bird/subnet.txt
/usr/sbin/birdc configure;
logger "RKN list reconfigured";
echo $new > $TMP_DIR/md5.txt;
fi
root@scw:/etc/bird# cat /etc/bird/bird.conf
log syslog all;
router id 172.24.2.2;
protocol kernel {
scan time 60;
import none;
export where proto = "OurRouter";
}
protocol device {
scan time 60;
}
protocol direct {
interface "venet*", "tun*", "ppp*"; # Restrict network interfaces it works with
}
protocol static static_bgp {
include "subnet.txt";
include "ipsum.txt";
include "custom.txt";
}
protocol bgp OurRouter {
description "Our Router";
neighbor 172.24.2.1 as 64999;
import all;
export where proto = "static_bgp";
next hop self;
local as 64998;
source address 172.24.2.2;
passive off;
}
+ если результат шаблона изменился
но у этой строки есть частный случай
когда два разных шаблона накатываются на один файл на сервере тогда будет постоянный changed даже если результат их работы одинаковый
и результат этой строки можно подправить переопределив его в /etc/ansible/ansible.cfg
ansible_managed = Ansible managed: modified on %Y-%m-%d %H:%M:%S
мой пример include в шаблоне github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/default.conf.j2
код#{{ ansible_managed }}
{% if item.data is mapping %}
{% for key, value in item.data|dictsort %}
{% set tabs = [] %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% endfor %}
{% endif %}
а теперь магия инклуд самого себя github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/nested_structure.j2
код{% if value is mapping %}
{% set tabs = tabs + [' '] %}
{% for key, value in value|dictsort %}
{% if key == 'raw' %}
{% for listes in value %}
{% for i in tabs %}{{i}}{% endfor %}{{ listes }}
{% endfor %}
{% elif value is number %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% elif value is string %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ value }}";
{% elif value is iterable %}
{% if value is mapping %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for listes in value %}
{% if listes is mapping %}
{% set value = listes %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ listes }}«1;
{% endif %}
{% endfor %}
{% endif %}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% endif %}
{% endfor %}
{% endif %}
вообще некоторые вещи в шаблонах работают не ожидаемо
с чем приходится считатся
скрипт читает meta для получения списка поддерживаемых ос и создает докер контейнеры с настроенным ключевым доступом.
потом запускается ansible.
тест считается удачным если роль отработала без ошибок во всех контейнерах.
проблемой для меня сейчас является только скорость выполнения такого теста (6мин +-2 мин)
Я же правильно понимаю что данный способ не сработает если в ноутбуке используются только свои UEFI ключи. т.к. не получится запустить grub.elf подписанный ключами MS
Если адаптировать то думаю сработает. только модуль ZFS нужно запихивать в ядро собирая либо в initramfs как динамический модуль в "правильную папку".
TPM это срез угла в безопасности. т.к. позволяет при физическом доступе как минимум загрузить os.
И обмен с TPM не зашифрован и его можно дампать. Это вроде хотят как-то прикрыть шифрованием сообщений в SPI.
Безопасность не может быть удобной по определению.
выбор дистрибутива это совсем другой разговор.
А вот что вы подразумеваете под "арчевые скрипты" непонятно. Не могли бы вы раскрыть эту часть более подробно?
ключи хранятся локально на зашифрованном root. Это не 100% безопасно т.к. ключи не защищены паролем или шифрованием.
В принципе это возможно в grub2 с какой то версии он стал поддерживать шифрованный раздел /boot/ но в нём есть ограничение на поддерживаемый формат LUKS и самое противное это необходимость вводить пароль дважды. И нет возможности удалённо ввести пароль по ssh
В принципе вы правы. Такое добавление ещё сильнее усложнит атаку. Но такое сработает насколько мне известно только при физическом доступе к загружаемому устройству.
Маловероятно это не профиль нашей компании.
При редком использовани удобней что-то что примит исходную строку и результирующую и на основании этого сделает регулярку.
Но я такого не встречал к сожелению.
Ну не знаю для меня условие kernel >5.0 и qemu > 4.0 и ubuntu 18 lts невыполнимо т.к. там ещё 2.11. так что можно считать что в промышленой эксплатации этой фичи нет.
у virtio-scsi есть важный плюс он поддерживает проброс trim
добавить маршруты в bird можно так
Ну не оценят и ладно. А опыт останется и в другом месте прегодится.
https://github.com/le9i0nx/debian-autoinstall
например так
но у этой строки есть частный случай
когда два разных шаблона накатываются на один файл на сервере тогда будет постоянный changed даже если результат их работы одинаковый
и результат этой строки можно подправить переопределив его в /etc/ansible/ansible.cfg
ansible_managed = Ansible managed: modified on %Y-%m-%d %H:%M:%S
github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/default.conf.j2
код#{{ ansible_managed }}
{% if item.data is mapping %}
{% for key, value in item.data|dictsort %}
{% set tabs = [] %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% endfor %}
{% endif %}
а теперь магия инклуд самого себя
github.com/le9i0nx/ansible-rspamd/blob/master/templates/etc/rspamd/conf.d/nested_structure.j2
код{% if value is mapping %}
{% set tabs = tabs + [' '] %}
{% for key, value in value|dictsort %}
{% if key == 'raw' %}
{% for listes in value %}
{% for i in tabs %}{{i}}{% endfor %}{{ listes }}
{% endfor %}
{% elif value is number %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% elif value is string %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ value }}";
{% elif value is iterable %}
{% if value is mapping %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for listes in value %}
{% if listes is mapping %}
{% set value = listes %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} {
{% include 'nested_structure.j2' %}
{% for i in tabs %}{{i}}{% endfor %}}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = "{{ listes }}«1;
{% endif %}
{% endfor %}
{% endif %}
{% else %}
{% for i in tabs %}{{i}}{% endfor %}{{ key }} = {{ value }};
{% endif %}
{% endfor %}
{% endif %}
вообще некоторые вещи в шаблонах работают не ожидаемо
с чем приходится считатся
Travis файл github.com/le9i0nx/ansible-syncthing/blob/master/.travis.yml
скрипт читает meta для получения списка поддерживаемых ос и создает докер контейнеры с настроенным ключевым доступом.
потом запускается ansible.
тест считается удачным если роль отработала без ошибок во всех контейнерах.
проблемой для меня сейчас является только скорость выполнения такого теста (6мин +-2 мин)