ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: sisyphus@lists.altlinux.org
Subject: Re: [sisyphus] /dev/sg* permissions
Date: Tue, 25 Nov 2008 17:22:40 +0300
Message-ID: <20081125142240.GT30445@newmaster.mivlgu.local> (raw)
In-Reply-To: <20081125123612.GF18148@wo.int.altlinux.org>

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

On Tue, Nov 25, 2008 at 03:36:12PM +0300, Dmitry V. Levin wrote:
> On Tue, Nov 25, 2008 at 03:28:29PM +0300, Rafael Malikov wrote:
> > Dmitry V. Levin wrote:
[...]
> > > На файлы /dev/sg* должны быть другие права.
> > > У меня там сейчас группа cdwriter.
> > > Наверное, у вас udev создаёт эти файлы с неправильными правами.
> > >   
> > получается у меня тоже с неправильными?
> > 
> > [raf@raflinux ~]$ ls -all /dev/sg*
> > crw-r----- 1 root disk 21, 0 Ноя 24 11:15 /dev/sg0
> > crw-r----- 1 root disk 21, 1 Ноя 24 11:15 /dev/sg1
> > crw-r----- 1 root disk 21, 2 Ноя 24 11:15 /dev/sg2
> 
> Если устройства /dev/sg* имеют такие права, то к ним имеет доступ только
> root (и привилегированные программы).
> 
> > [raf@raflinux ~]$ uname -a
> > Linux raflinux.ancor.ru 2.6.27-std-pae-alt2 #1 SMP Mon Nov 10 19:20:48
> > UTC 2008 i686 GNU/Linux
> > [raf@raflinux ~]$ rpm -qa | grep udev
> > udev-rules-130-alt6
> > udev-130-alt6
> > udev_static-addon-0.2-alt1
> > udev-initramfs-130-alt6
> > 
> > и кто виноват? куда копать?
> 
> Хороший вопрос.  Между прочим, /dev/sg* могут использоваться не только с
> целью чтения audio cd.

И не только с целью их записи.

На самом деле передача SCSI-команд возможна и через обычные устройства
/dev/sr*, /dev/sd* - с использованием ioctl SG_IO.  Однако совсем
произвольные команды обычным пользователям выполнять запрещено (чтобы,
например, предотвратить возможность изменения прошивки привода).
Причём в различных версиях ядер условия фильтрации команд различаются:

 - В ядрах до 2.6.27 разрешённые коды команд жёстко прописаны в коде
   ядра, причём отдельно для доступа через SG_IO и /dev/sg*:
   
   - Список разрешённых команд для SG_IO (доступ через основной файл
     устройства) можно посмотреть в block/scsi_ioctl.c в исходниках
     ядра; он достаточно длинный, общий подход - при открытии только для
     чтения разрешены команды, использующиеся при чтении CD/DVD (в том
     числе работа с Audio-CD), при открытии на запись также разрешены
     команды, использующиеся при записи CD/DVD на стандартных
     устройствах (но для доступа к нестандартным возможностям некоторых
     устройств этих команд может быть недостаточно - именно по этому
     поводу в своё время возмущался автор cdrecord).  Для процессов,
     имеющих CAP_SYS_RAWIO, разрешено всё.

   - Фильтр для доступа через /dev/sg* реализован в drivers/scsi/sg.c
     (функция sg_allow_access()) и работает следующим образом:

     - Для SCSI-сканеров разрешены любые команды.

     - При открытии устройства только для чтения разрешён некоторый
       набор команд чтения (отличающийся от набора для чтения,
       используемого при фильтрации SG_IO).

     - При открытии устройства для записи разрешены любые команды.

 - Начиная с версии 2.6.27, в ядре используется общий фильтр команд для
   доступа через /dev/sg* и SG_IO, причём теперь этот фильтр может
   настраиваться через атрибуты устройства read_table и write_table в
   sysfs - для любой команды можно разрешить использование её при
   открытии устройства только для чтения, для записи, или запретить её
   использование без CAP_SYS_RAWIO (тем самым решается проблема с
   устройствами, требующими использования нестандартных команд в
   cdrecord или других утилитах - можно разрешить нужные команды,
   например, через правила udev в зависимости от модели устройства).
   Теперь доступ через обычный файл устройства и /dev/sg* будет давать
   одинаковые права на использование SCSI-команд (за единственным
   исключением - для SCSI-сканеров сохранено разрешение на использование
   любых команд через /dev/sg*, чтобы не ломать совместимость).

Таким образом, расширение прав доступа к /dev/sg* при использовании ядер
старее 2.6.27 приведёт к тому, что пользователи, имеющие право записи в
/dev/sg*, получат возможность передавать в устройство произвольные
команды (а не только ограниченный набор, доступный при разрешении записи
в /dev/sr*).  С другой стороны, для большинства программ должно быть
достаточно доступа через /dev/sr* - хотя, возможно, какие-то старые
программы до сих пор не умеют использовать этот интерфейс.

Кстати, в новых ядрах (>= 2.6.23) есть ещё /dev/bsg/* - ещё один
интерфейс для передачи произвольных команд, замена /dev/sg* с более
широкими возможностями (теоретически там может использоваться не только
SCSI).

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

  parent reply	other threads:[~2008-11-25 14:22 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-24  9:50 [sisyphus] audio cd riping Alexey Morsov
2008-11-25  8:19 ` Alexey Morsov
2008-11-25 11:28   ` Dmitry V. Levin
2008-11-25 11:36     ` Alexey Morsov
2008-11-25 11:42       ` [sisyphus] usev /dev/sg* permissions Dmitry V. Levin
2008-11-25 11:56         ` Alexey Morsov
2008-11-25 12:28         ` Rafael Malikov
2008-11-25 12:36           ` [sisyphus] " Dmitry V. Levin
2008-11-25 12:52             ` Alexey Morsov
2008-11-25 13:01             ` Valery V. Inozemtsev
2008-11-25 13:07               ` Alexey Morsov
2008-11-25 13:23                 ` Valery V. Inozemtsev
2008-11-25 16:56                   ` Andrey Rahmatullin
2008-11-25 17:05                     ` Valery V. Inozemtsev
2008-11-25 20:42                       ` Alexey Morsov
2008-11-25 14:22             ` Sergey Vlasov [this message]
2008-11-25 13:12         ` Dmitry V. Levin
2008-11-25 13:26           ` Valery V. Inozemtsev
2008-11-25 13:40             ` Alexey Morsov
2008-11-25 13:46               ` Valery V. Inozemtsev
2008-11-25 13:51                 ` Alexey Morsov
2008-11-25 13:58                   ` Valery V. Inozemtsev
2008-11-25 14:17                     ` Alexey Morsov
2008-11-25 14:25                   ` Sergey Vlasov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081125142240.GT30445@newmaster.mivlgu.local \
    --to=vsu@altlinux.ru \
    --cc=sisyphus@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/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 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

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


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