Ограничение подключения устройств MTP пользователем / группой

Я работаю над преобразованием установки Ubuntu (14.04 LTS) в киоскоподобную систему с отключенным USB-накопителем. Однако это не мешает пользователю установить устройство MTP, такое как телефон Android.

Эта проблема отличается от , препятствующей автоматической установке устройств MTP, что было решено в других вопросах в AskUbuntu.

  1. Я хочу навсегда запретить монтирование MTP и других устройств хранения конкретным пользователем или группой. (Может быть, отключив mtpfs / gvfs?)
  2. О каких еще средствах подключения записываемых устройств хранения данных я должен позаботиться (например, UMTS)?

-

edit: я должен добавить, что я отключил USB-накопитель, отменив права доступа для рассматриваемой группы с помощью команды chown'ing / media для admin: myusbaccessgroup. Очевидно, что пользователи / группы, которые я хочу запретить использовать USB, не входят в myusbaccessgroup.

-

Обновление:

За этот ответ была назначена награда, но не было найдено успешного решения. Пожалуйста, ознакомьтесь с ответами до того, как последует обсуждение в чате .

Отказавшись, я вместо этого установил Ubuntu 12.04, поскольку он не поддерживает MTP из коробки. Тем не менее, устройства PTP все еще монтируются.

4
задан 21 September 2015 в 12:32

3 ответа

Это должно работать на обе Единицы & Gnome, протестированный в Ubuntu 14.04.

  1. , Добавляет новое Изменение группы

    addgroup myusbaccessgroup
    
  2. , группа владельца мониторов gvfs

    chown root:myusbaccessgroup /usr/lib/gvfs/gvfs-*-monitor
    
  3. Удаляет разрешение считать & выполнитесь для общественности/других

    chmod 750 /usr/lib/gvfs/gvfs-*-monitor
    
  4. Помещенный user1 в группе & пропустите user2 или удалите его из Выхода из системы группы

    adduser user1 myusbaccessgroup
    deluser user2 myusbaccessgroup
    
0
ответ дан 21 September 2015 в 22:32
  • 1
    Вы хотите, чтобы некоторая программа, инструмент, команда обработали данные в Вашем файле, корректном? Таким образом, необходимо назвать ту программу, инструмент, команду или независимо от того, что это. Некоторые программы могут взять путь входного файла как аргумент, например python my_python_program.py. Другие предлагают опцию читать из файла вместо того, чтобы читать из stdin, например wget -i file_with_urls.txt. Если программа рассматриваемый doesn' t предлагают любому из тех, можно перенаправить stdin: whatever_program < input_data.txt. Но it' s довольно трудно для ответа на вопрос, не зная, какой программе Вы хотите вручить данные. – Henning Kockerbeck 3 December 2016 в 02:50

Я не мог заставить это работать с помощью полномочий пользователя/группы ни один, которого я знаю, как libmtp монтируют объемы телефонов.

Это - решение проверить группу пользователей от udev сторона.

  1. Переключитесь на корень

    sudo -i
    
  2. Создайте универсальный сценарий для проверки пользователя GUI и если это находится в указанной группе

    nano /lib/udev/check_gui_user_group.sh
    

    Добавьте их строка к нему:

    #!/bin/bash
    
    export GUI_$(grep -z USER /proc/$(pgrep -nx $1)/environ)
    groups $GUI_USER | grep -qFw "$2"
    

    Добавьте выполняющееся разрешение

    chmod +x /lib/udev/check_gui_user_group.sh
    
  3. Устройства MTP: Позвольте переопределению libmtp правила в /lib/udev/rules.d/ .

    cp /lib/udev/rules.d/69-libmtp.rules /etc/udev/rules.d/69-libmtp.rules
    

    Затем откройте его для редактирования:

    nano /etc/udev/rules.d/69-libmtp.rules
    

    Добавьте эту строку сразу после LABEL="libmtp_usb_rules":

    PROGRAM!="check_gui_user_group.sh gnome-session myusbaccessgroup", GOTO="libmtp_rules_end"
    

    Для Ubuntu 14.04 Unity & Gnome можно использовать gnome-session. Для других рабочих столов проверьте использование pstree -u или ps aux | grep -i session

    Значение правила: Каждый раз, когда пользователь gnome-session НЕ находится в myusbaccessgroup пропуск группы все правила libmtp.

  4. Устройства PTP: Добавьте другой файл правил

    nano /etc/udev/rules.d/99-usb-storage-remove.rules
    

    Добавьте правило

    ACTION=="add", ENV{GPHOTO2_DRIVER}=="PTP", ENV{DRIVER}!="", PROGRAM!="check_gui_user_group.sh gnome-session myusbaccessgroup", RUN+="/bin/sh -c 'echo -n %k >/sys%p/subsystem/drivers/%E{DRIVER}/unbind'"
    
  5. Другие устройства хранения USB: Добавьте это правило к файлу правил предыдущего шага.

    ACTION=="add", DRIVER=="usb-storage|uas|ums-*", PROGRAM!="check_gui_user_group.sh gnome-session myusbaccessgroup", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
    

    Для знания от того, где я получаю список драйверов попробуйте это:

    ls /lib/modules/$(uname -r)/kernel/drivers/usb/storage/
    
  6. Перезагрузите правила

    udevadm control -R
    
  7. Повторно включите свой телефон.


