Про telnet, ssh, clish, klish в openWrt
По умолчанию для подключение через телнет не требуется авторизации и
достаточно просто набрать:
$ telnet 192.168.1.100 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. === IMPORTANT ============================ Use 'passwd' to set your login password this will disable telnet and enable SSH ------------------------------------------ BusyBox v1.19.4 (2013-07-08 17:26:11 MSK) built-in shell (ash) Enter 'help' for a list of built-in commands. ----------------------------------------------------- BARRIER BREAKER (Bleeding Edge, r36822) ----------------------------------------------------- * 1/2 oz Galliano Pour all ingredients into * 4 oz cold Coffee an irish coffee mug filled * 1 1/2 oz Dark Rum with crushed ice. Stir. * 2 tsp. Creme de Cacao -----------------------------------------------------
Если хотим сделать в openWrt авторизованный вход через telnet, то нужно внести исправления в следующие файлы:
файл /bin/login.sh должен выглядеть так:
#!/bin/sh # Copyright (C) 2006-2011 OpenWrt.org if ( ! grep -qs '^root:[!x]\?:' /etc/shadow || \ ! grep -qs '^root:[!x]\?:' /etc/passwd ) && \ [ -z "$FAILSAFE" ] then echo "authorized access through telnet" busybox login else cat << EOF === IMPORTANT ============================ Use 'passwd' to set your login password ------------------------------------------ EOF exec /bin/ash --login fi
При этом должна быть выставлена опция в make menuconfig:
-> Base system -> busybox -> Configuration -> Login/Password Management Utilities [*] login
С помощью команды adduser добавить нового пользователя в систему:
root@OpenWrt:/# adduser guest
С помощью команды passwd задать пароль для root и для guest:
root@OpenWrt:/# passwd Changing password for root New password:
После того как будет задан пароль для root, запуск телнета будет отключен, стартовым
скриптом etc/init.d/telnet. Поэтому фунцию start можно пропатчить например так:
start() { service_start /usr/sbin/telnetd -l /bin/login.sh }
Всё. Авторизация через телнет после этих операций будет выглядеть так:
$ telnet 192.168.1.100 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. authorized access through telnet OpenWrt login:
Для доступпа по ssh в openWrt используется сервер dropbear. Подключениие по ssh пользователем guest из консоли выглядит так:
$ ssh guest@192.168.1.100 The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. RSA key fingerprint is 22:bb:9f:3e:47:21:0f:64:7f:57:6b:6c:a1:1b:12:7c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.100' (RSA) to the list of known hosts. guest@192.168.1.100's password:
Как правило, доступ к устройству для пользователя guest должен быть ограничен,
определенным набором команд, а для пользователя root доступ без ограничений. Или при авторизации root должен запускаться интерпретатор /bin/ash, а при авторизации guest должна запускаться какая то другая оболочка.
Особенно удобным в использовании в качестве интерпретатора для пользователя guest является утилита clish. clish эмулирует CISCO-like интерфейс командной строки. Отдельное спасибо человеку, который продолжил развитие clish под созвучным названием klish.
Как сделать чтобы при авторизации пользователя guest через telnet или ssh запускался clish (klish)?
Необходимо внести изменения в файл /etc/passwd для пользователя guest:
guest:x:1000:1000:Linux User,,,:/home/guest:/usr/bin/clish
Также добавить в список регистрируемых оболочек в системе утилиту clish. Для этого внести изменения в файл /etc/shells
# cat /etc/shells /bin/ash /usr/bin/clish
Перезагрузиться. В результате этого, для пользователя root будет запускаться привычная консоль с командной строкой, для пользователя guest при авторизации через telnet или ssh будет запускаться clish.