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).