Jaki jest odpowiednik Ubuntu flagi OSX `chmod -h`?

13

W OSX mogę ustawić uprawnienia samego dowiązania symbolicznego (zamiast tego, co wskazuje na użycie -h). Ze strony podręcznika:

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

W Ubuntu 14.04 próbuję ustawić uprawnienia dowiązania symbolicznego, ale jest ono ustawione tylko na celu dowiązania symbolicznego.

Dotyczy to dowiązania symbolicznego od /home/nagios/.ssh/someprivatekeydo /somewhere/else/privatekey, więc uprawnienia są ważne dla ssh. Jak mogę to osiągnąć?

Ray Burgemeestre
źródło
Dlaczego więc potrzebujesz tego dowiązania symbolicznego?
muru
1
czy jesteś pewien, że ssh dba o uprawnienia do dowiązania symbolicznego, a nie o uprawnienia do / gdzieś / else / privatekey?
Random832
@ Random832 Tak, mogłem wyciągnąć niewłaściwy wniosek, byłem również trochę zdezorientowany co do sposobu wyświetlania uprawnień w pliku ls -lwyjściowym ( lrwxrwxrwx).
Ray Burgemeestre
@muru Tworzyłem obraz Dockera (buildserver), który używa klucza ssh do uzyskiwania dostępu do wszystkich rodzajów serwerów. Nie chcę umieszczać klucza prywatnego w środku z różnych powodów (np. Jeśli chcę go hostować w centrum dokowania). Więc dowiodłem go dowiązaniem symbolicznym i mam wskazać wolumin, który jest zamontowany dopiero po uruchomieniu obrazu. Chociaż, pomyśl o tym, mógłbym również zmienić kluczową lokalizację za pomocą .ssh/config:)
Ray Burgemeestre

Odpowiedzi:

18

Niemożliwe. Nie ma mowy, ponieważ uprawnienia do dowiązania symbolicznego są bez znaczenia (dowiązanie symboliczne nie jest plikiem, wskazuje tylko na plik). Jednak sposobem na to w Linuksie jest ACL .

dowiązanie symboliczne wyjaśniono jako ...

Wartości bitów trybu pliku dla utworzonego dowiązania symbolicznego są nieokreślone. Wszystkie interfejsy określone w POSIX.1-2008 powinny zachowywać się tak, jakby zawsze można było odczytać zawartość dowiązań symbolicznych, z tym wyjątkiem, że wartość bitów trybu pliku zwrócona w polu st_mode struktury statystyki jest nieokreślona.


Różnica jest tutaj: chmod i chmod ... to BSD kontra Linux.


Nie jestem pewien, czy jest to ważne, ale w odniesieniu do SSH: używa stat (2) , a nie lstat (2), aby uzyskać uprawnienia.

  • stat () statystyki plik wskazywany przez ścieżkę i wypełnia buf.
  • lstat () jest identyczny z stat (), z tym wyjątkiem, że jeśli ścieżka jest dowiązaniem symbolicznym, to samo dowiązanie jest statowane, a nie plik, do którego się odnosi.
Rinzwind
źródło
2
Możliwość ustawienia uprawnień do dowiązań symbolicznych nie jest określona nawet w najnowszej wersji, jest to rozszerzenie BSD.
Random832
1
@ Random832 hmm, które mogą być bardziej dokładne tak. Przeczytałem ten fragment dzisiaj na SO, ale nie sprawdziłem tego: D
Rinzwind
4
Nawiasem mówiąc, POSIX określa fchmodatfunkcję, której można użyć do zmiany trybu dowiązań symbolicznych (funkcja opcjonalna - systemy, które jej nie obsługują, w tym Linux, zwracają błąd EOPNOTSUPP), ale nic w chmodpoleceniu, aby tego użyć. Tylko -Rjest zdefiniowane w POSIX.
Random832
2
uprawnienia do dowiązań symbolicznych nie mają znaczenia w systemie Linux . W systemach, w których można je zmienić (za pomocą lchmod(2)lub fchmodat(2)...), mają one znaczenie (zezwalaj / odmawiaj readlink()(czytaj) lub rozwiąż ścieżkę przez nie (wykonaj)). Uprawnienia do zapisu zwykle nie mają znaczenia, ponieważ nie można zmienić celu dowiązania symbolicznego.
Stéphane Chazelas
Unix nie zgodzi się z tobą, że „dowiązanie symboliczne nie jest plikiem”. Dowiązanie symboliczne to specjalny plik.
hobbs
9

Nie możesz Podstawowe chmodwywołanie systemowe po prostu nie obsługuje tego w Linuksie, a co za tym idzie, Linux nie dba również o uprawnienia do łącza. Od 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.

Jeśli chodzi o twarde łącza lub montowanie powiązań, stosowane są uprawnienia źródła, więc żaden z trzech standardowych sposobów odzwierciedlenia zawartości pliku w innym miejscu nie może ci w tym pomóc.

muru
źródło
Ta odpowiedź była dla mnie bardzo jasna, przepraszam, że mogłem zaakceptować tylko jedną odpowiedź!
Ray Burgemeestre