Безопасный Android для ребёнка

Оригинал поста на хабре

Подозреваю, что многие из читателей этой публикации в детстве не носили с собой мобильный телефон, или начали носить его только в старших классах - как ни странно, обыденные на сегодняшний момент мобильники появились не так давно. И даже после их появления в течение долгого времени мобильные телефоны были огромными и дорогими, и позволить их себе могли только серьёзные дядьки. Но на дворе 2018 год, и младшеклассники вовсю пользуются смартфонами.

Конечно, дети разные, и проблемы у всех в связи с этим возникают разные. У кого-то проблем вообще не возникает, и я могу только порадоваться за этих людей. Лучше всего, если получается договориться с ребёнком о разумном использовании телефона - но этот случай мы рассматривать не будем как довольно очевидный (договорились - молодцы). Будем рассматривать тот случай, когда нужно выдавать ребёнку смартфон, но при этом технически ограничивать его применение.

Почему именно так?

Наверняка, сразу у многих возникнет логичное предложение: “Дайте ребёнку старый кнопочный телефон,” или “Просто не включайте ему интернет”. Опять же, для кого-то это может быть отличным решением, но для меня это не работает по следующим причинам:
  • Общение с ребёнком идёт через телеграм. Потому что у меня на работе не ловит сотовая связь, а ещё через телеграм можно присылать фоточки учебника с вопросами по домашней работе;
  • Хочется включить геолокацию. Не для того, чтобы постоянно следить за ребёнком, а чтобы иметь возможность отпустить его одного недалеко от дома и чуть меньше волноваться. Мало ли что. Конечно, кнопочный телефон можно отследить через различные не совсем легальные сервисы или предложения операторов - но точность геолокации по вышкам оставляет желать лучшего. Кроме того, в случае, если телефон внезапно сел, был выключен, или, не дай бог, выброшен кем-то - нужна возможность быстро найти его последнюю локацию. Увы, не знаю, как решить эту задачу без смартфона.

Постановка задачи

Дальше буду исходить из указанных выше предпосылок: что ребёнку нужен стандартный недорогой смартфон, где будет работать телеграм и геолокационный сервис. Теперь перечислим, что ребёнку не нужно:
  • Устанавливать игрушки и другие приложения;
  • Смотреть мультики;
  • Пользоваться браузером или любым другим встроенным поиском;
  • Использовать встроенный калькулятор (казалось бы, смешная проблема, но попробуйте убрать калькулятор в своём Android).

Небольшое отступление

Если вас интересует только техническая часть, то смело перематывайте к следующему заголовку. Здесь рассуждения о корректности поставленной задачи.

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

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

С ребёнком то же самое - основная проблема в том, что ребёнку абсолютно неинтересно делать уроки. И, глядя на задания, я понимаю, почему. И, даже если забрать телефон, то ребёнок всегда найдёт, чем ещё себя развлечь: играть в машинки, куклы, или просто сидеть и фантазировать. Так что настоящее решение проблемы - это, скорее, смена школы, или домашнее обучение. Но это уже тема для другой публикации и других ресурсов.

С другой стороны, у меня есть подозрение, что все эти новые технологии “на кончиках пальцев” слишком привлекательны для ребёнка, и он просто физически не может противостоять искушению (сразу вспоминается логотип Apple, да?). Так что, возможно, лучшим решением будет просто не искушать. По крайней мере, какое-то время. Дальше всё равно нужно будет потихоньку вводить во взрослую информационную сферу. Иначе всё может закончиться плохо, когда ребенок внезапно получит доступ ко всему на свете, и из вашего парникового мира розовых поней окунётся с головой в интернет с игрушками, ММОРПГ, приложениями, социальными сетями, голыми людьми, странной лексикой и так далее. Без шуток - я знаю довольно много ребят, которые вылетали из университетов, потому что дома над ними был установлен тотальный контроль. И, попав в общежитие, они полностью уходили в игрушки или общение, которого им так не хватало. Этого хотелось бы избежать.

С третьей стороны, может быть, я просто старею и начинаю брюзжать против естественного технического прогресса? Хотя, так ли сильно смартфон под столом отличается от книжки и фонарика под одеялом?

