Kök olmayan bir kullanıcı neden root tarafından oluşturulan dosyaları silebilir?


24

Kök olmayan bir kullanıcı olan "joshua" verilmişse, root olarak joshua'nın ana dizininde "foo" adlı bir dosya oluşturdum (/ home / johsua /); şuna benziyor:

-rw-r--r--  1 root   root       0 12-19 21:00 foo

ve daha sonra joshua olarak sil, başarıyla silebilirim.

Joshua'nın silmek için yeterli izninin olmadığını beklerdim. Bir çeşit 'İzin devralma' mı? Platformum Debian 5.0.7.


1) Bu konu dışı. 2) Bunu root olmayan bir kullanıcı olarak sudoveya başka bir ayrıcalık artışıyla silebildiğinizden çok şüpheliyim . Muhtemelen bir şeyi gözden kaçırdın.
DarkDust

16
@DarkDust Bir dosya, ana dizindeki bir giriştir. Bir dizinde yazma haklarınız varsa, dosyaların kime ait olduğuna bakılmaksızın içindeki dosyaları kaldırabilirsiniz (yapışkan bit de dizinde ayarlanmadıkça)
nos

@ nos: Aptal, haklısın.
DarkDust

1
Üst dizindeki bir giriş bir dosyaya referanstır. Dosyanın kendisi değil. (Aksi takdirde, bir dosya birden fazla dizine nasıl bağlanabilir?)
David Schwartz

@DavidSchwartz, doğru ancak dosyayı dizinden silmek, dizin yapısındaki başvuruyu kaldırmakla ilgili.
mc0e

Yanıtlar:


43

Kullanıcı dosyayı silmemiş, sistem yapmış. Kullanıcı dosyayı yalnızca kendi dizininden kaldırır. Referans numarası sıfıra düştüğü için sistem dosyayı silmiş. Sadece dosyayı dizinden kaldıran kullanıcının referans sayısını sıfıra düşürdüğü oldu. (Dosya başka bir dizine zor bağlanmışsa veya dosyaya bir tanıtıcı açılmışsa, silinmemiş olur.)

Referans sayıları sıfıra düştüğünde sistem dosyaları otomatik olarak siler. Dosyanın sahibi önemli değil. Dosyanın sahibinden başka birinin dosyanın referans sayısını sıfıra bırakmasının birçok yolu vardır.

Bir dosyayı bir dizinden kaldırmak ('unlinking' olarak adlandırılır) dizindeki bir işlemdir. Bir dosyanın bağlantısını kaldırmak referans sayısını azaltır.

Benzer şekilde, sahibi dışındaki bir kullanıcı, son tanıtıcıyı herhangi bir dizine bağlı olmayan bir dosyaya kapatabilir. Bu tanıtıcıyı kapatmanız da dosyayı siler, çünkü referans sayısı tekrar sıfıra düşer.


1
Ve elbette bu rmkomut, suları bir parça çamurlaştırır, çünkü rm"kaldır" ın kısaltmasıdır ve kullanıcılar rmbir "silme" işlemi olarak düşünmek için eğitilirler . Pek çok kullanıcı, rmher gün, gerçekte gerçekleştirdiği işlemin bir "sil" olduğunu bilmediğinden, her gün kullanmaktadır . Sonuç olarak, birçok kullanıcının bu davranışı ilk karşılaştıklarında şaşırtıcı bulması şaşırtıcı değildir.
Daniel Pryden

Kesinlikle birçok kişi için şaşırtıcı. En azından rmkomut aslında bir dosyayı veya dizini bir dizinden kaldırır. Komutun çağrıldığı Windows'ta daha da kötüdür del, çünkü bir dosyayı silmek için kullanılır, ancak modern Windows makinelerinde (NT4'ten beri), aynı zamanda bir bağlantı kaldırma işlemidir.
David Schwartz

"Kullanıcı dosyayı silmemiş, sistem yapmış" Bu hiçbir anlam ifade etmiyor. "Sistem", imtiyazsız kullanıcı adına imtiyazlı erişim gerektiren değişiklikler yapamaz. Bu nedenle, bu cevap aynı kullanıcının neden sadece root tarafından yazılabilir + yazılabiliyorsa aynı şeyi yapamadığını açıklamayacaktır. @Kerrek tarafından verilen cevap doğru ve özlüdür.
FractalSpace

@FractalSpace Huh? Sistem, imtiyazsız bir kullanıcı adına imtiyazlı erişim gerektiren değişiklikler yapabilir ve bunu her zaman yapar. Örneğin, bir diskteki baytları değiştirmek, ayrıcalıklı erişim gerektirir. Ancak, bir kullanıcı bir dosyayı değiştirebiliyorsa, kullanıcı bu baytları değiştirme izni olmasa da, sistem diskteki bazı baytları değiştirmeye karar verecektir. Bir kullanıcı, çekirdek belleğini değiştiremez, ancak bir kullanıcı adına çalıştırırken çekirdek yapabilir. Sistemler, kullanıcılarının doğrudan yetkilendiremeyeceği işlemleri yapmaya karar vererek çalışır.
David Schwartz

Evet. Ve sonunda her şey "sistem" tarafından yapılır. Ancak, bu belirli "kullanıcı alanı" için belirlenen kesin ayrıcalık ayırma kurallarından geçmeden önce. Bu senaryoda, örneğin, "sistem" genel bir kural olarak işlem yapmıyor, ancak "ana dizin" üzerinde ayarlanan izinleri izliyor. OP sorusundaki bu konunun kilit kısmı.
FractalSpace

0

İlk tahmin: Bir dosyayı silmek için, içeren klasöre yazma izinlerine ihtiyacınız vardır. Öyleyse / home / johsua / foo / bar'ı deneyin, foo'ya 755 ve bar'a 644 verin.

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.