Was ist das Ubuntu-Äquivalent zum OSX-Flag "chmod -h"?

13

In OSX kann ich die Berechtigungen für den Symlink selbst festlegen (anstelle des Punktes, auf den er mit -h verweist). Von der Manpage:

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

In Ubuntu 14.04 versuche ich, die Berechtigungen eines Symlinks festzulegen, aber es wird nur für das Symlink-Ziel festgelegt.

Da es sich um einen Symlink von /home/nagios/.ssh/someprivatekeybis handelt /somewhere/else/privatekey, sind Berechtigungen für ssh wichtig. Wie kann ich das erreichen?

Ray Burgemeestre
quelle
Warum brauchen Sie diesen Symlink?
muru
1
Sind Sie sicher, dass ssh sich um die Berechtigungen für den symbolischen Link und nicht um die Berechtigungen für / somewhere / else / privatekey kümmert?
Random832
@ Random832 Ja, ich habe möglicherweise die falsche Schlussfolgerung gezogen, ich war auch etwas verwirrt darüber, wie die Berechtigungen in der ls -lAusgabe ( lrwxrwxrwx) angezeigt wurden .
Ray Burgemeestre
@muru Ich habe ein (Buildserver-) Docker-Image erstellt, das einen SSH-Schlüssel verwendet, um auf alle Arten von Servern zuzugreifen. Ich möchte den privaten Schlüssel nicht aus verschiedenen Gründen einbauen (z. B. wenn ich ihn auf dem Docker-Hub hosten möchte). Also habe ich es symbolisiert und es auf ein Volume verweisen lassen, das erst gemountet wurde, nachdem das Image ausgeführt wurde. Wenn ich mir das überlege, hätte ich den Schlüssel auch mit .ssh/config:) ändern können
Ray Burgemeestre

Antworten:

18

Nicht möglich. Es gibt keine Möglichkeit, da Berechtigungen für einen Symlink bedeutungslos sind (ein Symlink ist keine Datei; er zeigt nur auf eine Datei). Der Weg, dies mit Linux zu tun, führt jedoch über ACL .

Symlink werden erklärt als ...

Die Werte der Dateimodusbits für die erstellte symbolische Verknüpfung sind nicht angegeben. Alle von POSIX.1-2008 angegebenen Schnittstellen müssen sich so verhalten, als ob der Inhalt symbolischer Links immer gelesen werden kann, mit der Ausnahme, dass der Wert der im Feld st_mode der stat-Struktur zurückgegebenen Dateimodusbits nicht angegeben ist.


Der Unterschied ist hier: chmod und chmod ... es ist BSD versus Linux.


Ich bin nicht sicher, ob es wichtig ist, aber in Bezug auf SSH: Es verwendet stat (2) , nicht lstat (2), um die Berechtigungen zu erhalten.

  • stat () gibt die Datei an, auf die path zeigt, und füllt buf aus.
  • lstat () ist identisch mit stat (), außer dass, wenn path eine symbolische Verknüpfung ist, die Verknüpfung selbst und nicht die Datei, auf die sie verweist, angegeben wird.
Rinzwind
quelle
2
Die Möglichkeit, Berechtigungen für Symlinks festzulegen, ist auch in der neuesten Version nicht festgelegt. Es handelt sich um eine BSD-Erweiterung.
Random832
1
@ Random832 hmm das dürfte ja genauer sein. Ich habe dieses Bit heute auf SO gelesen, habe es aber nicht überprüft: D
Rinzwind
4
Übrigens gibt POSIX die fchmodatFunktion an, mit der der Modus für symbolische Verknüpfungen geändert werden kann (optionales Feature - Systeme, die dies nicht unterstützen, einschließlich Linux, geben den Fehler EOPNOTSUPP zurück), aber nichts im chmodBefehl, um dies zu verwenden. Nur -Rist in POSIX definiert.
Random832
2
Symlink-Berechtigungen sind unter Linux bedeutungslos . Auf Systemen, auf denen Sie sie ändern können (mit lchmod(2)oder fchmodat(2)...), haben sie eine Bedeutung (Zulassen / Verweigern readlink()(Lesen) oder Pfadauflösung durch sie (Ausführen)). Schreibrechte gibt es normalerweise nicht, da Sie das Ziel eines Symlinks nicht ändern können.
Stéphane Chazelas
Unix würde Ihnen widersprechen, dass "ein Symlink keine Datei ist". Ein Symlink ist eine spezielle Datei.
Hobbs
9

Das kannst du nicht. Der zugrunde liegende chmodSystemaufruf unterstützt dies in Linux einfach nicht, und Linux kümmert sich auch nicht um die Berechtigungen des Links. Von 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.

Hinsichtlich fester Verknüpfungen oder Bindungsbereitstellungen werden die Berechtigungen der Quelle verwendet. Daher kann keine der drei Standardmethoden, mit denen der Inhalt einer Datei an anderer Stelle wiedergegeben wird, Sie dabei unterstützen.

muru
quelle
Diese Antwort war mir auch sehr klar, sorry ich konnte nur eine als Antwort akzeptieren!
Ray Burgemeestre