Neden bir kullanıcı başka bir kullanıcının 755 dosyasını silebilir?


35

Kullanıcıyı kullanarak scp'nin dosyalarını başka bir sunucuya kopyalayan bir yedekleme yükleme betiğim var upload. Hedef sunucudaki başka bir komut dosyası daha sonra bunları başka bir kullanıcıya gönderir ve dosya modunu ayarlar 755.

Daha sonra uploadkullanıcıyı kullanarak hedef sunucuya SSH koysam, hazırlanan dosyaları silebilirim. Sadece okunmaları gerekmiyor mu?

Bir dosyanın hedef sunucuda nasıl göründüğü ve kullanıcı uploadtarafından sililebildiği.

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

Kullanıcı upload, yalnızca kullanılarak eklenmiştir useraddve maciekishgrubun bir parçası değildir .

Dosyayı uploadssh ile silmeye çalışırken “yazmaya karşı korumalı normal dosyayı” silmek isteyip istemediğim sorusunu alıyorum Yve onu söyleyip silebiliyorum.


Yanıtlar:


64

Dosyalar vardır salt okunur; ancak, bir dosyayı silmek onu değiştirmez ancak yalnızca üst dizini (temelde dosyayı dizin listesinden kaldırır) - ve dizine tam yazma izniniz var gibi görünür.

stickyBit - aka “kısıtlı silme” bayrağını ayarlayabilirsiniz; bu, sahibi dışındaki herkesin bu dizindeki dosyaları yeniden adlandırmasını veya silmesini önler (içinde olduğu gibi /tmp). Bunu yapmak chmod o+t *directory*için dizinin sahibi olarak çalıştırın .


12

Tipik bir Unix dosya sisteminde, herhangi bir dosya, her biri bir "hard link" tutan rasgele sayıda dizin girişi ile tanımlanabilir.

Bir uygulama açısından, bir dosya için son dizin girişini (hard link) silmek ve birçoğundan bir referansı silmek arasında bir fark vardır. Bununla birlikte, anlamsal bir bakış açısından bir fark yoktur.

Bir dosyaya çok sayıda sabit bağlantı varsa, bunlardan herhangi birini kullanarak dosyaya yazmak, herkes tarafından görülen dosyayı değiştirir. rmBununla birlikte, bir bağlantıda kullanmak , yalnızca dosyanın o bağlantı yoluyla erişilememesine neden olur. Dosyaya olan diğer bağlantılar aynı dosyayı görmeye devam eder.


3
Genellikle zor bağlantılar olarak bilinir.
Bob

1
@Bob: "Hard link" teriminin zaten var olan bir dosyaya yaratılan referansları tanımlamak için kullanıldığını biliyorum; Bir dosyanın hiçbir zaman birden fazla referansı olmadığı durumlarda, bu başvuru hala "hard link" olarak adlandırılıyor mu?
supercat

3
Bağlantılar arasında fark yoktur. A dosyası oluşturun, B bağlantısını oluşturun, A dosyasını silin. B artık bir dosya mı yoksa bir sabit bağlantı mı? Nasıl çalıştığını anlamak için, onu 1 dosya ve (N-1) hard link olarak değil, N hard link olarak görmek daha iyidir. Bir dosya açıldığında varolan bağlantılar da vardır.
gnasher729

@ gnasher729: Birden fazla bağlantının var olduğu veya bir dosyada var olduğu durumlarda, aralarında anlamsal bir fark yoksa, hepsine "hard link" olarak atıfta bulunmanın anlamlı olacağını kabul ediyorum. Öte yandan, hem semantik hem de performans açısından bakıldığında, her zaman bir dosyaya atıfta bulunulan bir dizin girdisi ile diğer sabit bağlantıların oluşturulmuş olduğu arasında ayrım yapmanın avantajları olabileceğini düşünüyorum. Her durumda, "her biri" hard link "olarak adlandırılan dizin girişlerinden söz etmenin doğru olup olmadığını bilmiyordum.
supercat

2
@supercat bu inanılmaz yaygın değil, ama doğru. İçindeki st_nlink("sabit bağlantıların sayısı") alanını dikkate alın struct stat. Basitçe söylemek gerekirse, dizinler dosyalara sıkı bağlantı sağlar.
Ocaklar
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.