Qual é o equivalente do Ubuntu à flag OSX `chmod -h`?


13

No OSX, posso definir as permissões do próprio link simbólico (em vez do que ele aponta para usar o -h). Na página do 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.

No Ubuntu 14.04, tento definir permissões de um link simbólico, mas ele é definido apenas no destino do link simbólico.

Trata-se de um link simbólico de /home/nagios/.ssh/someprivatekeypara /somewhere/else/privatekey, portanto, as permissões são importantes para o ssh. Como posso conseguir isso?


Então, por que você precisa desse link simbólico?
muru

1
você tem certeza de que o ssh se preocupa com as permissões no link simbólico e não com as permissões em / somewhere / else / privatekey?
Random832

@ Random832 Sim, posso ter chegado à conclusão errada, também fiquei um pouco confuso sobre como as permissões foram exibidas na ls -lsaída ( lrwxrwxrwx).
Ray Burgemeestre

@muru Eu estava criando uma imagem do Docker (buildserver) que usa uma chave ssh para acessar todos os tipos de servidores. Não quero colocar a chave privada por causa de motivos diferentes (por exemplo, se eu quiser hospedá-la no hub do docker). Então, vinculei-o a um volume que só é montado quando a imagem é executada. Embora, venha para pensar sobre isso, eu poderia ter também mudou a localização chave usando .ssh/config:)
Ray Burgemeestre

Respostas:


18

Não é possivel. Não há como as permissões em um link simbólico não fazem sentido (um link simbólico não é um arquivo; apenas aponta para um arquivo). A maneira de fazer isso com o Linux é através da ACL .

o link simbólico é explicado como ...

Os valores dos bits do modo de arquivo para o link simbólico criado não são especificados. Todas as interfaces especificadas pelo POSIX.1-2008 devem se comportar como se o conteúdo dos links simbólicos sempre possa ser lido, exceto que o valor dos bits do modo de arquivo retornados no campo st_mode da estrutura stat não é especificado.


A diferença está aqui: chmod e chmod ... é BSD versus Linux.


Não tenho certeza se é importante, mas com relação ao SSH: ele usa stat (2) , não lstat (2) para obter as permissões.

  • stat () stats o arquivo apontado pelo caminho e preenche o buf.
  • lstat () é idêntico a stat (), exceto que se path for um link simbólico, o próprio link será declarado, não o arquivo ao qual ele se refere.

2
A capacidade de definir permissões em links simbólicos não é especificada nem na versão mais recente, é uma extensão BSD.
Random832

1
@ Random832 hmm que pode ser mais preciso sim. Eu li hoje um pouco sobre o SO, mas não verifiquei isso: D
Rinzwind 22/15/15

4
Aliás, o POSIX especifica a fchmodatfunção, que pode ser usada para alterar o modo dos links simbólicos (recurso opcional - sistemas que não o suportam, incluindo Linux, retornam o erro EOPNOTSUPP), mas nada no chmodcomando para usá-lo. Somente -Ré definido no POSIX.
Random832

2
As permissões de link simbólico não fazem sentido no Linux . Nos sistemas em que você pode alterá-los (com lchmod(2)ou fchmodat(2)...), eles têm um significado (permitir / negar readlink()(ler) ou resolução de caminho através deles (executar)). As permissões de gravação normalmente não funcionam, pois você não pode alterar o destino de um link simbólico.
Stéphane Chazelas

O Unix discordaria de você que "um link simbólico não é um arquivo". Um link simbólico é um arquivo especial .
Hobbs 23/05

9

Você não pode. A chmodchamada de sistema subjacente simplesmente não suporta isso no Linux e, nesse caso, o Linux também não se importa com as permissões do link. De 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.

Quanto aos links físicos ou montagens de ligação, as permissões da fonte são usadas, portanto, nenhuma das três maneiras padrão de refletir o conteúdo de um arquivo em outro lugar pode ajudá-lo.


Esta resposta também foi muito clara para mim, desculpe, eu só poderia aceitar uma como resposta!
Ray Burgemeestre
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.