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