вторник, 30 июля 2013 г.

Ставим OpenWRT на DIR320/NRU

Ставим OpenWRT на DIR320/NRU

Наконец, нашелся человек, который смог портировать прошивку OpenWRT на этот роутер (https://code.google.com/p/openwrt-on-dir-320-b1/). Без OpenWRT данный роутер лично для меня неинтересен и провалялся в шкафу долгое время в ожидании нормальной прошивки.
OpenWRT является сторонней, но универсальной и более продвинутой прошивкой, по сравнению со многими другими, поставляемыми производителем по умолчанию. Если сравнивать ее с прошивкой от D-Link, то возможностей у ней как минимум раза в два больше, а безопасность и стабильность зачастую выше. Если Вы еще не пробовали ее, то рекомендую попробовать. Стоит только перечислить функционал, который появится при переходе от прошивки D-Link к OpenWRT: SSH доступ, подключение флеш карт и жестких дисков большого объема с практически любыми файловыми системами, лучшая поддержка модемов EDGE\3G\4G, и конечно возможность устанавливать дополнительные пакеты прямо во внутреннюю флеш память, что позволяет расширить функционал настолько, насколько хватит ресурсов этого устройства. Роутер с OpenWRT успешно раздает интернет даже с подключенного по USB мобильного телефона.
К слову о ресурсах, их у роутера DIR320/NRU не так много (8MB Flash, 32MB RAM, 300MHZ MIPS CPU). Однако, для стандартного набора функций «торрент качок + wifi шаринг» этого достаточно. Так как ревизия B1 собрана совершенно на другом чипсете RT5350 (общим со старой моделью DIR320 можно найти только корпус), энергопотребление и нагрев этого роутера очень небольшие. Роутер работает стабильно лишь с одним устройством, подключенным через USB. Количество устройств, подключенных через USB хаб без внешнего питания сильно ограничено — например, 3G модем и жесткий диск могут работать нестабильно. Нагрузочную способность можно увеличить и обойтись без внешнего питания, проделав кое-какие доработки из следующего раздела.
Схемотехнические доработки
Было замечено, что при подключении сразу двух устройств по USB (жесткий диск + модем) напряжение питания на контактах USB разъема падает до 4,5В, что приводит к отключениям устройств, но на разъеме питания роутера напряжение остается нормальным — 5,1В. Это происходит из-за падения напряжения на двух SMD резисторах на плате роутера. Чтобы избавиться от проблемы, нужно зашунтировать эти два резистора перемычками либо впаять нормальные дроссели параллельно этим резисторам (красным цветом на плате отмечены будущие перемычки, а контактные площадки, обведенные разметкой на плате — это и есть место под установку дросселей). После этой доработки нагрузочная способность роутера зависит только от мощности блока питания. Максимальный ток потребления заводского блока питания составляет 2А (10 Ватт), чего должно хватить на три устройства с током потребления до 0,5А.
dir-320nru_pcb
Проблема с помехами от USB 3G модема: при переключении модема из 3G режима в режим EDGE его мощность излучения становится больше. Это может влиять на оборудование, расположенное рядом с ним — и влияло на мой жесткий диск Seagate Expansion Drive, из-за чего он отключался со звуком поросячьего визга. Для устранения эффекта модем был подключен через метровый удлиннитель для USB и убран подальше от роутера.
Установка OpenWRT
Устанавливается прошивка из специального аварийного режима роутера (как войти и установить, есть на страницеhttp://wiki.openwrt.org/toh/d-link/dir-320_revb1). По-русски: выключаем роутер, зажимаем спичкой кнопку Reset и держим. Включаем питание, ждем 10-15 морганий индикатора питания роутера и отпускаем спичку. Роутер запустится в аварийном режиме, в котором отключены блокировки роутера на загрузку сторонних прошивок. Компьютеру присваиваем адрес 192.168.0.2, подключаем к роутеру кабелем в порт LAN. Заходим в браузере на 192.168.0.1, и загружаем прошивку. По указанной выше ссылке имеются прошивки AA и BB — это версии Attitude Adjustment (стабильная) и Barrier Breaker (тестовая), соответственно ставить лучше AA. Есть версии со встроенными mpcs, oscam, если этот софт не нужен, лучше ставить обычную прошивку std.
Начальная настройка и внутреннее устройство прошивки
OpenWRT имеет веб интерфейс для настроки роутера + SSH доступ с терминалом Linux для продвинутых пользователей. Поэтому, прошивка очень похожа на стандартную от производителя, но имеет гораздо больше настроек и возможностей. После перепрошивки роутера, нужно поменять адрес сетевой карты на 192.168.1.2 (к примеру), или установить DHCP клиент на этот интерфейс (получать сетевой адрес автоматически в Windows). Когда роутер загрузится (индикатор питания перестает мигать), можно зайти на страницу управления роутером (веб интерфейс) по адресу 192.168.1.1.
При первом посещении страницы, роутер попросит Вас установить пароль администратора, что нужно обязательно сделать. После установки пароля, Вы сможете заходить на роутер с этим паролем по SSH. Можно переключить язык на русский, если Вам так удобнее в меню «System->system->Language and style», правда в данной статье подразумевается работа с английским языком. Это и есть вся начальная настройка, далее настройки делаются в зависимости от того, что мы будем подключать к этому роутеру
OpenWRT разметка диска состоит из двух разделов — squashfs и jffs2. Squashfs представляет по сути сжатый архив, эта ФС работает только в режиме чтения. Если компилировать прошивку самому и заранее включить пакеты в этот раздел, то свободного места будет больше. Так как это дело трудозатратное, лучше скачать готовую прошивку, а софт ставить на второй раздел jffs2, который имеет размер всего лишь 1 с лишним мегабайт. Нужно заранее определиться, какие пакеты будете ставить, т.к. вычистить место удалением старых пакетов непросто — остаются зависимости и прочий мусор.
Имеется возможность сохранения конфигурации. Это понадобится для того, чтобы не переустанавливать все пакеты после апгрейда прошивки и не перенастраивать роутер. Правда, иногда не все настройки могут быть перенесены, желательно не менять прошивку AA на BB, так как они сильно различаются.
Подключение интернета
Роутер поддерживает массу вариантов подкючения интернета:
1) Через кабель в порту Internet (WAN). Используются различные интернет протоколы для доступа в интернет: статический адрес, DHCP клиент, PPTP, PPPoE, L2TP, и прочие, которые и мне не доводилось использовать. Этот вариант настройки зависит от параметров Вашего подключения к провайдеру и инструкция к подключению должна быть предоставлена провайдером в договоре о предоставлении услуг.
2) Беспроводной доступ по UMTS(3G)/GPRS/EDGE//4G. В этом случае нужно подключить модем или телефон через USB в роутер и создать интерфейс для подключения, указав точку доступа, логин и пароль.
В любом случае, нужно создавать новый интерфейс в меню Network->Interfaces. Пример настройки для 3G модема МТС ниже:
2013-06-30-143259_1920x1080_scrot
Важно! OpenWRT имеет довольно неплохой фаервол, позволяющий повысить безопасность и настроить правила. Не забудьте назначить новому интерфейсу его группу, интернет подключения должны находиться в группе WAN, а локальные интерфейсы (Ethernet и Wifi) в группе LAN, иначе работать не будет.
Подключение клиентских ПК и рекомендации по увеличению безопасности
Подключаются ПК через свитч LAN кабелем или же через WiFi. При подключении кабелем взломать Вас никто не сможет, а вот для WiFi нужно обязательно использовать шифрование. В настоящее время популярна тема про взлом WiFi сетей, так как большинство используемых протоколов шифрования взламываются перебором паролей или через найденные уязвимости. Единственным протоколом, который может защитить Вас от взлома является WPA2+AES, остальные протоколы типа WEP сейчас приравниваются к открытым сетям для тех, кто знаком со взломом. Сети с защитой WPA2+AES тоже ломаются с помощью перебора, но для того чтобы взломать сложный пароль из 6 символов (это минимальный размер пароля), требуется очень много времени, конечно если пароль не представляет собой словарную фразу типа Elizaveta или 111111. Пароль должен быть как можно длиннее и содержать символы малых, больших букв, цифр и знаков сразу. Такой пароль сломать будет неимоверно трудно обычными средствами.
Есть также протокол WPS, позволяющий подключать клиентские ПК к защищенным сетям автоматически. Этот протокол ломается за 1-2 дня с помощью перебора, если не предусмотрено мер по сдерживанию атак по перебору. Заметим, что WPS включен по-умолчанию на прошивках от производителей, поэтому такой роутер взломать не составит труда с помощью программы Reaver. Конечно, со временем производители стали вводить такие меры, как максимальное число попыток или задержку между подключениями. Лучше не использовать WPS вообще.
Еще одна интересная особенность SSH: его можно использовать как SOCKS 5 прокси. Для этого достаточно в клиентской программе ввести адрес сервера 192.168.1.1, порт 22, логин и пароль от SSH, при условии, если роутер висит на адресе 192.168.1.1, после чего можно пользоваться интернетом через этот прокси. Не пробовал проделывать это на своем роутере, но раньше именно так и делал, когда работал у местного интернет провайдера, где были машины с Linux :) Это еще раз дает повод подумать, нужно ли выводить админку в зону WAN и по поводу сложности пароля.
Шаринг файлов (сетевой диск)
Для подключения к роутеру наиболее стабильно работающей файловой системой является ext3. Если замечаете, что роутер зависает, либо перезагружается после определенного периода времени при интенсивной работе с жестким диском (торрент, копирование файлов), рекомендуется переформатировать жесткий диск для файлового хранилища в ext3. Прочими ФС, способными вызвать данную проблему являются ReiserFS и NTFS, которые показали себя не с лучшей стороны: при интенсивном выполнении файловых операций через сетевой диск быстро заканчивается память роутера, что приводит к его зависанию и перезагрузке. В качестве стресс теста для проверки ФС можно попробовать выполнить команду «find /» через SSH роутера или «chmod -R». Роутер должен обойти все файлы и при этом не зависнуть. Не рекомендуется использовать ФС не поддерживающие права доступа — это будет мешать клиентам с ОС Linux.
В качестве протокола для передачи файлов можно выбрать Samba или NFS. Первый работает достаточно стабильно и быстро, шара может быть доступна и компьютерам с Windows. NFS лучше подходит для сетей Linux, имеет лучшую поддержку прав доступа, но пакет nfs-kernel-server мне установить не удалось, пакет unfs3 работает хуже. Возможно, вам и вовсе хватит FTP сервера, в качестве которого отлично работает proftpd. Итог: лучшим выбором для этого роутера будет samba, которая хорошо работает как с Linux так и с Windows машинами, легко настраивается. Операции chmod также поддерживаются.
Необходимые пакеты: samba36-server, luci-app-samba.
Как настроить:
1.) Сервер: после установки пакетов и перезагрузки заходим в Web интерфейсе на страницу System/Mount Points. Там находим точку монтирования жесткого диска для шары, обычно она будет по пути /mnt/sdb1. Проверить содержимое диска можно, выполнив команду ls -l /mnt/sdb1 через SSH. На странице Services/Network Shares добавляем эту точку монтирования:
2013-06-12-164358_1024x600_scrot
В качестве владельца и группы файлов удобно использовать nobody/nogroup, т.к. информация о владельце всеравно будет утеряна на клиентских машинах под гостевым доступом.
2.) Клиенты.
Пример записи в fstab на клиентских машинах Linux:
192.168.1.1:/remote /mnt/remote cifs guest,rw,uid=user,gid=group,cache=none 0 0
Вместо user ставим своего пользователя, выполняем mount -a. Чтобы удаленная ФС стала доступна сразу нескольким локальным пользователям, другого пользователя можно добавить в группу (adduser  user group).
В Windows шара появится в сетевом окружении автоматически.
Торрент качалка
Нужно использовать клиент Transmission, т.к. пока ему нет альтернатив.
Необходимые пакеты: transmission-daemon, transmission-remote, luci-app-transmission.
Как настроить: после установки и перезагрузки заходим на страницу Services/Transmission и настраиваем торрент сервер. Для разрешения удаленного доступа, нужно настроить доступ по RPC:
2013-06-12-171311_1024x600_scrot
На клиентской машине с Linux (Debian) следует установить пакет «transgui»:
2013-06-12-172031_1024x600_scrot


