Digamos que você tenha essa estrutura:
+ directory
-- file1
-- file2
-- file3 -> /tmp/file3
file3
é um link para outro file3
em outro lugar do sistema.
Agora digamos que eu chmod 777
o diretório e todo o conteúdo dentro dele. O meu file3
em /tmp
receber essas permissões? Além disso, digamos que temos a mesma situação, mas revertida.
/tmp/file3 -> /directory/file3
Se eu aplicar as permissões no arquivo ao qual está sendo vinculado, como isso afeta o link?
Respostas:
Depende de como você chama
chmod
e da plataforma em que está executando.Por exemplo, em um sistema Linux,
man chmod
diz o seguinte:No entanto, em um Mac, o chmod pode ser usado para modificar as permissões de um link simbólico usando opções como esta (de
man chmod
):Por uma questão de exemplo, vamos supor que você esteja em uma máquina Linux para o restante desta resposta.
Se, no primeiro caso, você executar
chmod -R 777 directory
para alterar recursivamente as permissões, o destino do link não será afetado, mas, se o fizerchmod 777 directory/*
, será.Se você alterar as permissões diretamente no destino do link, essas permissões continuarão (uma vez que, como dizem a página de manual e o baraboom , as permissões de link reais não são usadas para nada).
Log de teste para ilustração:
fonte
as respostas de baraboom e peth estão corretas: os bits de permissão nos links simbólicos são irrelevantes (exceto no macOS; veja abaixo) e a alteração de permissão em um link simbólico - pela
chmod
ferramenta de linha de comando ou pelachmod()
chamada do sistema - simplesmente agirá como se foi realizado contra o alvo do link simbólico.Para citar a descrição do sistema symlink () do SUSv4 / POSIX.1-2008, chame :
Aqui, "não especificado" deixa espaço de interpretação para cada implementação. Específicos:
stat()
retornast_mode=0777
, não importa qual era o umask quando o link simbólico foi criado;ls -l
portanto, sempre é exibidolrwxrwxrwx
para links simbólicos.chmod -h
comando mencionado acima pode alterar essa permissão de link (que internamente usa umalchown()
chamada de sistema não POSIX para conseguir isso) e ostat()
sistema call retorna esse valor parast_mode
.Links simbólicos no Linux e FreeBSD sempre podem ser seguidos, conforme especificado pelo POSIX. Em particular, no FreeBSD, isso significa que o modo de arquivo de um link simbólico não tem efeito algum no controle de acesso.
Por outro lado, o macOS quebra levemente o POSIX. Embora um link simbólico possa ser seguido independentemente de sua permissão de leitura,
readlink()
falha comEACCES
(Permissão negada) se o usuário não tiver permissão de leitura:(Observe que a
-> target
parte está ausente na saída do segundols -l
comando e quecat symlink
ainda teve êxito e imprimiu o conteúdo dotarget
arquivo, mesmo que o usuário não tenha permissão de leiturasymlink
.)Aparentemente, o NetBSD oferece uma opção especial de montagem denominada
symperm
que, se definida, causa permissões simbólicas de leitura / execução dereadlink()
link para controlar e atravessar a passagem.fonte
fonte