С четвёртой - я сам являюсь разработчиком во втором поколении, и помню, как мне ограничивали пользование компьютером. И помню, что если я мог как-то обойти запреты (о, сколькому я научился в процессе), то после этого мне было очень сложно себя контролировать. Может быть, это был эффект “запретного плода”. Или нет… Если ты можешь поиграть по модему с другом в DOOM, то какого чёрта заниматься чем-либо ещё? Так что, не думаю, что отсутствие ограничений пользования компьютером в детстве дало бы мне что-то хорошее. Например, я бы точно не начал делать первые веб проекты за деньги лет в 14, чтобы купить свой собственный компьютер…

Однозначных выводов я сделать не могу, поэтому выбираю старый надёжный метод - метод проб и ошибок. Пробую ограничить ребёнку телефон и посмотреть, что из этого выйдет. Наверное, через год верну на него всё в первоначальное состояние, и посмотрю, сможет ли ребенок с этим справиться.

Платформа и железка

Сначала нужно выбрать платформу и железку, на которой мы будем делать детский телефон. Мой выбор пал на Android - по той простой причине, что я с ним работал, и могу его прошить, написать софтину на Java или что-нибудь нативное на уровне Linux. Железка не так принципиальна, и у меня уже был купленный ранее недорогой телефон (чтобы не было жалко, если что, и чтобы дети не мерялись “у кого круче”). Не принципиально, что именно брать, но, если бы я делал это сейчас с нуля, то требования были бы такие:
  • Точно можно получить root права;
  • Есть альтернативные прошивки;
  • Есть сообщество хоть какого-то размера;
  • Забегая вперёд, замечу, что совсем хорошо, если есть возможность поставить Lineage OS или хотя бы Cyanogen. И смотрите, чтобы в описании прошивки не было замечательных комментариев вроде “всё работает, кроме звонков и камеры”.

Варианты, которые не работают

