OpenWRT — борьба за размер для DIR-320 ч.5: отказываемся от SSH

Давно я не рассказывал про способы уменьшения размера прошивки OpenWRT. Однако количество методов найденных растет, сегодня рассмотрим еще один.

Итак, ближе к делу.

В прошивку OpenWRT по умолчанию встроены сразу два сервера терминалов — DropBear и Telnet.
Причем Telnet используется лишь для установки пароля суперпользователя root, а далее всё общение идет через протокол ssh, который реализован при помощи пакета Dropbear. Если после установки пароля вы попробуете использовать Telnet, то наше устройство нас пошлет куда подальше скажет, что это не безопасно и сообщит, мол используйте SSH.

Не будем параноиками, а вернем возможность общаться с роутером через telnet, а SSH выпилим для экономии размера.

Возвращаем полный контроль над устройством через Telnet

Добавляем опцию Login пакета BusyBox

Без этого пунктика в меню конфигуратора у нас ничерта работать не будем, посему первым делом идем в make menuconfig и приводим к виду:

Base system  --->
   <*> busybox
       [*]   Customize busybox options
             Login/Password Management Utilities  --->
                [*] login
                [ ]   Run logged in session in a child process (NEW)
                [ ]   Support for login scripts (NEW)
                [ ]   Support for /etc/nologin (NEW)
                [ ]   Support for /etc/securetty (NEW)
                [*] passwd (NEW)
                [ ]   Check new passwords for weakness

Сделали? Молодцы, читаем дальше.

Редактируем файл login.sh

Файл login.sh лежит в каталоге с исходниками в каталоге /package/base-files/files/bin
Его содержимое в исходниках версии CC на сегодня имеет примерно следующий вид:

#!/bin/sh
# Copyright (C) 2006-2011 OpenWrt.org

if ( ! grep -qsE '^root:[!x]?:' /etc/shadow || \
     ! grep -qsE '^root:[!x]?:' /etc/passwd ) && \
   [ -z "$FAILSAFE" ]
then
	echo "Login failed."
	exit 0
else
cat << EOF
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------
EOF
fi

exec /bin/ash --login

Ничего тут сложного нет: при подключении пользователя проверяем, установлен ли пароль для пользователя root, если установлен - разрываем подключение ругаясь, если нет - просим установить и подключиться далее при помощи SSH.

Приведем же файл к следующему виду:

#!/bin/sh
# Copyright (C) 2006-2011 OpenWrt.org

if ( ! grep -qsE '^root:[!x]?:' /etc/shadow || \
     ! grep -qsE '^root:[!x]?:' /etc/passwd ) && \
   [ -z "$FAILSAFE" ]
then
	busybox login
else
cat << EOF
 === IMPORTANT ============================
  Use 'passwd' to set your login password
 ------------------------------------------
EOF
exec /bin/ash --login
fi

Теперь прошивка пустит нас по Telnet в любом случае. Если пароль установлен, то благополучно спросит его. Профит.

Выпиливаем DropBear

Ну это вообще самое простое:

Base system  --->
      < > dropbear

Ну вот и всё, собираем и радуемся еще 32-64 килобайтам освобожденного пространства.

Кстати, друзья, теперь за всеми свежими и важными записями можете следить прямо из паблика ВКонтакте.

Подпишись в один клик:

Комментариев: 7

  1. Друзья, отвечаю на свой пост выше по выпиливанию полностью ipv6.
    Делаем все в указанной последовательности.

    Global build settings  --->
     [ ] Enable IPv6 support in packages
    Base system
       busybox
          Networking utilities
             [ ] Enabled IPv6 support
    Kernel modules
       Netfilter Extensions
          kmod-ip6tables
          kmod-nf-ipt6
          kmod-nf nat6
           kmod-nf-conntrack6
    Libraries
       Firewall
           libip6tc
    Network
           odhcp6c
    Kernel modules
       Network support
          [ ] kmod-ipv6

    Всем бобра.

    • Вижу, что вы нашли мою старую статью на другом ресурсе. Подобные манипуляции в последнее время вызывали Kernel Panic.

      Теперь же в транке чтобы выпилить поддержку IPv6 стало достаточно выполнить отключение пункта

      Global build settings  --->
       [ ] Enable IPv6 support in packages

      Остальное все отключается и прячется само-собой.

      В общем дождались нормального решения)

Оставьте свой комментарий

Войти с помощью: