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 --]
next prev 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