Permissão negada na pasta 777

6
john@ubuntu01:~$ sudo ls -l /var/opt/gitlab/git-data/repositories/GL/www.git
total 25068
drwxr-xr-x  2 git  git      4096 aug 14 19:58 branches
-rw-r--r--  1 git  git        66 aug 14 19:58 config
drwxrwxrwx  2 root root     4096 aug 15 14:56 custom_hooks
-rw-r--r--  1 git  git        73 aug 14 19:58 description
-rw-r--r--  1 git  git        23 aug 14 19:58 HEAD
lrwxrwxrwx  1 git  git        47 aug 14 19:58 hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks
drwxr-xr-x  2 git  git      4096 aug 14 19:58 hooks.old.1471193907
-rw-r--r--  1 git  git      1329 aug 15 14:48 index
drwxr-xr-x  2 git  git      4096 aug 15 13:58 info
drwxr-xr-x 71 git  git      4096 aug 15 14:55 objects
-rw-r--r--  1 git  git        98 aug 15 13:58 packed-refs
-rw-r--r--  1 git  git  25618530 aug 15 14:03 post-receive.log
drwxr-xr-x  5 git  git      4096 aug 14 20:31 refs
john@ubuntu01:~$ ls -l /var/opt/gitlab/git-data/repositories/GL/www.git
ls: cannot access '/var/opt/gitlab/git-data/repositories/GL/www.git': Permission denied

Aqui estão as ACLs

john@ubuntu01:~$ sudo lsattr /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks
-------------e-- /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks/post-receive

Eu nunca vi isso antes. Nenhuma permissão para LS mesmo com 777? Eu preciso compartilhar esta pasta para um desenvolvimento mais conveniente. Como posso resolver isso? Obrigado.

EDITADO: (aqui estão seus pedidos)

john@ubuntu01:~$ sudo ls -ld /var/opt/gitlab/git-data/repositories/GL/www.git
drwxrwxrwx 8 git git 4096 aug 15 14:48 /var/opt/gitlab/git-data/repositories/GL/www.git
john@ubuntu01:~$ sudo ls -ld /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks
drwxrwxrwx 2 root root 4096 aug 15 14:56 /var/opt/gitlab/git-data/repositories/GL/www.git/custom_hooks

EDITADO MAIS

sudo ls -ld /var/opt/gitlab/git-‌​data/repositories/GL/‌​www.git
ls: cannot access '/var/opt/gitlab/git-‌​data/repositories/GL/‌​www.git': No such file or directory

hmmm ... o que é isso?

    
por user1797147 15.08.2016 / 14:28

1 resposta

9

Isso acontece porque existe um diretório mais alto na árvore onde você não tem permissão de execução. Se um diretório pai não tiver permissão de execução para algum usuário, esse usuário não poderá determinar nenhum subdiretório, independentemente das permissões nesses subdiretórios.

Exemplo:

$ ls -l cake
drwxr-xr-x 2 zanna zanna 4096 Jul 12 11:43 brownies
$ chmod 666 cake
$ ls -l cake/brownies
ls: cannot access 'cake/brownies': Permission Denied

Embora eu seja o proprietário do diretório 'brownies' e todos os usuários tenham permissão para lê-lo e inseri-lo, não posso acessá-lo se o diretório pai não tiver permissão de execução.

É melhor usar grupos para gerenciar permissões do que dar a dar diretórios 777 permissão. Tem certeza de que precisa fazer isso?

Como corrigir o problema de maneira mais segura:

Vamos supor que no diretório /var/opt/gitlab você tenha algo assim:

drwxr-x--- 5 git git 4096 aug 14 17:30 gitlab

Adicione você mesmo e todos os outros usuários que precisam de permissão para o grupo git, por exemplo:

sudo usermod -a -G john git

Os usuários precisam fazer logout e fazer login para que isso entre em vigor. Mesmo que a permissão de gravação seja necessária em um subdiretório, não é necessário adicioná-lo em um diretório pai, a propósito, para que você não precise usar chmod . Você pode alterar suas permissões de subdiretório para impedir que alguém possa escrever:

chmod 775 /var/opt/gitlab/git‌​-data/repositories/GL‌​/www.git/custom_hooks

ou

chmod o-w /var/opt/gitlab/git‌​-data/repositories/GL‌​/www.git/custom_hooks
    
por Zanna 15.08.2016 / 17:31