Dado,
touch /tmp/abc
ln -vs abc /tmp/def
$ ls -l /tmp/???
-rw-rw-r-- 1 ubuntu ubuntu 0 Apr 10 22:10 /tmp/abc
lrwxrwxrwx 1 ubuntu ubuntu 3 Apr 10 22:10 /tmp/def -> abc
Por que estou recebendo:
$ sudo chown syslog: /tmp/def
chown: cannot dereference '/tmp/def': Permission denied
$ sudo chown --dereference syslog: /tmp/def
chown: cannot dereference '/tmp/def': Permission denied
Ref:
chown (1) :
--dereference
afeta o referente de cada link simbólico (este é o padrão), em vez do link simbólico em si
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
Esta resposta supõe que isso esteja em vigor:
O usuário root (que o seguinte recurso de segurança foi especialmente destinado a afetar), como qualquer outro usuário, é afetado pelo sysctl
fs.protected_symlinks
descrito emproc(5)
:Aqui:
/tmp
é um diretório gravável mundialmente: fail/tmp
o proprietário de (root): falhaportanto
EACCESS
= Permissão negadaAqui estão dois outros casos que funcionariam:
evitar que a primeira condição falhe
Agora que o link simbólico pertence ao root, a 1ª condição não falhará, permitindo a execução:
Para afetar com sucesso
/tmp/abc
.Se assim for pretendido,
def
pode ser alterado de volta para o seu proprietário anterior ousyslog
também para:ou
Evitar que a segunda condição falhe
Faça o mesmo experimento em um diretório não fixo (mesmo que seja gravável mundialmente):
O que agora permite executar:
Eles podem ser movidos de volta se essa for a intenção:
Além disso, conforme sugerido no comentário , é possível evitar novamente a falha da primeira condição fazendo a pesquisa no
ubuntu
usuário original, uma vez que ele já é o proprietário do link simbólico. Por exemplo usando:ou se não houver nenhum caractere especial, como Line Feed (LF /
\n
) no final do nome do arquivo de destino (que seria removido pelo interpretador Shell), como no caso do OP, simplesmente: