- Просмотр видео на Android по сети напрямую из папки Windows через NFS
- Как смонтировать NFS на Android с правильными разрешениями?
- КАК Заставить NFS РАБОТАТЬ С ПРИЛОЖЕНИЯМИ ANDROID?
- ОБЫЧНАЯ БЕЗОПАСНОСТЬ UNIX НА NFS:
- NFSv4 ID MAPPING:
- АНОНИМНЫЙ ДОСТУП к NFS:
- ПОПРОБУЙТЕ ПУТЬ ДЛЯ ANDROID …
- ДАЙТЕ CIFS ШАНС …
- ДРУГИЕ ОПЦИИ?
- Mount nfs on android
- Mount nfs on android
Просмотр видео на Android по сети напрямую из папки Windows через NFS
Есть Android и куча видео в папке на компьютере с Windows. Как смотреть видео не перекачивая фильмы на SD-карту? Можно подключить папку напрямую. Но в ядре нет поддержки smbfs/cifs, зато есть поддержка nfs. Установим на Windows nfs сервер и подключим в Android папку с фильмами.
Для работы нам понадобится доступ к устройству через терминал. Можно поставить терминальную программку на Android, но отсутствие физической клавиатуры портит всё удовольствие. Поэтому воспользуемся утилитой adb из комплекта Android SDK.
Я не люблю подключать устройство через USB порт если есть WiFi. Но для работы adb по WiFi нужна утилита ADB over WiFi Widget (или adbWireless). Поставьте ее из маркета.
Добавьте виджет ADB over WiFi на домашний экран, ткните его. После некоторых раздумий виджет показывает нам куда нужно подключаться. В моем случае это: 192.168.0.35:8000. Подключаемся из Windows консоли и открываем консоль андроида:
Чтобы узнать какие файловые системы поддерживает ваше ядро выполним команду:
Как видим поддержка nfs присутствует.
Теперь установим nfs сервер. Для Windows существует несколько серверов как платных, так и бесплатных. Мы будем ставить сервер Cygwin.
Установка Cygwin nfs сервера
Скачиваем программу установки. Выбираем следующие пакеты: nfs-server, sunrpc, cygrunsrv. Еще желательно поставить редактор для правки файлов из консоли, например nano.
Открываем Cygwin Bash Shell, ссылка на него есть в главном меню Windows.
Добавляем в /etc/exports строку:
Теперь можно подключаться к любой папке на диске c:.
Отключаем наследование прав доступа NT. Для этого раскомментируем строку в /etc/fstab и добавим в опции noacl:
Для вступления настроек в силу загрываем консоль Cygwin и открываем её снова. Проверяем:
Опция noacl есть — порядок.
Запускаем установку сервисов.
Скрипт будет задавать много вопросов. На все отвчаем да, кроме одного:
Можно установить сервис и под административным аккаунтом, но у меня работает и под системным.
Скрипт установил три Windows-сервиса: portmap, nfsd, mountd. Запускаем их:
Теперь на Windows работает nfs сервер.
Монтирование папок в Android
Ставим из маркета программку GScript Lite. Она умеет запускать скрипты и, к тому же, бесплатна.
Добавляем в программу два скрипта.
mount_video.sh — для подключения папки:
В моем случае ip-адрес компа 192.168.0.2, видео папка расположена в c:\downloads\video, поменяйте скрипт в соответствии с вашими настройками.
umount_video.sh — для отключения:
Можно вбить текст вручную в GScript, либо создать скрипты на компе и перенести с помощью adb.
Расскажу про второй способ. Допустим вы сохранили скрипты в папке C:\android-sdk-windows\tools, выполняем:
Источник
Как смонтировать NFS на Android с правильными разрешениями?
Я пытаюсь смонтировать общий ресурс NFS на своем телефоне Android.
Я уже скомпилировал и установил все необходимые модули ядра. Общий ресурс NFS монтируется безупречно, но я могу подключиться только как пользователь system . Это не было бы проблемой, если бы я мог правильно установить владельца для смонтированной файловой системы. Проблема в том, что общий ресурс всегда монтируется как user = system и group = system , что делает его недоступным для обычных приложений.
Я хотел бы иметь возможность указать владельца смонтированной файловой системы во время монтирования.
Вот как я монтирую общий ресурс NFS
где REMOTE_URI — удаленное расположение, а LOCAL_DIRECTORY — локальный каталог . Вышеупомянутая команда находится внутри сценария.
Это соответствующая строка файла /etc/exports на сервере NFS (raspberry pi 3)
Системные характеристики:
- LG V20 H990DS
- Система — V10i -TWN (6 ноября, 17) 7.0 Stock, root и Xposed
- Ядро — DOTS v1.4
- NFS версии 4
PS: UID и GID на сервере — 1000 и 1000 соответственно. В Android они зарезервированы для системного пользователя и группы. Все мои другие компьютеры имеют UID и GID 1000 и то же имя пользователя neo . Было бы намного проще просто изменить способ монтирования общего ресурса Android. Я хотел бы сопоставить uid = neo (1000) -> root (0) и guid = neo (1000) -> sdcard_r (1028) , где neo: neo — это пользователь на сервере, а root: sdcard_r — это пользователь на телефоне.
Я хотел бы отобразить uid = neo (1000) -> root ( 0) и guid = neo (1000) -> sdcard_r (1028), где neo: neo — это пользователь на сервере, а root: sdcard_r — это пользователь на телефоне.
Файлы владение root: sdcard_r (0: 1028) на Android не работает для приложений. Это должно быть root: everybody (0: 9997) с режимом 0770 для каталогов и 0660 для файлов.
КАК Заставить NFS РАБОТАТЬ С ПРИЛОЖЕНИЯМИ ANDROID?
Традиционный * NIX DAC (UID/GID) был разработан для изоляции пользователей-людей, не программы. На устройствах Android — обычно предназначенных для одного человека-пользователя — приложения должны быть изолированы и защищены, чтобы они не могли получить доступ к данным друг друга. Таким образом, Android относится к каждому приложению как к человеку — с уникальным UID/GID..
Внешнее хранилище ( /sdcard ) — физически внешнее или внутреннее — предназначено для совместного использования всеми приложениями, то есть несколькими UID. Если это традиционная файловая система * NIX (например, ext4 ), каждое приложение будет создавать файлы со своим собственным UID/GID, что делает практически невозможным обмен файлами между всеми приложениями с доступом для чтения/записи. Чтобы предложить решение, Android выбрал эмулируемую файловую систему на основе FUSE или sdcardfs с фиксированным владельцем и режимом. См. Подробности в разделе Что такое UID «u # _everybody»?
Эти UID/GID и режимы также управляют доступом приложений к файлам в /sdcard . Поэтому, если мы хотим смонтировать NFS, чтобы он был доступен для всех приложений, нам необходимо уменьшить эти разрешения в соответствии с дизайном хранилища Android.
ОБЫЧНАЯ БЕЗОПАСНОСТЬ UNIX НА NFS:
В режиме sec = sys требуются разрешения UNIX без перевода. Как объяснялось в предыдущем разделе, файлы будут создаваться со случайным владением разными приложениями. Таким образом, они должны быть доступны для чтения/записи для всего мира ( o + rw ), иначе приложения не смогут читать/писать. Но нет возможности принудительно включить режим создания файлов глобально, равно как и делиться файлами со слишком открытыми разрешениями. Возможное решение — использовать сопоставление идентификаторов и/или анонимный режим.
NFSv4 ID MAPPING:
С NFSv4 можно сопоставить различные UID/GID между клиентом и сервером . Если с обеих сторон существует пользователь с одинаковым именем, но с разными UID/GID, файлы на клиенте выглядят принадлежащими одному и тому же пользователю, а не одному и тому же UID. Средство управления ключами Linux * используется для хранения сопоставлений идентификаторов удаленных пользователей с идентификаторами локальных пользователей. Здесь можно найти хорошее объяснение.
Итак, идея состоит в том, чтобы создать user: group neo: neo на сервере NFS ( 1000 : 1000 ) и на Android ( 0 : 9997 ). Для этого rpc.idmapd должен быть запущен как на сервере, так и на клиенте, который запрашивает базу данных пользователей (в простейшем случае /etc/
В простом случае, если диапазон UID/GID от 10000 до 19999 не назначен любой пользователь/группа на сервере NFS и Nobody-User = root / Nobody-Group = everybody определены в /etc/idmapd. conf на клиенте, все файлы (созданные приложениями Android), принадлежащие несуществующим пользователям на сервере, будут возвращены как принадлежащие 0 : 9997 на клиенте. Но это не решает проблему случайного владения файлами на сервере.
Запуск rpc.idmapd или предоставление nfsidmap на Android — сложная задача (статические ссылки и все такое). Однако — используя keyutils ( request-key и keyctl ) — мы можем обмануть ядро, чтобы показать фиксированное владение 0: 9997 для всех сопоставлений независимо от фактического владения:
На сервере NFS:
Или настройте и запустите необходимые службы init . Также разблокируйте порты через брандмауэр на клиенте и сервере.
На Android:
Создайте /sbin/nfsidmap_pseudo и /etc/request-key.conf :
Поместите файлы, установите разрешения и включите сопоставление идентификаторов ::
Поскольку NFS не поддерживается официально в Android политика SELinux не имеет обязательных правил. Вам может потребоваться установить разрешающий режим SELinux или разрешить ядру читать/писать ключи, выполнять файлы в пользовательском пространстве и устанавливать соединения:
К сожалению, из всей этой настройки мы получаем, что теперь приложения, по-видимому, видят файлы в /sdcard/NFS , принадлежащие 0: 9997 . Но с безопасностью sec = sys фактический доступ к файлам не регулируется сопоставлением UID NFSv4 ** . Разрешения применяются механизмом RPC, который еще не готов работать с сопоставлением идентификаторов. Таким образом, сопоставление UID без защиты Kerberos работает только в том случае, если имя пользователя/группы и числовые пробелы согласованы между клиентом и сервером. Это означает, что пользователь neo на сервере должен иметь UID/GID: 0 / 9997 (что сводит на нет всю цель Сопоставление идентификаторов). С другой стороны, безопасность Kerberos ( sec = krb5 ) слишком беспокойна, чтобы ее можно было попробовать на Android.
Аналогичным образом для блокировки файлов в NFSv2/3 требуется portmapper ( rpcbind ) и rpc.statd , запущенные как на сервере, так и на клиенте, чего нельзя сказать о клиенте Android. Итак, нам нужно использовать параметр монтирования nolock . Однако в NFSv4 блокировка встроена в протокол NFS, NLM не требуется. Так что лучше не использовать сопоставление UID (в NFSv4 и File Locking в NFSv2/3). Если вам нужны все функции NFS (включая Kerberos), работающие на устройстве Android, попробуйте небольшой дистрибутив Linux в chroot .
* В ядре старше v4.6, /proc/keys отображается, если ядро построено с использованием KEYS_DEBUG_PROC_KEYS .
** Ссылки: 1, 2, 3, 4, 5, 6
АНОНИМНЫЙ ДОСТУП к NFS:
Одним из вариантов безопасности NFS является анонимный режим . Каждый запрос от любого UID/GID на клиенте рассматривается как анонимный UID/GID на сервере. Первоначально все файлы в общем каталоге должны принадлежать этому UID/GID, и все впоследствии созданные файлы на стороне клиента также будут иметь такое же право собственности:
Экспорт общего ресурса с sec = none на сервере:
* Для NFSv2/3 также запустите rpcbind (по умолчанию порт 111)
Смонтировать с помощью sec = none На Android:
* Используйте -t и vers = в соответствии с конфигурацией сборки вашего ядра CONFIG_NFS_V [2 | 3 | 4 | 4_1 | 4_2] .
* Используйте -t nfs -o nolock с vers = 3 или vers = 2 .
* Убедитесь, что вы монтируете из корневого пространства имен монтирования.
* Монтирование с помощью sec = none не работает с NFSv3.
Все приложения на Android теперь могут читать и писать в Каталог NFS и все файлы создаются с одним анонимным UID/GID на сервере, которым легко управлять пользователем. Однако очевидное право собственности (если сопоставление идентификаторов не настроено) и режим разрешений не соответствуют особенностям Android, поэтому …
ПОПРОБУЙТЕ ПУТЬ ДЛЯ ANDROID …
Давайте использовать FUSE или sdcardfs , как это делает Android:
Если ваше устройство не t поддерживает sdcardfs , используйте bindfs и замените контекст SELinux u: object_r: sdcardfs: s0 на u: object_r: fuse: s0 :
Это не оставляет нам проблем . Для получения дополнительной информации см. Как привязать монтирование папки внутри/SDCard с правильными разрешениями?
ДАЙТЕ CIFS ШАНС …
NFS является собственной файловой системой Linux (например, ext4 ) предназначен для обеспечения * разрешений NIX. Ненативные файловые системы, такие как FAT и CIFS, позволяют устанавливать фиксированные права собственности и разрешения для всей файловой системы. Итак, то, что вы ищете, относительно легко сделать с помощью CIFS :
* Ядро должно быть построено с использованием CONFIG_CIFS и предпочтительно CONFIG_CIFS_SMB2 , используйте соответственно vers = .
* Для получения подробной информации о параметрах монтирования см. Mount.cifs (8)
ДРУГИЕ ОПЦИИ?
Другими монтируемыми файловыми системами на основе FUSE являются sshfs и rclone . Latter предлагает широкий спектр протоколов и конфигураций, требуя очень простой настройки..
Источник
Mount nfs on android
ИНСТРУКЦИЯ ПО СБОРКЕ МОДУЛЕЙ NFS
Инструкция написана для ОС Ubuntu
1. Устанавливаем компилятор и необходимые библиотеки
sudo apt-get install make gcc libncurses-dev
2. Создаем папку, в которой будем работать
mkdir /home/user/build
3. Скачиваем кросс-компилятор от сюда http://dl.google.com/android/ndk/android-n. nux-x86.tar.bz2 и разархивируем в папку build
4. Смотрим, какое у нас ядро на телефоне (в настройках или командой uname -a в терминале на телефоне) и скачиваем его исходники, к примеру, от сюда ftp://ftp.kernel.org/pub/linux/kernel/
5. Разархивируем исходники в папку build и переименуем получившуюся папку в kernel для удобства
6. Копируем с телефона файл с настройками ядра /proc/config.gz на компьютер, разархивируем и копируем в
/build/kernel. Далее его необходимо переименовать в .config
7. Переходим в каталог kernel
cd /home/user/build/kernel
8. Запускаем Linux Kernel Configuration (параметр -jN задает количество N используемых ядер процессора при компиляции)
make -j2 ARCH=arm CROSS_COMPILE=/home/user/build/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi- menuconfig
Заходим в File systems -> Network File Systems и отмечаем NFS client support пробелом . Внутри NFS client support отмечаем все пункты кроме NFSv4.1
Далее выходим в главное меню и сохраняем настройки, выбрав Save an alternate configuration file. Выходим из конфигуратора
9.Компилируем модули
make modules -j2 ARCH=arm CROSS_COMPILE=/home/user/build/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
Источник
Mount nfs on android
ИНСТРУКЦИЯ ПО СБОРКЕ МОДУЛЕЙ NFS
Инструкция написана для ОС Ubuntu
1. Устанавливаем компилятор и необходимые библиотеки
sudo apt-get install make gcc libncurses-dev
2. Создаем папку, в которой будем работать
mkdir /home/user/build
3. Скачиваем кросс-компилятор от сюда http://dl.google.com/android/ndk/android-n. nux-x86.tar.bz2 и разархивируем в папку build
4. Смотрим, какое у нас ядро на телефоне (в настройках или командой uname -a в терминале на телефоне) и скачиваем его исходники, к примеру, от сюда ftp://ftp.kernel.org/pub/linux/kernel/
5. Разархивируем исходники в папку build и переименуем получившуюся папку в kernel для удобства
6. Копируем с телефона файл с настройками ядра /proc/config.gz на компьютер, разархивируем и копируем в
/build/kernel. Далее его необходимо переименовать в .config
7. Переходим в каталог kernel
cd /home/user/build/kernel
8. Запускаем Linux Kernel Configuration (параметр -jN задает количество N используемых ядер процессора при компиляции)
make -j2 ARCH=arm CROSS_COMPILE=/home/user/build/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi- menuconfig
Заходим в File systems -> Network File Systems и отмечаем NFS client support пробелом . Внутри NFS client support отмечаем все пункты кроме NFSv4.1
Далее выходим в главное меню и сохраняем настройки, выбрав Save an alternate configuration file. Выходим из конфигуратора
9.Компилируем модули
make modules -j2 ARCH=arm CROSS_COMPILE=/home/user/build/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
Источник