Unix yuvalarında x (yürütme) izni ne işe yarar?


11

Deneyimlerime göre ayrıcalıksız kullanıcı x bit seti olmadan sahip olmadığı unix soketine erişemez. Bu bit tam olarak ne yapıyor? Teşekkürler


Soketlerdeki veya dizindeki izin mi?
Rui F Ribeiro

Bir sokette. Dizin 0755 moduna sahiptir, böylece kullanıcı içeriği gözlemleyebilir. Soket 0644 moduna sahiptir, bu nedenle mantıksal olarak kullanıcı ("diğerleri" ye aittir, çünkü soketine sahip değildir ve grup sahibi sokete aittir) sokete yazabilmelidir. Ancak sokete 0777 modu uygulanmadığı sürece kullanıcı izin verme mesajını alır.
Владимир Тюхтин

2
@ ВладимирТюхтин, 0644sadece grup üyeleri ve "diğerleri" için okuma izni anlamına gelir, bu yüzden sadece sahibi sokete erişebilir (yazma izni kontrol ettiği için). 0666veya tıpkı 0222okuma iznine ihtiyaç duyulmadığı gibi, herkese erişim sağlamak için yeterli olacaktır. Ancak, herkese izin vermek yerine, erişime izin vermek için grupları kullanmayı düşünürüm.
ilkkachu

Yanıtlar:


9

Görebildiğim gibi bir şey yok.

Linux ADAM sayfa unix (7) bir soket içeren dizinin izinleri (yani ihtiyacınız normalde geçerli olduğunu söylüyor +xüzerinde /foobağlanmak için /foo/sock, ve +wüzerinde /foooluşturmak için /foo/sock) ve bu yazma soketine kendisine bağlayan izin kontrolleri:

Linux'ta, bir akış soketi nesnesine bağlanmak için o sokette yazma izni gerekir; bir datagram soketine bir datagram göndermek aynı şekilde soket üzerinde yazma izni gerektirir.

Görünüşe göre bazı diğer sistemler farklı davranıyor:

POSIX, izinlerin soket dosyası üzerindeki etkisi hakkında herhangi bir açıklama yapmaz ve bazı sistemlerde (örn. Eski BSD'ler) soket izinleri yok sayılır. Taşınabilir programlar güvenlik için bu özelliğe güvenmemelidir.

unix(4)FreeBSD'de benzer gereklilikler açıklanmaktadır. Linux kılavuz sayfası, bazı sistemlerde soket erişiminin dizin izinlerini de yoksayıp atmadığını söylemedi .

Ucu xsoketten çıkarmak, soketi yürütmeyi denemek için farklı bir hata verme etkisine sahip gibi görünüyor, ancak bu pratik bir fark değil:

$ 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

( wDebian'ın Linux 4.9.0'ındaki sokete erişmek için gerçekten sadece biraz önemli olduğunu test ettim .)

Belki de tüm izin bitlerinin kullanıcıdan kaldırıldığını veya xdizindeki biti kastettiğiniz soketleri ?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.