Apa yang dilakukan izin x (eksekusi) pada soket unix?

11

Menurut pengalaman saya, pengguna yang tidak memiliki hak tidak dapat mengakses soket unix yang tidak dimilikinya tanpa set bit x. Apa tepatnya yang dilakukan bit ini? Terima kasih

Владимир Тюхтин
sumber
Apakah ini izin pada soket atau pada direktori?
Rui F Ribeiro
Di soket. Direktori memiliki mode 0755, sehingga pengguna dapat mengamati konten. Socket memiliki mode 0644, jadi secara logika pengguna (yang termasuk "orang lain" karena dia tidak memiliki soket, milik grup yang memiliki soket) harus dapat menulis ke soket. Tetapi pengguna mendapat izin menolak pesan kecuali mode 0777 diterapkan ke soket.
Владимир Тюхтин
2
@ ВладимирТюхтин, 0644berarti cukup baca izin untuk anggota grup dan "yang lain", jadi hanya pemilik yang dapat mengakses soket (karena izin tulis mengontrolnya). 0666, atau sama 0222seperti izin baca tidak diperlukan, akan cukup untuk memberikan akses kepada semua orang. Tapi, daripada memberikan izin kepada semua orang, saya akan mencari menggunakan kelompok untuk memungkinkan akses.
ilkkachu

Jawaban:

9

Tidak ada, seperti yang saya lihat.

Linux Pria halaman unix (7) mengatakan bahwa hak akses dari direktori yang berisi socket berlaku normal (yaitu Anda perlu +xdi /footerhubung ke /foo/sock, dan +wpada /foomenciptakan /foo/sock) dan write kontrol izin menghubungkan ke soket sendiri:

Di Linux, menghubungkan ke objek stream socket memerlukan izin tertulis pada socket itu; mengirim datagram ke soket datagram juga memerlukan izin tertulis pada soket itu.

Tampaknya beberapa sistem lain berperilaku berbeda:

POSIX tidak membuat pernyataan apa pun tentang efek izin pada file soket, dan pada beberapa sistem (misalnya, BSD yang lebih tua), izin soket diabaikan. Program portabel tidak boleh mengandalkan fitur ini untuk keamanan.

unix(4)pada FreeBSD menjelaskan persyaratan serupa. Halaman manual Linux tidak mengatakan jika akses soket pada beberapa sistem mengabaikan izin direktori juga.

Menghapus xbit dari soket tampaknya memiliki efek memberikan kesalahan yang berbeda untuk mencoba mengeksekusi soket, tapi itu tidak banyak perbedaan praktis:

$ 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

(Saya juga menguji bahwa hanya wsedikit yang penting untuk mengakses socket pada Debian's Linux 4.9.0.)

Mungkin soket yang Anda maksudkan telah menghapus semua bit izin dari pengguna, atau maksud Anda xbit pada direktori?

ilkkachu
sumber