私の経験では、xビットが設定されていないと、権限のないユーザーは自分が所有していないUnixソケットにアクセスできません。これは正確に何をするのですか?
ベストアンサー1
私が知っている限り何もありません。
LinuxUNIXのマニュアルページ(7)ソケットを含むディレクトリを表す権限は通常適用されます(つまり、接続するには+x
onが必要で、作成するにはonが必要です)。/foo
/foo/sock
+w
/foo
/foo/sock
書く権限制御はソケット自体に接続されます。
Linuxでストリームソケットオブジェクトに接続するには、ソケットへの書き込み権限が必要です。データグラムをデータグラムソケットに送信するには、ソケットへの書き込み権限も必要です。
明らかに、いくつかの他のシステムは異なる動作をします。
POSIXはソケットファイルに対する権限の影響について説明しておらず、一部のシステム(以前のBSDなど)ではソケット権限は無視されます。移植可能なプログラムは、セキュリティのためにこの機能に依存してはいけません。
unix(4)
FreeBSDから同様の要件が記載されている。 Linux のマニュアルページには、一部のシステムでソケットアクセスが無視されるかどうかは記載されていません。目次権限も。
ソケットからそのx
ビットを削除すると、ソケットで実行しようとすると他のエラーが発生するように見えますが、実際の違いは大きくありません。
$ ls -l test.sock
srwxr-xr-x 1 user user 0 Jun 28 16:24 test.sock=
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: No such device or address
$ chmod a-x test.sock
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: Permission denied
(私もテストしましたが、実際にはw
Debian Linux 4.9.0のソケットにアクセスするためにのみ重要です。)
おそらく、ユーザーからすべての権限ビットが削除されたソケットに言及しているのかもしれませんx
。