Sabit bağlantı oluşturma - İzinler?


17

Hangi izinler sabit bağlantı oluşturmayı etkiler? Dosya sahipliğinin kendisi önemli mi?


Kullanıcının bir dizindeki alicedosyaya sabit bir bağlantı oluşturmak istediğini varsayalım .target.txttarget-dir

  • aliceHem target.txtve hem de hangi izinlere ihtiyaç vardır target-dir?
  • Eğer target.txtkullanıcı tarafından sahip olunan billve target-dirkullanıcı tarafından sahip olunan chad, hiçbir şey değiştirir?

Bir ext4dosya sisteminde aşağıdaki klasör / dosya yapısını oluşturarak bu durumu simüle etmeye çalıştım :

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy

İken aliceyumuşak linki için oluşturabilir target.txt, o sert linki oluşturamazsınız:

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

aliceSahipler varsa target.txtve hiçbir izin değiştirilmezse, sabit bağlantı başarılı olur. Burada ne eksik?


Bu bir görev için mi? Bazılarının eğer öyleyse vermeyi seçeceği cevapların türünü etkileyebilir (elbette bir ödev hakkında bir soru sormanın sınırların dışında olacağı değil). Her neyse, sadece bu senaryoyu oluşturup ne olduğunu görmeye çalıştınız mı?
Eric Renouf

Hayır, bir görev için değil. Tam olarak bu senaryo ile karşı karşıyayım ve bazı tahminlerim var, ama teorik açıdan sormanın daha iyi olacağını düşündüm. Benim durumumda , kök olarak olmadıkça, izinleri target.txtve target-dirizinleri ne olursa olsun sabit bağlantı oluşturamıyorum sudo.
gcscaglia

Sabit bağlantılar aynı sahipliği ve izinleri paylaşır, bu nedenle orijinal dosyaya erişmekle aynıdır.
teppic

@teppic Zorluğum oluşturulan sabit bağlantıya erişmiyor, sabit bağlantıyı oluşturuyor. aliceHem orijinal dosyaya hem de bir sabit bağlantıya (ile oluşturulmuş sudo) erişebilirim, ancak bağlantıyı aliceBu izinleri kabul ettiğimiz halde kullanıcı bunun için yeterli olmalıdır.
gcscaglia

Yanıtlar:


19

Sabit bağlantı oluşturmak için her durumda izinlere aliceihtiyacınız olacaktır . İçin gereken izinler değişiklik gösterir:write+executetarget-dirtarget.txt

  • Eğer fs.protected_hardlinks = 1o zaman aliceher iki sahipliğini ihtiyacı target.txtya da en azından read+writebuna izinleri.
  • Eğer fs.protected_hardlinks = 0izinler sonra herhangi bir dizi yapacağız; 000 bile iyidir.

Benzer bir soruya verilen bu cevapta, bu soruya cevap verecek eksik bilgi vardı.

Gönderen http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [vurgu benim]:

Hardlinks:

Sistem dosyaları ile aynı bölümde kullanıcı tarafından yazılabilir dizinlere sahip sistemlerde, uzun süredir devam eden bir güvenlik sorunları sınıfı, dünya genelinde yazılabilir dizinlerde en sık görülen, hardlink tabanlı kullanım zamanı kontrol yarışıdır. / tmp gibi. Bu kusurdan yararlanmanın yaygın yöntemi, belirli bir bağlantıyı takip ederken ayrıcalık sınırlarını aşmaktır (yani bir kök işlemi, başka bir kullanıcı tarafından oluşturulan bir bağlantıyı takip eder). Ayrıca, kullanıcıların bir güvenlik açığı olan bir setuid / setgid dosyasını "sabitleyebilmesi", böylece yöneticinin sistemi tam olarak yükseltmemesi sorunu vardır.

Çözüm, yalnızca kullanıcı zaten varolan dosyanın sahibi olduğunda veya varolan dosyaya okuma / yazma erişimine sahipse sabit bağlantıların oluşturulmasına izin vermektir .


Teşekkürler! Debian 9'da bir gündür mücadele ediyorum!
Arda

Dosyada dir ve rw izinleri olsa bile neden "işlem izin verilmiyor" olsun?
Michael

1

aliceihtiyaçları en azından okuma iznini target.txtve yazma + izni yürütmek target-dir.

Şimdi, izin yapısı üç katlı ayrı bir küme olarak çalışır:

  1. Kullanıcı izinleri: Düğüme sahip olan kullanıcıya uygulanır .
  2. Grup izinleri: Düğüme sahip olan gruba ait tüm kullanıcılar için geçerlidir .
  3. Diğerlerinin izinleri: Düğüme sahip olmayan diğer tüm kullanıcılara / gruplara uygulanır .

Bu nedenle, sahiplik sorusu yalnızca gerekli izinlerin hangi izin kümesinde olduğunu etkiler alice:

  • Sahip alicekullanıcıysa, gerekli izinler "kullanıcı" bölümünde olmalıdır.
  • Eğer alicesahibi olan grubun parçası, gerekli izinleri "grubu" kısmen olmalıdır.
  • Sahibi yoksa aliceve grubun sahibi olan grubun bir parçası değilse, gerekli izinler "diğer" bölümde olmalıdır.

Ben de öyle düşündüm. Ama benim durumumda target.txt444 izinleri var ve target-dir777 izinleri var ama ben kök olarak veya ben bağlandığım dosya sahibi olmadıkça bir sabit bağlantı oluşturamıyorum. İşin tuhafı, tarif ettiğiniz gibi bir yumuşak bağlantı çalışacaktır.
gcscaglia

Bu bilgilerin sorunun kendisinde bulunması yararlı olacaktır, güncellemenizi tavsiye ederim. Garip bir şekilde daha önce düşünmedim ... ama çalıştığınız dosya sistemi başlamak için Unix benzeri sahiplik / izinleri destekliyor mu?
dave_alcarin

Evet, bir fedora 21 sisteminde kullanıma hazır bir ext4; Bağlantı, dosyanın sahibi olduğumda çalışır.
gcscaglia
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.