OSX `chmod -h` bayrağının Ubuntu eşdeğeri nedir?


13

OSX'te sembolik bağlantının izinlerini ayarlayabilirim (-h kullanarak işaret ettiği şey yerine). Man sayfasından:

 -h      If the file is a symbolic link, change the mode of the link itself rather than the file that the link points to.

Ubuntu 14.04'te bir symlink'in izinlerini ayarlamaya çalışıyorum, ancak sadece symlink hedefinde ayarlandı.

Bu, ile arasındaki symlink /home/nagios/.ssh/someprivatekeyile ilgilidir /somewhere/else/privatekey, bu nedenle izinler ssh için önemlidir. Bunu nasıl başarabilirim?


Peki, neden bu symlink'e ihtiyacınız var?
muru

1
ssh'nin / bir yerdeki / else / privatekey'deki izinleri değil, sembolik bağlantıdaki izinleri önemsediğinden emin misiniz?
Random832

@ Random832 Evet, yanlış bir sonuç çıkarmış olabilirim, izinlerin ls -lçıktıda ( lrwxrwxrwx) nasıl görüntülendiğiyle ilgili de biraz kafam karışmıştı .
Ray Burgemeestre

@muru Her tür sunucuya erişmek için ssh anahtarı kullanan bir (buildserver) Docker görüntüsü oluşturuyordum. Farklı nedenlerden dolayı özel anahtar koymak istemiyorum (yani docker hub üzerinde barındırmak istiyorsanız). Bu yüzden sembolik bağladım ve sadece görüntü çalıştırıldıktan sonra monte edilen bir birime işaret ettim. Her ne kadar düşünmeye gelsem de anahtar konumu değiştirebilirdim .ssh/config:)
Ray Burgemeestre

Yanıtlar:


18

Mümkün değil. Bir symlink üzerindeki izinler anlamsız olduğu için bir yol yoktur (symlink bir dosya değildir; sadece bir dosyayı işaret eder). Linux ile bunu yapmanın yolu ACL üzerinden geçmektir .

Symlink şöyle açıklanır ...

Oluşturulan sembolik bağlantı için dosya modu bitlerinin değerleri belirtilmedi. POSIX.1-2008 tarafından belirtilen tüm arabirimler, stat yapısının st_mode alanında döndürülen dosya modu bitlerinin değerinin belirtilmemiş olması dışında, sembolik bağlantıların içeriği her zaman okunabilir gibi davranmalıdır.


Fark burada: chmod ve chmod ... Linux'a karşı BSD.


Önemli olup olmadığından emin değilim, SSH ile ilgili: izinleri almak için lstat (2) değil stat (2) kullanır .

  • stat (), yolla gösterilen dosyayı belirtir ve buf'u doldurur.
  • lstat (), stat () ile aynıdır, ancak yol sembolik bir bağsa, bağlantının kendisi atıfta bulunduğu dosya değil stat-ed'dir.

2
Simgeler üzerinde izin ayarlama yeteneği en son sürümde bile belirtilmez, bir BSD uzantısıdır.
Random832

1
@ Random832 hmm daha doğru olabilir evet. Bugün bu biti
SO'da

4
Bu arada POSIX, fchmodatsembolik bağlantıların modunu değiştirmek için kullanılabilen işlevi belirtir (isteğe bağlı özellik - Linux dahil desteklemeyen sistemler, EOPNOTSUPP hatası döndürür), ancak chmodbunu kullanma komutunda hiçbir şey yoktur . Yalnızca -RPOSIX'te tanımlanır.
Random832

2
symlink izinleri Linux'ta anlamsızdır . Bunları değiştirebileceğiniz sistemlerde ( lchmod(2)veya fchmodat(2)... ile), bir anlamı vardır (izin ver / reddet readlink()(okuma) veya yol çözünürlüğü (yürütme)). Bir yazma bağlantısının hedefini değiştiremeyeceğiniz için yazma izinleri genellikle böyle olmaz.
Stéphane Chazelas

Unix, "bir sembolik bağın bir dosya olmadığını" kabul etmez. Symlink özel bir dosyadır.
ocaklar

9

Yapamazsın. Temel chmodsistem çağrısı Linux'ta bunu desteklemez ve bu nedenle Linux da bağlantının izinlerini umursamaz. Gönderen man chmod:

chmod never changes the permissions of symbolic links; the chmod system
call cannot change their permissions.  This is not a problem since  the
permissions  of  symbolic  links  are  never  used.   However, for each
symbolic link listed on the command line, chmod changes the permissions
of  the  pointed-to  file.   In  contrast, chmod ignores symbolic links
encountered during recursive directory traversals.

Sabit bağlantılar veya bağlama bağlarına gelince, kaynağın izinleri kullanılır, bu nedenle bir dosyanın içeriğini başka bir yerde yansıtmanın üç standart yolundan hiçbiri size bu konuda yardımcı olamaz.


Bu cevap benim için de çok açıktı, üzgünüm cevap olarak sadece birini kabul edebilirim!
Ray Burgemeestre
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.