Como conceder acesso a uma pasta que resida em uma pasta pertencente a outro grupo

2

Situação:
O grupo A requer acesso a /path/to/dir/foo para fazer upload de arquivos por meio de ssh ou ftp, mas o diretório em questão: /path/to/dir/foo é de propriedade do grupo B (se você quiser: /path é de propriedade recursiva por B ) , que deve ficar assim, por razões de segurança.


Minha tentativa de solução:
Eu crio um link simbólico para /home/A , que A possui. Em seguida, concedo permissões para que A possa acessar o link simbólico:

sudo ln -s /path/to/dir/foo /home/A/foo
sudo chown -h A:A /home/A/foo

Eu percebi que /path/to/dir/foo deveria pelo menos pertencer a um grupo do qual A faz parte:

sudo addgroup C
sudo useradd -G C A
sudo chown -R B:C /path/to/dir/foo
sudo chmod -R 774 /path/to/dir/foo

Depois de fazer tudo isso, conectei-me por meio de um cliente FTPS como usuário A e alterei o diretório para: /home/A . Para minha surpresa, o symlink não é visível, o que é estranho, porque o proFTPd está configurado para mostrar links simbólicos.

Eu também tentei conectar através do SFTP ao mesmo diretório. Desta vez, o link simbólico ficou visível, mas quando tentei acessá-lo, recebi o seguinte aviso:

  

Não é possível abrir o arquivo remoto '/ path / to / dir / foo'.

     

Permissão negada.
  Código de erro: 3
  Mensagem de erro do servidor: Permissão negada

Isso me deixa com pouca ou nenhuma alternativa, já que essa era a solução mais fácil que eu conseguia pensar.


Tentativa desesperada:
Eu concedi permissões globais para /path/to/dir/foo , mas ainda não consegui acessar o link simbólico foo em /home/A como usuário A . Significado: ls -l /path/to/dir/foo imprimiria -rwxrwxrwx .


Pergunta:
Como faço para criar um link simbólico /home/A/foo que aponta para /path/to/dir/foo . Qual A pode acessar, apesar de /path/to/dir/foo ser de propriedade do usuário: group B ( /path é de propriedade de B )?

    
por Nikita 27.11.2014 / 14:43

2 respostas

1

Se o seu diretório estiver em um sistema de arquivos ext4, você pode usar o ACL . Melhor explicado pelo exemplo; meu usuário é romano e o outro usuário é default .

Como romano :

[romano:~/tmp] % mkdir -p a/b/c/d
[romano:~/tmp] % cd !$
cd a/b/c/d
[romano:~/tmp/a/b/c/d] % touch f1
[romano:~/tmp/a/b/c/d] % ls -l
total 0
-rw-rw-r-- 1 romano romano 0 nov 27 17:15 f1

Obviamente eu posso escrever para o diretório d , é meu ... mas de default :

default@pern:/home/romano/tmp/a/b/c/d$ touch f2
touch: cannot touch ‘f2’: Permission denied

Sim. Nenhum link simbólico irá alterar o fato de que default não pode escrever lá.

Agora, como romano , concedo acesso adicional ao grupo default :

[romano:~/tmp/a/b/c/d] % setfacl -m g:default:rwx .

(leia como: adicionar rwx permissão para agrupar default ao diretório atual . )

... E agora, como default :

default@pern:/home/romano/tmp/a/b/c/d$ touch f2
default@pern:/home/romano/tmp/a/b/c/d$ ls -l
total 0
-rw-rw-r-- 1 romano  romano  0 nov 27 17:15 f1
-rw-rw-r-- 1 default default 0 nov 27 17:17 f2

A sintaxe da ACL é um pouco convocada, mas é uma ferramenta bastante poderosa. Veja man setfacl e man getfacl para uma informação completa e mais exemplos.

No seu caso, se você tiver /path/to/dir/foo de A: A e quiser que o grupo B tenha acesso de gravação a foo , deverá:

  1. adicione +rx permission a cada diretório que o leva para o grupo B:

     setfacl -m g:B:r-x /path
     setfacl -m g:B:r-x /path/to
     setfacl -m g:B:r-x /path/to/dir
    
  2. adicione +rwx permssion ao grupo B ao diretório:

     setfacl -m g:B:rwx /path7to7dir/foo
    

Aviso no entanto, parece que temos um erro desagradável ao redor ... Veja link . Eu não tenho certeza sobre as conseqüências --- o caso simples acima funcionou ok, mas por favor, verifique.

    
por Rmano 27.11.2014 / 17:25
0

Esta resposta é baseada na dica que Rmano deu no final de sua resposta, mesmo que o método de lista de controle de acesso a arquivos não funcionasse.

Não funcionou, porque o caminho completo, por ex. /path/to/dir requer pelo menos a permissão leitura + execução : sudo chmod -R g+rx /path . Isso resolveu meu problema, e agora posso acessar o link simbólico no diretório pessoal de A e gravar nos arquivos contidos.

    
por Nikita 04.12.2014 / 11:04