Я пытался автоматически добавить правила UFW, чтобы разрешить доступ SSH во время установки 16.04 с использованием файла preseed. Однако ни один из документированных методов не приводит к открытию порта 22 после первой загрузки.
В частности, я пробовал вариации следующих строк:
ufw ufw/enable boolean true
ufw ufw/allow_custom_ports string 22/tcp
ufw ufw/allow_known_ports string 22/tcp
ufw ufw/allow_known_ports string SSH
Но ни один из них, похоже, не имел значения. Кроме того, мои попытки добавить правило в раздел post-install не увенчались успехом, поскольку модуль ядра iptables не был загружен, что привело к ошибке.
Возможно ли это сделать в файле preseed? Или мне просто сдаться и включить брандмауэр при загрузке с помощью взлома?
решение1
Я тоже пытался заставить это работать некоторое время. Ничего не получалось. Пока я наконец не сдался и не исправил это простым обходным решением rc.local:
d-i preseed/late_command string \
mv /target/etc/rc.local /target/etc/rc.local.orig; \
echo '#!/bin/sh -e' > /target/etc/rc.local; \
echo '/usr/sbin/ufw allow ssh' >> /target/etc/rc.local; \
echo 'mv -f /etc/rc.local.orig /etc/rc.local' >> /target/etc/rc.local; \
echo 'test -x /etc/rc.local && /etc/rc.local' >> /target/etc/rc.local; \
echo 'exit 0' >> /target/etc/rc.local; \
chmod +x /target/etc/rc.local
Обходной путь — добавление пользовательского rc.local
скрипта, использование preseed/late_command
которого:
Сделайте резервную копию оригинала
rc.local
(rc.local.orig
используяmv
)Затем
rc.local
создается новый скрипт, который будет выполнен при первой загрузке системы.Новый сценарий будет:
- Включить доступ SSH с помощью
ufw
- Восстановить оригинал
rc.local
(переместивrc.local.orig
вrc.local
, удалив себя) - Проверьте, является ли оригинал
rc.local
исполняемым, и запустите его. - Успешно выйти
- Включить доступ SSH с помощью