Тестирование и Поиск и устранение неисправностей:

  1. Установите группу, если она уже не сделана

    addgroup myusbaccessgroup
    
  2. Удалите пользователя из группы.

    deluser user myusbaccessgroup
    
  3. Выполненный монитор udev

    udevadm monitor -u
    
  4. Переразъем то устройство

  5. Проверьте то, что было выполнено

    udevadm test /sys/device/...
    
  6. Добавьте пользователя к группе

    adduser user myusbaccessgroup
    
  7. Восстановление, начинающее с шага 3.

Примечания:

Я использовал Kubuntu 15.04 (реальная машина) и Ubuntu 14.04 (новая установка в VirtualBox) для тестирования.

  • Я использовал Цветок Wiko (Android 4.4.2) для тестирования режима MTP, который работает хорошо в обеих системах.
  • Я не мог протестировать режим PTP, потому что он не был автосмонтирован, май быть, я пропускаю что-то здесь.
  • Другие внешние устройства хранения данных: диск флэш-памяти и внешний жесткий диск. Тест передает для обеих систем.

Ссылки:

3
ответ дан 21 September 2015 в 22:32
  • 1
    таким образом, что является синтаксисом для присвоения stdin в файл для текущей оболочки, таким образом, я могу читать из файла, не используя имя файла. – Pankaj Pandey 3 December 2016 в 02:39

У меня было то же требование в моем конце.

Лучший способ к MTP Блока, PTP для андроида должен отключить сервис в человечности.

Вводят это местоположение, поскольку корневой/usr/lib/gvfs

"sudo наутилус" будет легок, если Вы будете склонны использовать GUI

"sudo наутилус", и n перешли к computer/usr/lib/gvfs

То будет список сервисов, Удаляют выполнить разрешение путем щелчка правой кнопкой по соответствующему сервису-> свойства->, разрешение-> unckeck "выполняет" и изменяет доступ только для чтения от "только для чтения" ни до "одного"

, Блокирующийся MTP и PTP

Удаляют выполнить разрешение для

gvfsd-mtp

gvfs-mtp-volume-monitor (для более безопасной стороны)

gvfsd-gphoto2

gvfs-gphoto2-volume-monitor (для более безопасной стороны)

<час>

Apple, которой я звоню, может смонтироваться через afp

, настолько любезно Удаляют выполнить разрешение для gvfsd-afp

gvfs-afc-volume-monitor (для более безопасной стороны)

, некоторые мобильные телефоны андроида могут использовать режим массового хранения, чтобы смонтировать там, что SD-карта изменяет разрешение папки в/media/user к 400

пользователь - созданный пользователь в человечности.

chmod 400

или удаляют разрешение монтирования для пользователя..

0
ответ дан 21 September 2015 в 22:32
  • 1
    Я думаю, что проблема - то, что дескриптор файла 0 уже присоединен к tty - таким образом, содержание файла просто сразу читается терминалом. Если Вы хотите использовать дескриптор файла для чтения данных в некоторый другой процесс, you' d обычно присваивают его неиспользованному дескриптору такой как exec 3<file и затем читают , что , например, в bash можно использовать эти -u флаг как read -r -u3 line ... . Если Ваш процесс может [только 117] чтение от stdin, то необходимо будет перенаправить 0 к другому FD сначала и восстановить его после, я думаю. – steeldriver 3 December 2016 в 02:47

Другие вопросы по тегам:

Похожие вопросы: