Linux / POSIX neden lchmod değil de lchmod değil?


11

Linux destekler sembolik bağlantı (yani sahibini değiştirme gibi görünüyor lchown) fakat sembolik bağlantı modu / izni değişen (yani lchmod) olduğu desteklenmez . Görebildiğim kadarıyla bu POSIX ile uyumlu. Ancak, neden bu işlemlerden birini desteklediğini anlamıyorum ama ikisini de desteklemiyorum. Bunun arkasındaki motivasyon nedir?


1
Bir sembolik bağlantının izinleri her zaman vardır lrwxrwxrwx. A chmodburada bir anlam ifade etmiyor. Bağlantıyı izlemeniz sizi hedef izinlerine yönlendirir.
ott--

2
@ott: Linux'ta bir symlink'in izinleri, Linux desteklemediği için her zaman tam olarak verdiğiniz izinlerdir lchmod. Ancak diğer Unix benzeri işletim sistemleri bunu destekliyor (örn. Mac OS X ), bu yüzden soru, Linux desteklediğinde neden desteklemiyor lchown.
Florian Brucker

Yanıtlar:


9

Linux, çoğu Unix benzeri sistem gibi (Apple OS / X nadir istisnalardan biridir), örneğin hedeflerini çözme konusunda sembolik bağlantıların izinlerini yok sayar.

Bununla birlikte, diğer dosyalar gibi sembolik bağlantıların sahipliği, tbit ayarlı dizinlerdeki girişlerini yeniden adlandırma veya bağlantılarını kaldırma izni söz konusu olduğunda önemlidir /tmp.

İçindeki bir dosyayı kaldırabilmeniz veya yeniden adlandırabilmeniz için (symlink ya da değil) /tmp, dosyanın sahibi olmanız gerekir. Bu, bir sembolik bağlantının sahipliğini değiştirmek isteyebilmesinin bir nedenidir (bağlantısını kaldırma / yeniden adlandırma izni vermek veya kaldırmak için).

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

Ayrıca, Mark Plotnick'in şimdi silinen cevabında belirtildiği gibi , yedekleme ve arşivleme uygulamalarının lchown()sembolikleri orijinal sahiplerine geri yüklemeleri gerekir . Başka bir seçenek, symlink'i oluşturmadan önce euid ve egid'i değiştirmek olacaktır, ancak bu etkili olmayacak ve symlink'in çıkarıldığı dizindeki doğru yönetimleri karmaşık hale getirmeyecektir.


Bunun orijinal motivasyon olup olmadığından emin değilim, ancak tasarımın yararlı olmasının bir nedeni var. Teşekkürler!
Florian Brucker

0

Posix'te lchmod () yoktur, ancak bir sembolik bağlantının izinlerini ayarlamaya izin veren fchmodat () yoktur. Bu yine de sembolik bağların izinlerinin değerlendirilmesini gerektirmez.


1
OP sahip olmamanın lchmodPOSIX ile uyumlu olduğunu bilir . Bu cevap zaten soruda olmayan ne ekliyor?
muru

Operatör neden sadece bir fonksiyonun desteklendiğini sordu ve bahsettiğim isim altında değil, neredeyse her ikisinin de mevcut olduğunu açıkladım.
schily

1
Nasıl yani? Standart şunları söylüyor : Bazı uygulamalar sembolik bağların modunun değiştirilmesine izin verebilir. Bu POSIX belirtimindeki arabirimler tarafından desteklenmez. Bu desteğe sahip sistemler lchmod () adında bir arabirim sağlar. Bu tür uygulamaları desteklemek için fchmodat () bir flag parametresine sahiptir. Tüm bunlar, uygulamanın symlink izinlerini değiştirmesine izin veren bir fchmodat bayrağı olduğunu söylüyor. Mutlaka yapabileceği için değil.
muru

Doğru, sembol bağlantılarının izinleri 35 yıldan beri değerlendirilmediğinden, modları değiştirmek mantıklı değildir. Ortogonsite için Fchmodat () vardır. Tek gerçek avantaj, semboller için ayarlanabilir zaman damgalarının insanların bir dizin ağacını anlamalarına yardımcı olduğu için futimensat () idi.
schily

@schilly, OS / X sembolik bağlantılara onur izinleri verir. Burada, okuma izniniz yoksa hedeflerini çözemezsiniz.
Stéphane Chazelas
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.