ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] Отключение USB-накопителей
@ 2011-03-03  5:57 Alexey Petrakov
  2011-03-03  9:43 ` Dmitry Chistikov
  2011-03-03 12:34 ` Sergey Vlasov
  0 siblings, 2 replies; 7+ messages in thread
From: Alexey Petrakov @ 2011-03-03  5:57 UTC (permalink / raw)
  To: ALT Linux Community general discussions

Здравствуйте.

Возникла такая задача: отключить на определённых машинах возможность 
пользоваться флешками и прочими USB-накопителями. Ломаю голову как это 
сделать.
Первой идеей было написать правило для udev, которые выставит на создаваемое 
устройство права 0000. Написал, выставило. Однако, монтироваться это флешке 
ничуть не мешает.
Думаю дальше. Сделал правило, которое для usb-storage устройств делает 
OPTIONS+="ignore_device". Вроде нужного эффекта добился, однако рытьё в 
интернете показало, что в ближайшей будущей версии udev опции ignore_device из 
каких-то непонятных соображений больше не будет.
Таким образом, вроде простая и распространённая вещь породила неожиданно много 
геморроя.
Научите пожалуйста, кто знает, как правильно реализовать эту задачу. И очень 
бы хотелось понять почему hal (ведь это он монтирует диски по заданию от KDE?) 
полностью игнорирует права доступа к устройству, которое он монтирует.



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Comm] Отключение USB-накопителей
  2011-03-03  5:57 [Comm] Отключение USB-накопителей Alexey Petrakov
@ 2011-03-03  9:43 ` Dmitry Chistikov
  2011-03-03 10:20   ` Alexey Petrakov
  2011-03-03 12:34 ` Sergey Vlasov
  1 sibling, 1 reply; 7+ messages in thread
From: Dmitry Chistikov @ 2011-03-03  9:43 UTC (permalink / raw)
  To: ALT Linux Community general discussions

Alexey Petrakov, Mar. 03, 2011, 11:57 +0600:
> Возникла такая задача: отключить на определённых машинах возможность 
> пользоваться флешками и прочими USB-накопителями. Ломаю голову как это 
> сделать.

Чисто теоретически: отправить usb_storage в blacklist не пробовали?

-- 
Дмитрий Чистиков


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Comm] Отключение USB-накопителей
  2011-03-03  9:43 ` Dmitry Chistikov
@ 2011-03-03 10:20   ` Alexey Petrakov
  0 siblings, 0 replies; 7+ messages in thread
From: Alexey Petrakov @ 2011-03-03 10:20 UTC (permalink / raw)
  To: ALT Linux Community general discussions

В сообщении от 3 марта 2011 15:43:13 автор Dmitry Chistikov написал:
> Alexey Petrakov, Mar. 03, 2011, 11:57 +0600:
> > Возникла такая задача: отключить на определённых машинах возможность
> > пользоваться флешками и прочими USB-накопителями. Ломаю голову как это
> > сделать.
> 
> Чисто теоретически: отправить usb_storage в blacklist не пробовали?

Пробовал. Но:
1) Не получилось. Модуль всё равно проболжал грузиться. "depmod -a" сделать не 
забыл.
2) Полумера, т.к. может завтра понадобится запрещать не все подряд флешки, а 
для каких-то сделать исключение, или пускать, но в ReadOnly режиме или ещё 
что-нибудь подобное.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Comm] Отключение USB-накопителей
  2011-03-03  5:57 [Comm] Отключение USB-накопителей Alexey Petrakov
  2011-03-03  9:43 ` Dmitry Chistikov
@ 2011-03-03 12:34 ` Sergey Vlasov
  2011-03-04  3:30   ` Alexey Petrakov
  1 sibling, 1 reply; 7+ messages in thread
From: Sergey Vlasov @ 2011-03-03 12:34 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 1015 bytes --]

On Thu, Mar 03, 2011 at 11:57:57AM +0600, Alexey Petrakov wrote:
> Возникла такая задача: отключить на определённых машинах возможность
> пользоваться флешками и прочими USB-накопителями. Ломаю голову как это
> сделать.
> Первой идеей было написать правило для udev, которые выставит на
> создаваемое устройство права 0000. Написал, выставило. Однако,
> монтироваться это флешке ничуть не мешает.

