主要メッセージの手引き

/dev/fd/int: /dev/fd/int: cannot open

原因

シェルスクリプト setuid および setgid が実行できません。「/dev/fd/3:」や「/dev/fd/3: cannot open」のようなエラーメッセージだけが返されます (/dev/fd/ の次の数字は 3 とは限りません)。スクリプトの最初の行は正しくシェルを開始しましたが、スクリプトの入っているファイルシステムが nosuid オプションでマウントされていません。

シェルスクリプト上で truss を実行すると、open(2) のコールが失敗し、エラー番号 6 (ENXIO) が発生することがわかります。


open("/dev/fd/3", O_RDONLY)                     Err#6 ENXIO

対処方法

シェルスクリプト setuid および setgid は、/dev/fd 内のファイル記述子を使用します。/dev/fd の内容はファイル記述子ファイルシステム (FDFS) であって、フロッピーディスクとは関連がありません。

fdfs/dev/fd としてマウントされていることを確認します。次にマシンを再起動する前に、/etc/vfstab の内容を確認してください。次のような行があるはずです (先頭にコメント記号はありません)。


fd		-		/dev/fd		fd	-	no	-

root として次のコマンドを実行すると、再起動しなくても /dev/fd を再マウントできる場合があります。


# mount fd /dev/fd
setuid/setgid シェルスクリプトを使用するには、その他、上記の説明に従って /etc/vfstab を編集してからマシンを再起動する方法があります。

システム管理者によっては、/dev/fd が何のためのものか気にせずに、FDFS (ファイル記述子ファイルシステム) をマウントする /etc/vfstab 内のエントリをコメントアウトすることがあります。そのため、シェルスクリプト setuid または setgid を実行しようとして、はじめて誤りに気付く場合があります。