web-dev-qa-db-ja.com

モード1755のmkfifoがユーザーに読み取り権限とスティッキービットを付与しないのはなぜですか?

サーバーとクライアントがパイプを作成して通信できるようにする状況を作成しています。

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

  • 作成またはrootのみが削除または名前変更できるようにするには、1
  • 7は、ユーザーに読み取り、書き込み、実行を許可します。
  • グループとその他の両方に5を指定して、読み取りと実行のみを許可します。

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

私はパイプfifoの権限を見に行って、それはp-wx--s--t そう:

  • pはパイプを表し、
  • -は、ユーザーに読み取りがないことを意味します。 7でどのように与えたかはわかりません
  • sグループ実行にはユーザーがいます。私が1を与えたとしても、ユーザーと他の人に読み取りと実行のみの能力を与え、他の人にはそれが期待されていたはずだとは思いません。

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

6
Joao Parente

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

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

パイプfifoのアクセス許可を見に行ったところ、p-wx--s--t そう:

あなたのエラーは1755先行なしの許可0、つまり1755は8進数ではなく10進数として扱われました(1755 & ~022 = 03311 = p-wx--s--t;どこ 022はあなたのumaskです)

13
mosvy