Для начала расскажу, что я смотрел и пробовал:
  • Альтернативный ланчер, в котором на самом рабочем столе только нужные приложения. Провальный вариант - ребенок мгновенно уходит в полный список;
  • Отключить все лишние приложения. Увы, ребёнок быстро разбирается, как их включать обратно;
  • Ограничить установку программ и просмотр контента стандартными средствами. Увы, тут гугл подвёл меня - можно ограничить приложения и мультики по возрасту, но нельзя полностью запретить их установку и просмотр. Вроде как у iOS всё в этом плане лучше, но это не точно;
  • Всякие детские программы контроля и шеллы для андроида. Их оказалось удивительно мало, и по большей части на них были отрицательные отзывы со словами “защиту обошёл трёхлетний ребёнок”. Будучи сам немного Android разработчиком, охотно в это верю. Так же у многих решений были совершенно другие взгляды на проблему - например, в “детском режиме” они блокировали входящие и исходящие звонки, что меня не устраивало (например, так работает Kid's Shell). Единственное, что привлекло моё внимание - это решение от Лаборатории Касперского. Там обещали защиту от запуска приложений, геолокацию, мониторинг использования и кучу всего другого. И этим ребятам я верю (кстати, они честно написали, что на iOS ограничения не работают). Но не то чтобы мне было жалко 500 рублей - просто задача выглядела тривиальной, и я захотел решить её своими силами.

В любой непонятной ситуации - DIY

После того, как стало ясно, что малой кровью я не отделаюсь, я начал думать, что проще - резать родную прошивку, или поставить альтернативную. С тоской я посмотрел на безумное количество шумелок, свистелок и прочего bloatware на родной. Затем посмотрел, что на альтернативной, якобы, всё работает. Версия Android на обеих прошивках была одинаковая. И решил, что мне быстрее будет допилить альтернативную, чем резать родную.

В качестве альтернативной я поставил Cyanogen. Понятно, что он больше не поддерживается, но альтернатив не было, кроме заведомо неработающих. Да и меня не очень волновали обновления - по замыслу телефон должен спокойно жить ещё несколько лет на том комплекте софта, который я сейчас поставлю.

Сам процесс прошивки описывать не буду - для этого есть километровые топики на известном ресурсе. Скажу только, что в первый раз это у меня заняло часов 5 - но скорее по причине невнимательности. Повторить это я могу теперь за полчаса. Проблем не возникло - прошивка встала, всё работает, быстро снёс встроенный браузер и калькулятор. А вот дальше оказалось интересно - ни один сервис семейной геолокации не захотел работать без Google Play на телефоне. Уж не знаю, какими удивительными причинами это обусловлено, но факт. Я подавил в себе порыв быстренько написать свой сервис геолокации (задача несложная, уже делал такие, но это был явный “фатальный недостаток”), и смирился с тем, что нужно поставить Google Apps, и как-то потом с ними бороться. Поставил в результате Open GApps в варианте pico - только в нём не было Google Now, который по сути открывает поисковое окно куда угодно. После этого у меня заработали сервисы геолокации. Над проблемой доступности Google Play я бился довольно долго, не понимая, почему нигде не описано казалось бы простой вещи - полного запрета установки приложений. Собственно, на это я потратил ещё часов 5 и вторую ночь.

Здесь должно было быть описание решения, продиктованного мне ночным отчаянием и недосыпом - как я настроил крон, чтобы он постоянно убивал процесс google play. Но я выспался и понял, что достаточно прописать в /etc/init.d простой скрипт

1
2
3
chmod 0551 /data/app
sleep 20
chmod 0551 /data/app

Пояснение - при установки нового приложения под него создаётся отдельная директория. Убираем права на запись - после скачивания приложение не может установиться. Заодно так решается проблема с установкой сторонних apk.

Один раз этого сделать недостаточно - андроид сам исправляет права на папку, поэтому скрипт помещён в автозагрузку в init.d. Два раза это делаю для надёжности - мало ли когда там исправление прав происходит.

Что вышло

Плюсы

  • Можно поставить любую программу через консоль adb;
  • Нет никакого лишнего софта;
  • Время жизни телефона увеличилось как минимум вдвое, несмотря на геолокацию;
  • Можно использовать приложения, которые требуют Google Apps;
  • Нельзя поставить приложения из Google Play;
  • У ребёнка появилось куча места на телефоне для фоточек;
  • Можно ставить приложения в системный раздел - например, ту же геолокацию;
  • Нельзя поставить apk из сторонних источников;
  • Решение получилось условно бесплатное. Условно - потому что на него было убито много времени, которое напрямую конвертируется в деньги. И я во многих случаях плачу деньги за экономию времени. И здесь я закопал несколько тысяч рублей и время здорового сна. Стоило ли оно того? Не уверен;
  • Я абсолютно уверен в том, что если что-то пойдёт не так, то я смогу это допилить сам. В случае стороннего решения можно только смириться.

Минусы

  • Сам телеграм уже превратился чуть ли не в отдельный marketplace, и в нём есть игрушки, поиск картинок и анимаций, стикеры, боты-калькуляторы, и так далее. С этим тоже можно бороться - как-то я уже собирал свой телеграм, и, если будет нужно, то повторю. К сожалению, это не очень быстро - потребуется ещё одна ночь;
  • У кастомной прошивки может не быть обновления, а кастомизированную сложно обновлять. Но это не очень критично - для телефонов интересующей нас ценовой категории обновления системы выпускают примерно раз в никогда, так что альтернативные прошивки могут оказаться более свежими, чем родная. Опять же - телефон без браузера и маркетплейса не сильно подвержен уязвимостям;
  • Ребёнок, конечно, огорчился. Но это была крайняя мера, о которой я неоднократно предупреждал.
Не думаю, что моё решение идеально, и с интересом жду способов обхода ребёнком ограничений. Помню, как я в детстве начал интуитивно понимать комбинаторику, прикидывая количество возможных комбинаций пароля из 4 символов. Как учился сбрасывать пароль в BIOS. Как использовал софт, который мог этот пароль мне выдать. Как учился минимальному тайм менеджменту, чтобы тёплый ламповый монитор успел остыть к приходу родителей. Как в конце концов понял, что выгоднее всего быстро и хорошо сделать уроки, а потом втихую играть...

Выводы

Честно говоря, не понимаю, почему на рынке нет такого востребованного продукта, как полноценно управляемая детская мобильная ОС, или надстройка, которая позволяет её сделать (ну, кроме упомянутого варианта от ЛК). Если вдруг и есть, то странно, что я оказался не в силах его найти. Было бы это лет пять назад - я сразу загорелся бы идеей самому написать такую прошивку. Но уже не сейчас. Хотя инициативу я бы на досуге поддержал.

А вообще, я очень сильно надеюсь, что упустил какое-то известное решение, которое вы мне подскажете в комментариях.

UPD. В комментариях подсказали огромное количество всего интересного - как по техническим решениям, так и по организационным. Тот самый случай, когда получил много пользы от комментариев к статье. Вам тоже рекомендую к прочтению.