Что еще не забыть сделать
Создайте на внешнем диске swap файл, и добавьте в автозагрузку роутера:
swapon /mnt/sdb1/swapfile
wifi

Первая строчка активирует своп файл, вторая поднимает Wifi, если он автоматически не включается после перезагрузки. Когда настраиваете новые сервисы, не забудьте разрешить их на странице System/Startup.



Приватизировал здесь: http://v1ron.ru/2013/06/stavim-openwrt-na-dir320nru/

Что такое хостинг (hosting) и Что такое домен (domain)



Хостинг

Хостинг (hosting) - это услуга провайдера по предоставлению дискового пространства для хранения файлов сайта на сервере, постоянно подключённом к Интернет, а также обеспечение работы всех необходимых служб – почты, сервера баз данных, FTP-доступа.
Слово хостинг произошло от английского слова host, у которого есть несколько значений: хозяин, главный компьютер, основное устройство, и даже содержатель постоялого двора. Таким образом, под словом host мы будем понимать компьютер, на котором размещён сайт. Такой компьютер также называется сервером.
Когда вы создаёте свою первую домашнюю страничку и хотите сделать так, чтобы она была видна всем пользователям Интернет, у вас, на самом деле, есть три варианта её размещения.
Первый вариант – сделать так, чтобы она была видна прямо с вашего компьютера. Для этого необходимо чтобы ваш компьютер всегда был включён и подключён к Интернет, чтобы скорость Интернет-соединения была достаточно высокой и позволяла быстро загружать вашу страничку всем желающим. Также на вашем компьютере должно быть установлено и настроено специальное программное обеспечение веб-сервера. Но даже этого всего недостаточно. Когда ваш компьютер делает часть своих файлов доступными в Интернет, возникает большая угроза безопасности. Поэтому вам придётся установить и настроить ещё и защиту от несанкционированного доступа, чтобы не дать злоумышленникам возможность получить доступ ко всей информации, хранящейся на вашем компьютере.
Второй вариант – размещение вашей странички на бесплатном хостинге. Этот вариант подходит для начинающих. Обычно компания, которая предоставляет бесплатный хостинг, зарабатывает путем показа рекламы на ваших страницах. Бесплатный хостинг обычно работает медленнее, чем платный, предоставляет только базовые услуги и, что самое главное, в один прекрасный день может просто закрыться без каких-либо обязательств.
Третий вариант – платный хостинг. Его выбирают все, кто начинает серьёзно заниматься своим сайтом, хочет, чтобы сайт был всегда доступен, не содержал портящей вид рекламы и вообще производил серьёзное впечатление. Излишне говорить о том, что сайты компаний, коммерческие проекты, приносящие прибыль, обязательно должны размещаться на платном хостинге. Как правило, данная услуга стоит не так уж дорого, около 60$ в год. 
Если вы пока не знаете, выбрать платный хостинг или бесплатный, ответьте на следующие вопросы.
1. Является ли для вас критичной скорость доступа к сайту?
2. Не принесут ли убытков периодические простои в работе сайта?
3. Не возражаете ли вы против размещения на вашем сайте рекламы, далеко не всегда подходящей по теме?
4. Готовы ли вы в один прекрасный день начать всё заново, если выбранный бесплатный хостинг просто закроется?
Если вы отвечаете да, то смело выбирайте бесплатный хостинг.
================================

