Apakah yang setara dengan flag OSX `chmod -h` di Ubuntu?

13

Di OSX saya dapat mengatur izin dari symlink itu sendiri (bukan hal yang ditunjuknya untuk menggunakan -h). Dari halaman manual:

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

Di Ubuntu 14.04 saya mencoba untuk mengatur izin symlink, tetapi hanya ditetapkan pada target symlink.

Ini menyangkut symlink dari /home/nagios/.ssh/someprivatekeyke /somewhere/else/privatekey, jadi izin penting untuk ssh. Bagaimana saya bisa mencapai ini?

Ray Burgemeestre
sumber
Jadi, mengapa Anda memerlukan symlink ini?
muru
1
apakah Anda yakin ssh peduli tentang izin pada tautan simbolis dan bukan izin pada / di tempat lain / privatekey?
Random832
@ Random832 Ya, saya mungkin telah mengambil kesimpulan yang salah, saya juga agak bingung tentang bagaimana izin ditampilkan di ls -loutput ( lrwxrwxrwx).
Ray Burgemeestre
@muru Saya membuat gambar Docker (buildserver) yang menggunakan kunci ssh untuk mengakses semua jenis server. Saya tidak ingin memasukkan kunci pribadi ke dalam karena alasan yang berbeda (yaitu jika saya ingin meng-host-nya di hub docker). Jadi saya menghubungkannya dan mengarahkannya ke volume yang hanya dipasang setelah gambar dijalankan. Meskipun, kalau dipikir-pikir itu, saya juga bisa mengubah lokasi utama menggunakan .ssh/config:)
Ray Burgemeestre

Jawaban:

18

Tidak memungkinkan. Tidak ada cara karena izin pada symlink tidak ada artinya (symlink bukan file; itu hanya menunjuk ke file). Cara untuk melakukan ini dengan Linux adalah melalui ACL .

symlink dijelaskan sebagai ...

Nilai bit mode file untuk tautan simbolik yang dibuat tidak ditentukan. Semua antarmuka yang ditentukan oleh POSIX.1-2008 akan berperilaku seolah-olah konten dari tautan simbolik selalu dapat dibaca, kecuali bahwa nilai bit mode file yang dikembalikan dalam bidang st_mode dari struktur stat tidak ditentukan.


Perbedaannya ada di sini: chmod dan chmod ... itu BSD versus Linux.


Tidak yakin apakah ini penting tetapi mengenai SSH: ia menggunakan stat (2) , bukan lstat (2) untuk mendapatkan izin.

  • stat () stats file yang ditunjuk oleh path dan mengisi buf.
  • lstat () identik dengan stat (), kecuali jika path adalah tautan simbolik, maka tautan itu sendiri adalah stat-ed, bukan file yang dimaksud.
Rinzwind
sumber
2
Kemampuan untuk mengatur izin pada symlink tidak ditentukan bahkan dalam versi terbaru, itu adalah ekstensi BSD.
Random832
1
@ Random832 hmm itu mungkin lebih akurat ya. Saya membaca sedikit itu hari ini di SO tetapi tidak melakukan pengecekan atas hal ini: D
Rinzwind
4
Secara kebetulan POSIX tidak menentukan fchmodatfungsi, yang dapat digunakan untuk mengubah mode tautan simbolik (fitur opsional - sistem yang tidak mendukungnya, termasuk Linux, return error EOPNOTSUPP), tetapi tidak ada chmodperintah untuk menggunakan ini. Hanya -Rditentukan dalam POSIX.
Random832
2
izin symlink tidak ada artinya di Linux . Pada sistem di mana Anda dapat mengubahnya (dengan lchmod(2)atau fchmodat(2)...), mereka memiliki makna (izinkan / tolak readlink()(baca) atau resolusi jalur melalui mereka (jalankan)). Izin menulis biasanya tidak karena Anda tidak dapat mengubah target symlink.
Stéphane Chazelas
Unix tidak akan setuju dengan Anda bahwa "symlink bukan file". Symlink adalah file khusus .
hobbs
9

Kamu tidak bisa chmodPanggilan sistem yang mendasarinya tidak mendukung hal ini di Linux, dan karena itu, Linux juga tidak peduli dengan izin tautan. Dari 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.

Mengenai tautan keras atau bind mount, izin sumber digunakan, sehingga tidak satu pun dari tiga cara standar untuk mencerminkan konten file di tempat lain dapat membantu Anda dalam hal ini.

muru
sumber
Jawaban ini juga sangat jelas bagi saya, maaf saya hanya bisa menerima satu sebagai jawabannya!
Ray Burgemeestre