В папке 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

Вот ACL

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

Я никогда не видел этого раньше. Нет разрешения на ЛС даже с 777? Мне нужно поделиться этой папкой для более удобной разработки. Как я могу решить это? Спасибо.

РЕДАКТИРОВАНИЕ: (вот ваши запросы)

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

ИЗДАНО БОЛЬШЕ

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

хммм ... что это?

user1797147
источник
1
разрешения каталога, который вы используете ls, не отображаются?
Занна
это custom_hooks и имеет корневой каталог drwxrwxrwx 2, см. выше
user1797147
1
ls: cannot access '/var/opt/gitlab/git-data/repositories/GL/www.git': Permission deniedтак покажите нам, что происходит, когда выls -ld /var/opt/gitlab/git-data/repositories/GL/www.git
Zanna
1
не могли бы вы сделать то, что я спросил? если у вас нет разрешения на выполнение в родительском каталоге, то 777 в этом не поможет вам
Zanna
2
Видимо, ваша проблема выше дерева. Продолжайте подниматься до уровня и изучать разрешения, и вы обнаружите, что у одного из них нет разрешения x для o, напримерdrwxr-x---
Zanna

Ответы:

21

Это происходит потому, что в дереве есть каталог выше, где у вас нет разрешения на выполнение. Если родительский каталог не имеет разрешения на выполнение для какого-либо пользователя, то этот пользователь не может определять какие-либо подкаталоги независимо от разрешений для этих подкаталогов.

Пример:

$ 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

Несмотря на то, что я являюсь владельцем каталога «Домовые» и все пользователи имеют разрешение на чтение и ввод, я не могу получить к нему доступ, если его родительский каталог не имеет разрешения на выполнение.

Лучше использовать группы для управления разрешениями, чем давать каталогам разрешение 777. Вы уверены, что вам нужно это сделать?

Как решить проблему более безопасным способом:

Давайте предположим, что в /var/opt/gitlabкаталоге у вас есть что-то вроде этого:

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

Добавьте себя и всех других пользователей, которым необходимо разрешение, в группу git, например:

sudo usermod -a -G john git

Пользователи должны выйти и снова войти, чтобы это вступило в силу. Даже если разрешение на запись требуется в подкаталоге, вам, кстати, не нужно добавлять его в родительский каталог, поэтому вам вообще не нужно его использовать chmod. Возможно, вы захотите изменить разрешения своего подкаталога, чтобы запретить кому-либо писать в него:

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

или

chmod o-w /var/opt/gitlab/git‌​-data/repositories/GL‌​/www.git/custom_hooks
Занна
источник
1
Еще раз спасибо, нет, я просто тестировал какой-то скрипт. Чувствовать себя намного удобнее с помощью N ++ в Windows, чем в зачаточном Gedit. Также рудиментарный Наутилус, который не в состоянии что-то ВЫРЕЗАТЬ, а затем ПРОСТИТЬ с созданием новой папки за это время ... или щелкнуть правой кнопкой мыши -> Новая папка.
user1797147