web-dev-qa-db-ja.com

UNIXソケットでx(実行)アクセス権は何をしますか?

私の経験では、非特権ユーザーはxビットが設定されていないと所有していないUNIXソケットにアクセスできません。このビットは正確に何をしますか?ありがとう

私が見ることができるように、何もありません。

Linux man page unix(7) は、ソケットを含むディレクトリの権限が正常に適用されることを示しています(つまり、_+x_で_/foo_に接続するには_/foo/sock_が必要です、および_+w_で_/foo_を作成して_/foo/sock_)を作成し、そのwrite権限でソケット自体への接続を制御します。

Linuxでは、ストリームソケットオブジェクトに接続するには、そのソケットに対する書き込み権限が必要です。同様に、データグラムをデータグラムソケットに送信するには、そのソケットに対する書き込み許可が必要です。

どうやら他のいくつかのシステムは異なる動作をします:

POSIXは、ソケットファイルへのアクセス許可の影響については何も述べていません。一部のシステム(たとえば、古いBSD)では、ソケットのアクセス許可は無視されます。ポータブルプログラムは、セキュリティのためにこの機能に依存すべきではありません。

unix(4) on FreeBSD は同様の要件を説明します。一部のシステムでのソケットアクセスがdirectory権限も無視するかどうかについては、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ビットを意味したのでしょうか?

9
ilkkachu