Для монтирования права доступа к блочному устройству не требуются.

Правильный на сегодняшний день способ ограничения доступа к
USB-устройствам (работающий с любыми устройствами, а не только с
usb-storage) описан в документации ядра
(Documentation/usb/authorization.txt):

  http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/usb/authorization.txt;hb=HEAD

Попытки оформить это в виде правил udev:

  http://permalink.gmane.org/gmane.linux.hotplug.devel/16602

(и другие сообщения в этом обсуждении - окончательный вариант правил
там пока не сформировали).

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Comm] Отключение USB-накопителей
  2011-03-03 12:34 ` Sergey Vlasov
@ 2011-03-04  3:30   ` Alexey Petrakov
  2011-03-04 15:10     ` Sergey Vlasov
  0 siblings, 1 reply; 7+ messages in thread
From: Alexey Petrakov @ 2011-03-04  3:30 UTC (permalink / raw)
  To: community

В сообщении от 3 марта 2011 18:34:54 автор Sergey Vlasov написал:
> On Thu, Mar 03, 2011 at 11:57:57AM +0600, Alexey Petrakov wrote:
> Для монтирования права доступа к блочному устройству не требуются.

Жаль. Такой удобный механизм, очень печально что его похерили.

> Правильный на сегодняшний день способ ограничения доступа к
> USB-устройствам (работающий с любыми устройствами, а не только с
> usb-storage) описан в документации ядра
> (Documentation/usb/authorization.txt):
>  http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=
> Documentation/usb/authorization.txt;hb=HEAD
> Попытки оформить это в виде правил udev:
>   http://permalink.gmane.org/gmane.linux.hotplug.devel/16602
> (и другие сообщения в этом обсуждении - окончательный вариант правил
> там пока не сформировали).

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

SUBSYSTEM=="block", DRIVERS=="usb-storage", NAME=""

Если я в чём-то не прав - с радостью приму замечания.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Comm] Отключение USB-накопителей
  2011-03-04  3:30   ` Alexey Petrakov
@ 2011-03-04 15:10     ` Sergey Vlasov
  2011-03-08 10:24       ` Alexey Petrakov
  0 siblings, 1 reply; 7+ messages in thread
From: Sergey Vlasov @ 2011-03-04 15:10 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 4358 bytes --]

On Fri, Mar 04, 2011 at 09:30:22AM +0600, Alexey Petrakov wrote:
> В сообщении от 3 марта 2011 18:34:54 автор Sergey Vlasov написал:
> > On Thu, Mar 03, 2011 at 11:57:57AM +0600, Alexey Petrakov wrote:
> > Для монтирования права доступа к блочному устройству не требуются.
> 
> Жаль. Такой удобный механизм, очень печально что его похерили.

На самом деле его там никогда и не было - в любом случае фактическое
монтирование выполняется от root, а обычный пользователь может что-то
смонтировать либо через suid-программу, либо через обращение к другому
процессу, имеющему права root (hald, udisks-daemon).  Ограничения типа
опций owner и group в fstab на самом деле реализованы в /bin/mount; у
hald есть свои правила, udisks-daemon не имеет собственных файлов
конфигурации и управляется через установку переменных окружения в
правилах udev.

[...]
> > (Documentation/usb/authorization.txt):
[...]
> Спасибо. Ознакомился. На мой взгляд, это в некоторой мере стрельба
> из пушки по воробьям. И, к тому же, там, как я понял, реализован
> принцип "сначала запретим всё что каается УСБ, а потом будем
> разрешать что можно", а мне нужно наоборот "можно всё, кроме
> указанного", да и разгребать баги с отвалившимися мышами,
> клавиатурами и принтерами не хочется совсем.

По-другому сделать просто нельзя - после обнаружения устройства, если
authorized_default не установлено в 0, к нему сразу привязывается
драйвер, если соответствующий модуль загружен.  Единственный надёжно
работающий способ - ничего не делать с устройством, пока не будет
получено разрешение от userspace.

