Qual è l'equivalente di Ubuntu del flag `chmod -h` di OSX?


13

In OSX posso impostare le autorizzazioni del link simbolico stesso (invece della cosa che punta a usare il -h). Dalla pagina man:

 -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 provo a impostare le autorizzazioni di un collegamento simbolico, ma è impostato solo sulla destinazione del collegamento simbolico.

Riguarda un collegamento simbolico da /home/nagios/.ssh/someprivatekeya /somewhere/else/privatekey, quindi le autorizzazioni sono importanti per ssh. Come posso raggiungere questo obiettivo?


Quindi, perché hai bisogno di questo link simbolico?
muru,

1
sei sicuro che ssh si preoccupi delle autorizzazioni sul collegamento simbolico e non delle autorizzazioni su / somewhere / else / privatekey?
Casuale 832,

@ Random832 Sì, potrei aver tratto una conclusione sbagliata, ero anche un po 'confuso su come le autorizzazioni erano visualizzate ls -lnell'output ( lrwxrwxrwx).
Ray Burgemeestre,

@muru Stavo creando un'immagine Docker (buildserver) che utilizza una chiave ssh per accedere a tutti i tipi di server. Non voglio inserire la chiave privata all'interno per diversi motivi (ovvero se voglio ospitarla sull'hub docker). Quindi l'ho collegato in modo simbolico e ho puntato a un volume che è montato solo una volta che l'immagine è stata eseguita. Anche se, vieni a pensarci, avrei anche potuto cambiare la posizione chiave usando .ssh/config:)
Ray Burgemeestre,

Risposte:


18

Non possibile. Non è possibile poiché le autorizzazioni su un collegamento simbolico sono prive di significato (un collegamento simbolico non è un file; punta solo a un file). Il modo per farlo con Linux è attraverso ACL .

i collegamenti simbolici sono spiegati come ...

I valori dei bit della modalità file per il collegamento simbolico creato non sono specificati. Tutte le interfacce specificate da POSIX.1-2008 devono comportarsi come se i contenuti dei collegamenti simbolici possano sempre essere letti, tranne per il fatto che il valore dei bit della modalità file restituiti nel campo st_mode della struttura stat non è specificato.


La differenza è qui: chmod e chmod ... è BSD contro Linux.


Non sono sicuro che sia importante, ma per quanto riguarda SSH: utilizza stat (2) , non lstat (2) per ottenere i permessi.

  • stat () stats il file indicato dal percorso e riempie buf.
  • lstat () è identico a stat (), tranne per il fatto che se path è un link simbolico, allora il link stesso è stat-ed, non il file a cui si riferisce.

2
La possibilità di impostare autorizzazioni per i collegamenti simbolici non è specificata nemmeno nella versione più recente, è un'estensione BSD.
Casuale 832,

1
@ Random832 hmm che potrebbe essere più preciso sì. Ho letto quel pezzo oggi su SO ma non ho fatto un controllo su questo: D
Rinzwind

4
Per inciso POSIX specifica la fchmodatfunzione, che può essere utilizzata per modificare la modalità dei collegamenti simbolici (funzionalità opzionale - sistemi che non la supportano, incluso Linux, restituiscono l'errore EOPNOTSUPP), ma nulla nel chmodcomando per utilizzarlo. Solo -Rè definito in POSIX.
Casuale 832,

2
le autorizzazioni symlink non hanno senso su Linux . Sui sistemi in cui è possibile modificarli (con lchmod(2)o fchmodat(2)...), hanno un significato (consenti / nega readlink()(leggi) o risoluzione del percorso attraverso di essi (esegui)). Le autorizzazioni di scrittura di solito non lo fanno, poiché non è possibile modificare la destinazione di un collegamento simbolico.
Stéphane Chazelas,

Unix non sarebbe d'accordo con te sul fatto che "un collegamento simbolico non è un file". Un link simbolico è un file speciale .
Hobbs,

9

Non puoi. La chmodchiamata di sistema sottostante semplicemente non lo supporta in Linux e, per questo, Linux non si preoccupa nemmeno delle autorizzazioni del collegamento. Da 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.

Per quanto riguarda i collegamenti fissi o i bind mount, vengono utilizzate le autorizzazioni del sorgente, quindi nessuno dei tre modi standard per riflettere il contenuto di un file altrove può aiutarti in questo.


Anche questa risposta è stata molto chiara per me, mi spiace di poterne accettare solo una come risposta!
Ray Burgemeestre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.