ДОМЕН

Слово домен (domain) в переводе с английского означает область, территория. Применительно к Интернет домен означает некую символьную последовательность, заменяющую цифровой (ip) адрес компьютера и позволяющую получить доступ к сайту по короткому запоминающемуся имени.
По международному соглашению каждая страна имеет некоторое символьное обозначение длиной 2-3 буквы, которое называется доменом первого уровня или доменной зоной этой страны. Так, например, если адрес сайта заканчивается на .ru - значит, сайт находится в доменной зоне России, .us - США, .tr - Турции.
Кроме того, существуют несколько доменов первого уровня, связанных не с географией, а с направленностью сайта - например, .com для коммерческих, .org - для некоммерческих, .edu - для образовательных организаций.
Домены второго уровня регистрируются частными лицами и предприятиями, которые ежегодно вносят оплату. В каждой зоне домены второго уровня регистрирует специально уполномоченная организация - Регистратор. В России этим занимается РосНИИРОС.
Выбирая домен второго уровня для своего сайта, как правило, стараются найти слово, которое будет соответствовать названию организации, товара или направления деятельности, а также легко читаться и запоминаться, например, mail.ru, utro.ru.
Далее в панели управления доменом администратор домена второго уровня вводит значения  NS-записей, которые перенаправляют все запросы, приходящие по символьному имени домена, на числовой адрес физического сервера, где размещён сайт. Как правило, NS-сервера или Name Servers вам должна сообщить хостинг-компания. Также некоторые Регистраторы предоставляют услугу парковки доменов.
Обладатель домена второго уровня имеет возможность создавать неограниченное количество адресов третьего и более уровней. Так, например, владелец домена ivanov.com может создать домены photo.ivanov.com, forum.ivanov.com.