Логику "можно всё, кроме указанного" можно попробовать реализовать на
уровне правил udev - вместо записи сразу в ATTR{authorized} можно
сначала устанавливать значение какой-нибудь переменной окружения
(первым правилом установить в 1 для всех USB-устройств, последующими
правилами сбросить в 0 для ненужных), а в последнем правиле записать
окончательное значение переменной в ATTR{authorized}.  Хотя тут
возникает проблема из-за того, что атрибут authorized находится на
уровне устройства, а привязка драйверов происходит к интерфейсам,
находящимся уже на следующем уровне иерархии объектов sysfs (кстати,
из-за этого ещё возникнет вопрос, что делать с многофункциональными
устройствами, имеющими одновременно с интерфейсом Mass Storage и
другие интерфейсы - через атрибут authorized можно запрещать доступ
только к устройству целиком).

> На данный момент наиболее адекватным считаю следующее правило удева:
> 
> SUBSYSTEM=="block", DRIVERS=="usb-storage", NAME=""

Менять NAME в документации уже давно не рекомендуются, и вроде бы тоже
грозились совсем запретить (раньше это было нужно для некоторых
устройств, для которых ядро не выдавало полные имена самостоятельно,
но сейчас это уже починено в самом ядре).  Уже сейчас при обнаружении
установки NAME udevd сыпет ошибками.

> Если я в чём-то не прав - с радостью приму замечания.

Есть ещё один вариант - выставить /sys/bus/usb/drivers_autoprobe в 0,
а потом в случае обнаружения разрешённого устройства записывать его
bus_id либо в /sys/bus/usb/drivers_probe (разрешая ядру самостоятельно
выбрать подходящий драйвер), либо в bind для конкретного драйвера.

  http://www.kernel.org/pub/linux/kernel/people/gregkh/driver_core/2.6/2.6.21/driver-core-udev-triggered-device-driver-binding.patch

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

Есть и совсем грубый способ - запретить загрузку модуля usb-storage
через /etc/modprobe.d/*.conf:

  install usb-storage /bin/true

При этом могут появиться сообщения об ошибках в случае подключения
устройств, обслуживаемых не самим модулем usb-storage, а другими
модулями, зависящими от него (поддержка некоторых "странных" устройств
сейчас вынесена в отдельные модули ums-*); из-за наличия таких модулей
недостаточно написать "blacklist usb-storage" (blacklist действует
только на запросы указанного модуля, но не блокирует загрузку его по
зависимостям из других модулей).  При наличии USB 3.0 надо блокировать
и модуль uas.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Comm] Отключение USB-накопителей
  2011-03-04 15:10     ` Sergey Vlasov
@ 2011-03-08 10:24       ` Alexey Petrakov
  0 siblings, 0 replies; 7+ messages in thread
From: Alexey Petrakov @ 2011-03-08 10:24 UTC (permalink / raw)
  To: community

В сообщении от Пятница 04 марта 2011 21:10:47 автор Sergey Vlasov написал:
> On Fri, Mar 04, 2011 at 09:30:22AM +0600, Alexey Petrakov wrote:
> > В сообщении от 3 марта 2011 18:34:54 автор Sergey Vlasov написал:

> По-другому сделать просто нельзя - после обнаружения устройства, если
> authorized_default не установлено в 0, к нему сразу привязывается
> драйвер, если соответствующий модуль загружен.  Единственный надёжно
> работающий способ - ничего не делать с устройством, пока не будет
> получено разрешение от userspace.

Спасибо за подробную лекцию. Всё-таки, на мой взгляд, такие сложные и 
нетривиальные манипуляции для достижения такой простой цели - это слегка 
неадекватно. Посему, получается что наиболее человеческий метод решения задачи 
- это "install usb-storage /bin/true" в /etc/modprobe.d/*.conf

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-03-08 10:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-03  5:57 [Comm] Отключение USB-накопителей Alexey Petrakov
2011-03-03  9:43 ` Dmitry Chistikov
2011-03-03 10:20   ` Alexey Petrakov
2011-03-03 12:34 ` Sergey Vlasov
2011-03-04  3:30   ` Alexey Petrakov
2011-03-04 15:10     ` Sergey Vlasov
2011-03-08 10:24       ` Alexey Petrakov

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git