Como faço para bloquear o acesso de leitura a um link simbólico?

4

Eu tenho esta estrutura de arquivos:

> APPLICATION 1
>> CONTROLLER (@JuniorProgrammers)
>> MODELS (symlink to SHARED/MODELS)
>> VIEWS (@Designers)
> APPLICATION 2
>> CONTROLLER (@JuniorProgrammers)
>> MODELS (symlink to SHARED/MODELS)
>> VIEWS (@Designers)
> SHARED
>> MODELS (@SeniorProgrammers)

Eu preciso que o PHP seja capaz de ler o conteúdo da Pasta 1.1, mas os programadores que fizerem FTP na pasta 1 não poderão ler o link simbólico (eles podem ver o link simbólico, mas não o seguir, incluindo todas as leituras e gravações).

O @ são os grupos de usuários que possuem acesso de leitura / gravação de cada camada.

    
por Bradley 08.06.2013 / 21:40

2 respostas

6

Os próprios links simbólicos têm o 777 porque, no Unix, a segurança de arquivos é julgada em uma base de arquivo / inode. Se forem os mesmos dados em que estão operando, devem ter as mesmas condições de segurança, independentemente do nome que você forneceu ao sistema para abri-lo.

[root@hypervisor test]# ls -l
total 0
lrwxrwxrwx. 1 root root 10 Jun  8 16:01 symTest -> /etc/fstab
[root@hypervisor test]# chmod o-rwx symTest
[root@hypervisor test]# ls -l
total 0
lrwxrwxrwx. 1 root root 10 Jun  8 16:01 symTest -> /etc/fstab
[root@hypervisor test]# :-(

Como as permissões são definidas no inode, não funcionará com links físicos mesmo:

[root@hypervisor test]# echo "Don't Test Me, Bro" > testing123
[root@hypervisor test]# ls -l
total 4
lrwxrwxrwx. 1 root root 10 Jun  8 16:01 symTest -> /etc/fstab
-rw-r--r--. 1 root root 19 Jun  8 16:06 testing123
[root@hypervisor test]# ln testing123 newHardLink
[root@hypervisor test]# ls -l
total 8
-rw-r--r--. 2 root root 19 Jun  8 16:06 newHardLink
lrwxrwxrwx. 1 root root 10 Jun  8 16:01 symTest -> /etc/fstab
-rw-r--r--. 2 root root 19 Jun  8 16:06 testing123
[root@hypervisor test]# chmod 770 testing123
[root@hypervisor test]# chmod 700 newHardLink
[root@hypervisor test]# ls -lh
total 8.0K
-rwx------. 2 root root 19 Jun  8 16:06 newHardLink
lrwxrwxrwx. 1 root root 10 Jun  8 16:01 symTest -> /etc/fstab
-rwx------. 2 root root 19 Jun  8 16:06 testing123

Um link simbólico não é um inode (que, na verdade, armazena os dados que você está querendo proteger) ergo no modelo Unix, o que complica as coisas ao ter dois conjuntos diferentes de permissões para proteger os mesmos dados.

Parece que esta é uma tentativa de fornecer diferentes grupos de pessoas a diferentes níveis de direitos de acesso ao mesmo arquivo. Se esse for o caso, você deveria usar POSIX ACL (via setfacl e getfacl ) para dar aos arquivos permissões apropriadas no destino do symlink.

EDITAR:

Para elaborar a direção que você provavelmente deseja, é algo como:

# setfacl -m u:apache:r-- "Folder 2.1"
# setfacl -m g:groupOfProgrammers:--- "Folder 2.1"
# setfacl -m g:groupOfProgrammers:r-x "Folder 1"

O texto acima dá ao usuário apache (substitua qualquer usuário seu apache / nginx / o que estiver rodando como) somente leitura para o destino do symlink, e dá groupOfProgrammers acesso de leitura ao diretório do link simbólico in (para que groupOfProgrammers possa obter uma lista completa de diretórios lá), mas desativa todos os bits de permissão para o mesmo destino do symlink.

    
por 08.06.2013 / 22:08
0

Ainda não sabemos o que você fez no nível do sistema de arquivos. A abordagem usual seria tornar o root (ou outra conta admin) o proprietário de todos os diretórios e fornecer aos diretórios de nível 2 os grupos com os direitos para o proprietário, rwx para o grupo e nenhum para others . Também pode ser útil ter o bit sticky definido ( chmod o+t "$dirname" ).

Os diretórios de nível 1 devem pertencer a usuários e grupos de usuários (por exemplo, root: root) com r-x direitos para others .

    
por 09.06.2013 / 03:23