Определить размер папки - команда du

Команда du выводит информацию о файле (файлах), имена которых заданы в качестве параметров. Если задано имя каталога, то du определяет размер всех файлов и подкаталогов этого каталога на всех уровнях вложения. Результат работы команды может быть очень объемным. К счастью, существует опция -s для вывода сводной информации по каталогу. Если использовать du для получения информации о нескольких каталогах, можно добавить опцию -c для вывода суммарных данных. Для использования du вы должны иметь права чтения каталогов, к которым вы ее применяете.
Пример. Просмотр общего объема, занимаемого каталогом /var и всеми его подкаталогами первого уровня.
#du -shc /var/*
Синтаксис команды du более подробно:
du [опции] [файл...] 
Опции: [-abcDhHklLmsSxX] [--block-size=количество] [--exclude=шаблон] [--max-depth=n] [--help] [--version] [--] 
-a, --all 
Показывать размеры для всех встретившихся файлов, а не только для каталогов. 
-b, --bytes 
Выдавать размеры в байтах вместо килобайтов. 
--block-size=количество 
Выдавать размеры в блоках длиной количество байт. (Новое в fileutils-4.0.) 
-c, --total 
Выдавать общий итог по всем аргументам после того, как все аргументы будут обработаны. Это может быть использовано для выяснения суммарного использованного дискового пространства для всего списка заданных файлов и каталогов. 
-D, --dereference-args 
Раскрывать символьные ссылки, заданные в командной строке. Не оказывает влияния на остальные символьные ссылки. Это полезно для поиска использованного дискового пространства в таких каталогах, как /usr/tmp, которые часто являются символьными ссылками. 
--exclude=шаблон 
При рекурсивном выполнении пропускать каталоги или файлы, чьи имена совпадают с заданным шаблоном. Этот шаблон может быть любым файловым шаблоном Bourne shell. (Новое в fileutils-4.0.) 
-h, --human-readable 
Добавлять букву размера, например M для двоичного мегабайта (`мебибайт'), к каждому размеру. 
-H, --si 
Делает то же, что и опция -h, но использует официальные единицы измерения SI (где для расчетов используется 1000 вместо 1024 и, таким образом, M - это 1000000 вместо 10485576). (Новое в fileutils-4.0.) 
-k, --kilobytes 
Выдавать размеры в KiB (бинарных килобайтах, 1024 байта). 
-l, --count-links 
Подсчитывать размеры всех файлов, даже если они уже встречались (например, при использовании жестких ссылок). 
-L, --dereference 
Раскрывать символьные ссылки (показывать дисковое пространство, используемое файлом или каталогом, на которые указывает ссылка, вместо пространства, используемого самой ссылкой). 
-m, --megabytes 
Выдавать размеры в MiB (бинарных мегабайтах, 1048576 байтов). 
--max-depth=n 
Выдавать общий итог для каталога (или файла, если задана опция -a ), только если он находится не более чем на n уровней глубины ниже заданного в командной строке аргумента; --max-depth=0 означает то же самое, что и опция -s . (Новое в fileutils-4.0.) 
-s, --summarize 
Выдавать только суммарный итог для каждого аргумента. 
-S, --separate-dirs 
Выдавать отдельно размер каждого каталога, не включая размеры подкаталогов. 
-x, --one-file-system 
Пропускать каталоги, находящиеся не на той же файловой системе, что и обрабатываемый аргумент командной строки. 
-X файл, --exclude-from=файл 
Выполняет те же действия, что и опция --exclude, за исключением того, что шаблоны берутся из указанного файла. Шаблоны перечисляются по одному на строку. Если файл задан как `-', то шаблоны читаются из стандартного ввода. 
--help 
Выдать подсказку на стандартный вывод и успешно завершиться. 
--version 
Выдать информацию о версии на стандартный вывод и успешно завершиться.


А это отсюда: 
http://www.ruhelper.com/linux/du.html

Создание swap-файла.

Создание swap-файла.


Все мы знаем, как необходим нашей системе такой раздел диска как swap. Но, предположим, что случилось так, что поспешив при инсталляции, вы… забыли создать этот раздел на жестком диске! Что же делать?! Ну, не сносить же все и не переразмечать же все заново?!
Главное – не паникуйте, ведь всегда есть выход из безвыходных ситуаций! Просто создайте swap-файл на одном из уже имеющихся, у вас на жестком диске, разделов.
Перед началом процесса создания swap-файла сначала необходимо определиться с его размером. Тут вы вольны сами выбирать его размер – 256, 512 или 600 мегабайт.
После того, как мы определились с желаемым размером swap-файла, мы собственно и создаем его командой:
# dd if=/dev/zero of=/mnt/500Mbytes.swap bs=1M count=512
После выполнения этой команды, в каталоге /mnt должен появиться файл 500Mbytes.swap. Это и есть наш swap-файл. Использовать его, вот таким как он есть сейчас, мы не можем, так как мы еще не задали тип файловой системы, который должен иметь наш файл. А именно – тип swap. Ну, это сделать не сложнее:
# mkswap /mnt/500Mbytes.swap
Ну, и наконец, для того, чтобы наша система при загрузке опознавала нам новоиспеченный swap, мы предварительно перед перезагрузкой добавляем в /etc/fstab следующую строчку:
/mnt/500Mbytes.swap swap swap defaults 0 0
Вот и все! Конечно же при подобном решении скорость работы со swap-файлом будет меньше, чем с разделомswap, расположенном на жестком диске, но если вы не заставляете свой компьютер заниматься большими расчетами, то это решение вам в данной ситуации будет кстати.

А это взято отсюда: 



Возврат OpenWRT к начальной конфигурации

Для чего это нужно?


Бывает так, что вы конфигурили, конфигурили устройство и наконфигурили... Результат вышел не таким как ожидалось, а в ручную разбирать и вертать всё в зад - процесс непростой и долгий.
Или, как получилось в моём случае, (очень) ограниченный размер встроенной флэш-памяти закончился раньше, чем туда поместились все нужные пакеты. Проще вернуть всё одним решительным действием к изначальному состоянию, чем удалять пакеты по списку и разбираться с их зависимостями.
Для чего данный способ не подходит, так это для сброса забытого пароля. Для сброса настроек вам всё равно нужно зайти на устройство пользователем root по ssh, так что, забытый пароль так не сбросить!


Где же она, эта кнопка?



Вообще, я был практически уверен, что существует штатный механизм - команда для выполнения сброса конфигурации устройства. Однако, изучения списка команд и поиски по wiki проекта результата не дали, кажется, готового штатного решения вроде:
root@OpenWrt:~# restore-config-default

в OpenWRT нет.


Вся магия



Собственно, сам способ крайне прост:
root@OpenWrt:~# rm -rf /overlay/*
root@OpenWrt:~# sync 
root@OpenWrt:~# reboot

Устройство перезагрузится и вернётся в изначальное "чистое" состояние, такое же, как сразу после установки OpenWRT, это значит, что после этого вам нужно будет выполнить процедуру "первого входа": First Login.


Как это работает?



Для понимания как работает такая "чистка" конфигурации нужно понять устройство файловой системы OpenWRT (собственно, так этот метод и был обнаружен), в этом поможет изучение wiki-страницы The OpenWrt Flash Layout.
Вкратце, суть такова: корневая файловая система OpenWRT собирается из частей, которым выделены два раздела на флэш-памяти устройства (кроме этого есть несколько специальных разделов для загрузчика, ядра и т.д.).
Один раздел содержит доступную только для чтения SquashFS, при загрузке она монтируется в каталог /rom, она содержит базовый образ системы OpenWRT, который мы и получаем после установки.
Второй раздел содержит доступную для чтения и записи JFFS2, она при загрузке монтируется в каталог /overlay, изначально эта ФС пуста.
Далее, содежимое корневой ФС / получается путём проецирования содержимого /rom и наложения на него при помощи OverlayFS содержимого /overlay. Таким образом, далее отдельное существование /rom и /overlay игнорируется и работа идёт с корневой ФС /. При этом все изменения, которые происходят сохраняются на доступную для записи JFFS2, т.е. в /overlay, даже такие изменения, как удаление файлов содержащихся в исходной системе (/rom).
Вот список смонтированных ФС моего маршрутизатора:
root@OpenWrt:~# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,size=14524k)
tmpfs on /dev type tmpfs (rw,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,noatime,mode=600)
/dev/mtdblock3 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlayfs (rw,noatime,lowerdir=/,upperdir=/overlay)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
none on /proc/bus/usb type usbfs (rw,relatime)

Это похоже на рисунок накрытый прозрачной плёнкой, на этой плёнке мы можем дорисовывать рисунок как захотим, даже закрашивать его и перерисовывать по-другому, при этом всё наши изменения происходят на прозрачной плёнке, и убрав её мы получим рисунок в его изначальном виде. Именно так мы и поступаем, удаляя содержимое /overlay.
Tags: 



Сперто отсюда: http://ru-wrt.livejournal.com/7892.html

четверг, 25 июля 2013 г.

Операции с файлами и фильтрация

Операции с файлами и фильтрация

Основная часть работы в командной строке ведётся с файлами. В этом разделе мы рассмотрим, как просматривать и фильтровать содержимое файлов, извлекать из файлов нужную информацию при помощи одной команды и сортировать их содержимое.

cat, tail, head, tee: Команды для вывода содержимого файлов

Эти команды имеют почти один и тот же синтаксис: имя_команды [опции] [файл(ы)], и могут быть использованы в каналах. Все они используются для вывода части файла согласно определенным критериям.
Утилита cat объединяет файлы и выводит результат на стандартный вывод. Это одна из наиболее широко используемых команд. Вы можете использовать:
# cat /var/log/mail/info
для вывода, например, содержимого файла с журналом почтового демона на стандартный вывод [14]. Команда cat имеет очень полезную опцию (-n), которая позволяет вам выводить номера строк.
Некоторые файлы, типа журналов демонов (если они запущены) обычно имеют довольно большой размер [15] и полный их вывод на экран будет не очень полезным. Часто вам нужно увидеть только несколько строк из файла. Для этого вы можете воспользоваться командой tail. Следующая команда выведет (по умолчанию) последние 10 строк из файла /var/log/mail/info:
# tail /var/log/mail/info
Вы можете использовать опцию -n для вывода последних N строк файла. Например, для вывода последних 2-х строк наберите:
# tail -n2 /var/log/mail/info
Команда head похожа на tail, но она выводит первые строки файла. Следующая команда выведет (по умолчанию) первые 10 строк файла /var/log/mail/info:
# head /var/log/mail/info
Как и в случае с tail вы можете использовать опцию -n для указания количества выводимых строк. Например, для вывода первых 2-х строк наберите:
# head -n2 /var/log/mail/info
Также вы можете использовать эти две команды совместно. Например, если вы хотите увидеть только строки 9 и 10, вы можете воспользоваться командой, в которой head выберет первые 10 строк из файла и передаст их по каналу в команду tail.
# head /var/log/mail/info | tail -n2
Затем вторая часть команды отберет последние 2 строки и выведет их на экран. Таким же способом вы можете выбрать 20-ю от конца файла строку:
# tail -n20 /var/log/mail/info |head -n1
В этом примере мы говорим команде tail выбрать последние 20 строк файла и передать их по каналу в head. Затем команда head выводит на экран первую строку из полученных данных.
Допустим, что результат последнего примера нам нужно одновременно вывести на экран и сохранить его в файл results.txt. В этом нам может поможет утилита tee. Ее синтаксис:
tee [опции] [файл]
Теперь мы можем изменить предыдущую команду следующим образом:
# tail -n20 /var/log/mail/info |head -n1|tee results.txt
Давайте рассмотрим еще один пример. Нам нужно выбрать последние 20 строк, сохранить их в файл results.txt, а на экран вывести только первую из них. Тогда мы должны ввести следующее:
# tail -n20 /var/log/mail/info |tee results.txt |head -n1
У команды tee есть полезная опция (-a), которая позволяет вам дописать данные в конец существующего файла.
Давайте вернемся назад к команде tail. Такие файлы как журналы обычно динамически изменяются, т.к. демон постоянно добавляет в них отчет о совершенных действиях или событиях. Поэтому, если вам нужно наблюдать за изменениями в лог-файле в режиме реального времени, тогда вам нужно воспользоваться преимуществами опции -f:
# tail -f /var/log/mail/info
В этом случае все изменения в файле /var/log/mail/info будут немедленно выводиться на экран. Использование команды tail с опцией -f весьма полезно, когда вам нужно знать, как работает ваша система. Например, наблюдая за файлом журнала /var/log/messages, вы сможете всегда получать обновленную информацию о системных сообщенях и различных демонах.
В следующем разделе мы рассмотрим, как можно использовать утилиту grep в качестве фильтра для отделения сообщений Postfix от сообщений других служб.

grep: Поиск строк в файлах

Ни имя команды, ни ее аббревиатура (“General Regular Expression Parser” - синтаксический анализатор общих регулярных выражений) не слишком интуитивны, но ее действие и ее использование довольно просты для понимания: grep выполняет поиск в одном или нескольких файлах по шаблону, заданному в качестве аргумента. Ее синтаксис:
grep [опции] <шаблон> [один или более файлов]
Если указано несколько файлов, в отображаемом результате их имена будут выводиться перед каждой найденной строкой. Для предотвращения вывода этих имен используйте опцию -h; используйте опцию -l для вывода только имен файлов с найденными совпадениями. Шаблон - это регулярное выражение, хотя в большинстве случаев он состоит просто из одного слова. Наиболее часто используемые опции:
  • -i: поиск без учета регистра (т.е. игнорирование разницы между верхним и нижним регистром);
  • -v: обратный поиск. Вывод строк, которые не соответствуют шаблону;
  • -n: вывод номера строки для каждой из найденных строк;
  • -w: сообщает grep'у, что шаблон должен совпадать со всем словом.
Итак, давайте теперь вернемся к анализу лог-файла почтового демона. Нам необходимо найти все строки в файле /var/log/mail/info, содержащие шаблон “postfix”. Для этого мы вводим такую команду:
# grep postfix /var/log/mail/info
Команда grep может быть использована в канале. Так мы можем получить такой же результат, что и в предыдущем примере, при помощи следующего:
# cat /var/log/mail/info | grep postfix 
Если нам нужно найти все строки, не содержащие шаблона “postfix”, нам надо будет воспользоваться опцией -v:
# grep -v postfix /var/log/mail/info
Давайте предположим, что нам необходимо найти все сообщения об успешно отправленных письмах. В этом случае мы должны отфильтровать все строки, добавленные почтовым демоном в файл журнала (содержащие шаблон “postfix”), и они должны содержать сообщение об успешной отправке (“status=sent”):
# grep postfix /var/log/mail/info |grep status=sent
В этом случае команда grep использована дважды. Это разрешается, но не совсем красиво. Мы можем получить тот же результат при помощи утилиты fgrep. Сначала нам нужно создать файл, содержащий шаблоны, записанные в столбик. Такой файл может быть создан следующим образом (мы используем patterns.txt в качестве имени файла):
# echo -e 'status=sent\npostfix' >./patterns.txt
Затем мы вызываем следующую команду, в которой мы используем файл patterns.txt со списком шаблонов и утилиту fgrep вместо “двойного вызова” команды grep:
# fgrep -f ./patterns.txt /var/log/mail/info
Файл ./patterns.txt может содержать сколько угодно шаблонов. Каждый из них должен быть введен в виде одной строки. Например, для выборки сообщений о письмах, успешно отправленных на адресpeter@mandrakesoft.com, достаточно будет добавить адрес этого электронного ящика в наш файл ./patterns.txt, выполнив следующую команду:
# echo 'peter@mandrakesoft.com' >>./patterns.txt
Понятное дело, что вы можете комбиноровать команду grep с tail и head. Если нам нужно найти сообщения о предпоследнем электроном письме, отправленном на адрес peter@mandrakesoft.com, мы используем:
# fgrep -f ./patterns.txt /var/log/mail/info | tail -n2 | head -n1
Здесь мы применили описанный выше фильтр и отправили результат через канал в команды tail и head. Они выбрали из данных предпоследнее значение.

wc: Подсчёт элементов в файлах

Команда wc (Word Count - подсчёт слов) используется для подсчёта числа строк и слов в файлах. Она также полезна для подсчёта байтов, символов и длины самой длинной строки. Её синтаксис:
wc [опции] [файл(ы)]
Список полезных опций:
  • -l: вывод количества новых строк;
  • -w: вывод количества слов;
  • -m: вывод общего количества символов;
  • -c: вывод количества байт;
  • -L: вывод длины самой длинной строки в заданном тексте.
По умолчанию команда wc выводит количество новых строк, слов и символов. Вот несколько примеров использования:
Если нам нужно определить число пользователей в нашей системе, мы можем ввести:
$wc -l /etc/passwd 
Если нам нужно узнать число CPU в нашей системе, мы пишем:
$grep "model name" /proc/cpuinfo |wc -l
В предыдущем разделе мы получили список сообщений об успешно отправленных письмах на адреса, перечисленные в нашем файле./patterns.txt. Если нам нужно узнать количество таких сообщений, мы можем перенаправить наш отфильтрованный результат через канал в команду wc:
# fgrep -f ./patterns.txt /var/log/mail/info | wc -l

sort: Сортировка содержимого файла

Ниже представлен синтаксис этой можно утилиты для сортировки[16]:
sort [опции] [файл(ы)]
Давайте отсортируем часть файла /etc/passwd. Как видите сам по себе этот файл не отсортирован:
$ cat /etc/passwd
Если нам нужно отсортировать его по полю login, мы набираем:
$ sort /etc/passwd
По умолчанию команда sort сортирует информацию по первому полю в порядке возрастания (в нашем случае по полю login). Если нам нужно отсортировать данные в порядке убывания, мы используем опцию -r:
$ sort -r /etc/passwd
Для каждого пользователья имеется свой собственный UID, записанный в файле /etc/passwd. Давайте отсортируем этот файл в порядке возрастания по полю UID:
$ sort /etc/passwd -t":" -k3 -n
Здесь мы используем следующие опции sort:
  • -t":": сообщает sort'у, что разделителем полей является символ ":";
  • -k3: означает, что сортировка должна быть выполнена по по третьему столбцу;
  • -n: сообщает, что выполняется сортировка числовых данных, а не буквенных.
То же самое может быть выполнено в обратном порядке:
$ sort /etc/passwd -t":" -k3 -n -r
Обратите внимание, что sort обладает двумя важными опциями:
  • -u: строгая сортировка: исключаются повторяющиеся поля сортировки;
  • -f: игнорирование регистра (строчные символы обрабатываются так же, как и прописные).
И в заключение, если нам нужно найти пользователя с наивысшим UID, мы можем воспользоваться этой командой:
$ sort /etc/passwd -t":" -k3 -n |tail -n1
, где мы сортируем файл /etc/passwd в порядке возрастания по столбцу UID и прогоняем результат по каналу через команду tail, которая выводит первое значение из отсортированного списка.


[14Некоторые примеры в этом разделе основаны на реальной работе с файлами журналов некоторых серверов (служб, демонов). Убедитесь, что у вас запущен syslogd (разрешает журналирование демонов), соответствующий демон (в нашем случае Postfix), и что вы в работаете под root'ом. И, естественно, вы всегда можете применять наши примеры к другим файлам.
[15Например, файл /var/log/mail/info содержит информацию обо всех отправленных письмах, сообщениях о выборке почты пользователями по протоколу POP и т.д.

[16Здесь мы только вкратце рассмотрим sort, потому что о её возможностях можно написать целую книгу.




суббота, 20 июля 2013 г.

SSH авторизация по ключу

SSH авторизация по ключу

Генерация RSA-ключей для SSH

Чтобы не вводить пароли к разным серверам по сто раз в день можно настроить SSH-авторизацию с помощью ключей.
Генерируем пару ключей. Я предпочитаю шифровать ключ с помощью пароля, но если не хочется вводить пароль каждый раз при расшифровке ключа — просто нажмитеEnter в ответ на запрос пароля при генерации:
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/linuxgeek/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): ecaeth3U
Enter same passphrase again: ecaeth3U
Your identification has been saved in /home/linuxgeek/.ssh/id_rsa.
Your public key has been saved in /home/linuxgeek/.ssh/id_rsa.pub.
The key fingerprint is:
b9:e5:ad:d6:40:66:88:c5:eb:14:0b:71:61:46:df:84 linuxgeek@linuxgeek.ru
The key's randomart image is:
+--[ RSA 4096]----+
|      .+*. ..    |
|      .++.Eo     |
|       + =. .    |
|      . =.+      |
|       oS+.      |
|        .+..     |
|        . .o.    |
|          ...    |
|         ..      |
+-----------------+
В директории ~/.ssh/ будет сгенерирована пара RSA-ключей, длиной 4096 бит.
Выставим права:
$ chmod 0700 ~/.ssh/
$ chmod 0600 ~/.ssh/id_rsa*
$ ls ~/.ssh/
-rw-r--r-- 1 linuxgeek linuxgeek 5.9K 2010-09-13 18:02 known_hosts
-rw------- 1 linuxgeek linuxgeek 3.3K 2010-09-13 18:20 id_rsa
-rw------- 1 linuxgeek linuxgeek  747 2010-09-13 18:20 id_rsa.pub
Теперь нужно передать публичный ключ — id_rsa.pub на сервер. А приватный ключ —id_rsa нужно хранить в секрете (например, на зашифрованной флешке). ssh-copy-idскопирует публичный ключ на сервер в файл ~/.ssh/authorized_keys. Если порт на котором слушает SSH-демон на сервере отличается от стандартного и вы пользуетесь Debian — нужно заключить в кавычки информацию о подключении, как показано ниже (баг #99785):
$ ssh-copy-id "-p 22000 linuxgeek@linuxgeek.ru"

Настройки

Нужно выставить правильные права на директорию ~/.ssh/ на сервере:
$ chmod 0700 ~/.ssh/
$ chmod 0600 ~/.ssh/authorized_keys
И убедиться, что в файле /etc/ssh/sshd_config разрешена авторизация по ключам:
# nano /etc/ssh/sshd_config
…
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
…
# /etc/init.d/ssh restart
Можно также полностью запретить авторизацию по паролям:
# nano /etc/ssh/sshd_config
…
PasswordAuthentication no
PermitEmptyPasswords no
…
# /etc/init.d/ssh restart
Внимание! Убедитесь перед этим, что авторизация по ключу работает!
Теперь нужно отредактировать файл ~/.ssh/config и внести туда информацию об SSH-серверах, с которыми будет осуществляться соединение (вообще-то это и не обязательно, просто для удобства):
Host 192.168.0.1
        User linuxgeek
        Port 22000
        IdentityFile /home/linuxgeek/.ssh/id_rsa
        Protocol 2
        PubkeyAuthentication yes
Все опции, кроме User — необательны. Для подробностей см. man ssh_config.

Использование ssh-agent

ssh-agent хранит в памяти ключи для соединения с SSH-серверами. Чтобы добавить ключ необходимо выполнить следующую команду:
$ ssh-add
Enter passphrase for /home/linuxgeek/.ssh/id_rsa:
Identity added: /home/linuxgeek/.ssh/id_rsa (/home/linuxgeek/.ssh/id_rsa)
Если нужно использовать другой ключ, его можно указать в качестве аргумента:
$ ssh-add /path/to/alternate/key
Можно создать символическую ссылку ~/.ssh/id_rsa, которая будет указывать на ключ, находящийся на зашифрованном носителе или разделе и использовать ssh-add без аргументов:
$ cd ~/.ssh/
$ ln -s id_rsa /path/to/encrypted/volume/id_rsa
$ ls -lh
total 16K
…
lrwxrwxrwx 1 linuxgeek linuxgeek   25 2010-09-16 10:52 id_rsa -> /path/to/encrypted/volume/id_rsa
…

$ ssh-add
Enter passphrase for /home/linuxgeek/.ssh/id_rsa:
Соединяемся с сервером:
$ ssh 192.168.0.1

Ошибки

Если во время выполнения ssh-add выдается следующее сообщение:
$ ssh-add
Could not open a connection to your authentication agent.
Нужно выполнить следующее:
$ exec ssh-agent bash
Вместо bash можно указать используемую оболочку.
Ссылки по теме: