福原です.
OOSATO,Kazzrou wrote:
>> どうも user 権限で SCSI コマンド が使用でないように見える
>>のですが、何かのパーミッションを変更する必要が有るのでしょうか?
>
>
> /usr/bin/eject を suid するといった乱暴な手もないわけではない
> のですが、sudoers を使うのが自然かつ安全じゃないでしょうか。
man eject や jman eject を見ると,最後の方の NOTES (注意) で
> You need appropriate privileges to access the device
> files. Running as root or setuid root is required to eject
> some devices (e.g. SCSI devices).
> デバイスファイルへのアクセスには適切な権限が必要である。デ
> バイスによっては (例えば SCSI デバイス)、 eject を root で
> 実行しなければならなかったり、または eject を root に
> setuid しておくことが必要だったりする。
と書いてあるので,たぶん大里さんのおっしゃる通りでしょう.
apt-get install strace で strace を入れて
# strace eject -s /dev/sdd
と
$ strace eject -s /dev/sdd
の違いを見ると,どこで駄目かわかるかもしれません.
# -s は SCSI コマンドだけ使います.
# > -s This option specifies that the drive should be ejected using SCSI commands.
eject-2.0.13-3vl1.src.rpm の eject.c を見ると,想像ですが
status = ioctl(fd, SCSI_IOCTL_SEND_COMMAND, (void *)&scsi_cmd);
ここかな,という気がします.
status = ioctl(fd, CDROMEJECT);
や
status = ioctl(fd, FDEJECT);
という行もあって,
main の中で
worked = EjectCdrom(fd);
(略)
worked = EjectScsi(fd);
(略)
worked = EjectFloppy(fd);
この間では fd は変更していないようなので,fd に対するパーミッションの
問題ではなく,SCSI_IOCTL_SEND_COMMAND の ioctl が CDROMEJECT や FDEJECT
などとは違うということでしょうか.
# int fd; /* file descriptor for device */
--
福原 <makoto@xxxxxxxxxxxxxxxxxx>