Permissão negada na pasta 777

17
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. Sem permissão para LS, mesmo com o 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?

user1797147
fonte
1
as permissões do diretório que você está lsing não são mostradas?
Zanna
é custom_hooks e tem raiz drwxrwxrwx 2, veja acima
user1797147
1
ls: cannot access '/var/opt/gitlab/git-data/repositories/GL/www.git': Permission deniedassim nos mostram o que acontece quando vocêls -ld /var/opt/gitlab/git-data/repositories/GL/www.git
Zanna
1
você poderia fazer o que eu pedi? se você não tiver permissão de execução no diretório pai então 777 em um presente não vai ajudá-lo
Zanna
2
Aparentemente, seu problema está mais alto na árvore. Vai manter-se um nível e examinar as permissões, e você vai descobrir que um deles não tem permissão x para o, por exemplodrwxr-x---
Zanna

Respostas:

21

Isso acontece porque há um diretório mais alto na árvore em que 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á declarar 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 será possível 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 para dar permissão aos diretórios 777. Tem certeza de que precisa fazer isso?

Como corrigir o problema de uma maneira mais segura:

Vamos supor que no /var/opt/gitlabdiretório você tenha algo parecido com isto:

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

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

sudo usermod -a -G john git

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

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
Zanna
fonte
1
Obrigado novamente, não, eu estava apenas testando algum script. Sinta-se muito mais confortável para editar com o N ++ no Windows do que com o rudimentar Gedit. Também o Nautilus, rudimentar, que não consegue CORTAR algo e depois COLAR ao criar uma nova pasta ao mesmo tempo ... ou clique com o botão direito do mouse -> Nova Pasta.
user1797147