モード1755のmkfifoがユーザーに読み取り権限と固定ビットを与えないのはなぜですか?

モード1755のmkfifoがユーザーに読み取り権限と固定ビットを与えないのはなぜですか?

私はサーバーとクライアントで状況を作成しており、それらが通信できるようにパイプを作成したいと思います。

次のコマンドを使用してサーバーコードにパイプを作成しました mkfifo("fifo",1755);

  • 1作成したユーザーとルートのみが削除または名前を変更できます。
  • 7 は、ユーザーに読み取り、書き込み、および実行権限を与えるために使用されます。
  • 5グループおよび他のグループには読み取りおよび実行権限のみを付与します。

問題は、後でサーバーコードでfifoを開いて読みましopen("fifo",O_RDONLY);たが、実行するとfifoへのアクセスを拒否するエラーが表示されることです。

パイプfifoの権限を見てみましたが、次のようになります p-wx--s--t

  • pパイプラインを表し、
  • -ユーザーが未読であることを示します。いつ7をあげたかはわかりませんが、
  • sグループの実行にはユーザーがいます。 1を与えれば、ユーザーと他の人に読んで実行する能力だけを与え、他の人に期待される能力は与えないかどうかわかりません。

権限を誤解していますか?

ベストアンサー1

単にパイプでバイナリを実行することはできません。パイプでネイティブバイナリを実行する方法はありますか?。また、実行可能ファイルのスティッキービットは最新のシステムでは価値がないと思います。

サーバーコードからパイプを作成しました。mkfifo("fifo",1755);

パイプfifoの権限を見てみましたが、次のようになりますp-wx--s--t

1755あなたのエラーは、権限が先行せずに作成されたことです0。これは1755、8進数ではなく10進数で処理されたことを意味します(1755 & ~022 = 03311 = p-wx--s--t; 022umaskはどこにあります)。

おすすめ記事