vine-users ML アーカイブ



[vine-users:069996] Re: user 権 限での mo の eject

  • From: FUKUHARA Makoto <makoto@xxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:069996] Re: user 権 限での mo の eject
  • Date: Wed, 26 Jan 2005 09:59:00 +0900
福原です.
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>